From b8c00bf9148f339dfeb3e14e53948bc5488982dc Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 7 Nov 2021 13:11:29 -0800 Subject: [PATCH] Allow opening joysticks that are read-only on Linux Fixes https://github.com/libsdl-org/SDL/issues/4713 --- src/joystick/linux/SDL_sysjoystick.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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); }