diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c index 984005ff7..9a0a60e1f 100644 --- a/src/joystick/linux/SDL_sysjoystick.c +++ b/src/joystick/linux/SDL_sysjoystick.c @@ -963,7 +963,12 @@ PrepareJoystickHwdata(SDL_Joystick *joystick, SDL_joylist_item *item) &joystick->naxes, &joystick->nhats); } else { - const int fd = open(item->path, O_RDWR | O_CLOEXEC, 0); + /* Try read-write first, so we can do rumble */ + int fd = open(item->path, O_RDWR | O_CLOEXEC, 0); + if (fd < 0) { + /* Try read-only again, at least we'll get events in this case */ + fd = open(item->path, O_RDONLY | O_CLOEXEC, 0); + } if (fd < 0) { return SDL_SetError("Unable to open %s", item->path); }