For using SDL with libGDX desktop, you can use Jamepad. It supports rumbling. There are wrappers for Jamepad to use it as a drop-in replacement for the libGDX controller implementation, for example gdx-controllerutils.
Now, a problem is that you can't trigger rumbling with the existing implementations: libGDX' controller interface just don't have a method for doing so. The task still to do is:
- make an own Controller interface extending libGDX' interface with methods for rumbling
- implement this interface in JamepadController
- check with
instanceof in your core code if you have an Controller implementing your interface and then rumble
Best was if the libGDX' controller interface would be extended. There are other methods lacking as well, for example requesting how many buttons and axis are present. Apparently, there is not much interest in the controller extension by the maintainers, so you are better off with an own solution described above.