SDL2 看不到操纵杆,但 OS 看到
SDL2 does not see joystick, but OS does
我正在使用 Ubuntu 18.0.4.4 LTS,并附有基于 Arduino 的自制 USB 操纵杆。
OS 在 /dev/input/js0
和 /dev/input/event5
上都看到了设备并且 jstest 与它一起工作:
$ jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (Arduino LLC Arduino Micro) has 6 axes (X, Y, Z, Rx, Ry, Rz)
and 0 buttons ().
Testing ... (interrupt to exit)
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 ^C
evtest 也可以作为 root:
$ sudo evtest /dev/input/event5
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x2341 product 0x8037 version 0x101
Input device name: "Arduino LLC Arduino Micro"
Supported events:
Event type 0 (EV_SYN)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 0
Min -100
Max 100
Flat 12
Event code 1 (ABS_Y)
Value 0
Min -100
Max 100
Flat 12
Event code 2 (ABS_Z)
Value 0
Min -100
Max 100
Flat 12
Event code 3 (ABS_RX)
Value 0
Min -100
Max 100
Flat 12
Event code 4 (ABS_RY)
Value 0
Min -100
Max 100
Flat 12
Event code 5 (ABS_RZ)
Value 0
Min -100
Max 100
Flat 12
然而,SDL2 的 SDL_NumJoysticks()
总是 returns 0,尽管使用操纵杆和游戏手柄支持初始化 SDL2:
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER | SDL_INIT_AUDIO );
为什么 SDL2 不能在 Ubuntu 上使用正常工作的 /dev/input/js0 设备?
SDL2 uses /dev/input/event*
设备文件以访问 joysticks/gamepads,因此您需要读取(在某些情况下写入)该文件的权限。大多数 linux 发行版为该文件使用特殊的用户组,例如input
debian 或 gentoo 群组;检查您的权限是什么,并使您的用户成为适当组的成员(然后重新登录)。
我正在使用 pygame 和 raspberry Pi 4。由于 pygame 隐藏了很多错误消息,我花了很长时间才找到罪魁祸首。 @keltar 提出的解决方案对我有用。为了完整起见,我分享命令:
$ sudo usermod -aG input username
我正在使用 Ubuntu 18.0.4.4 LTS,并附有基于 Arduino 的自制 USB 操纵杆。
OS 在 /dev/input/js0
和 /dev/input/event5
上都看到了设备并且 jstest 与它一起工作:
$ jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (Arduino LLC Arduino Micro) has 6 axes (X, Y, Z, Rx, Ry, Rz)
and 0 buttons ().
Testing ... (interrupt to exit)
Axes: 0: 0 1: 0 2: 0 3: 0 4: 0 5: 0 ^C
evtest 也可以作为 root:
$ sudo evtest /dev/input/event5
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x2341 product 0x8037 version 0x101
Input device name: "Arduino LLC Arduino Micro"
Supported events:
Event type 0 (EV_SYN)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 0
Min -100
Max 100
Flat 12
Event code 1 (ABS_Y)
Value 0
Min -100
Max 100
Flat 12
Event code 2 (ABS_Z)
Value 0
Min -100
Max 100
Flat 12
Event code 3 (ABS_RX)
Value 0
Min -100
Max 100
Flat 12
Event code 4 (ABS_RY)
Value 0
Min -100
Max 100
Flat 12
Event code 5 (ABS_RZ)
Value 0
Min -100
Max 100
Flat 12
然而,SDL2 的 SDL_NumJoysticks()
总是 returns 0,尽管使用操纵杆和游戏手柄支持初始化 SDL2:
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER | SDL_INIT_AUDIO );
为什么 SDL2 不能在 Ubuntu 上使用正常工作的 /dev/input/js0 设备?
SDL2 uses /dev/input/event*
设备文件以访问 joysticks/gamepads,因此您需要读取(在某些情况下写入)该文件的权限。大多数 linux 发行版为该文件使用特殊的用户组,例如input
debian 或 gentoo 群组;检查您的权限是什么,并使您的用户成为适当组的成员(然后重新登录)。
我正在使用 pygame 和 raspberry Pi 4。由于 pygame 隐藏了很多错误消息,我花了很长时间才找到罪魁祸首。 @keltar 提出的解决方案对我有用。为了完整起见,我分享命令:
$ sudo usermod -aG input username