SDL2看不到操纵杆,但操作系统看到了



我使用的是带有自制Arduino USB操纵杆的Ubuntu 18.0.4.4 LTS。

操作系统在/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也起作用,作为根:

$ 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()总是返回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使用/dev/input/event*设备文件来访问游戏杆/游戏板,因此您需要对这些文件具有读取(在某些情况下还需要写入(权限。大多数linux发行版都为这些文件使用特殊的用户组,例如debian或gentoo上的input组;检查您的权限,并使您的用户成为适当组的成员(然后重新登录(。

我正在使用pygame和树莓派4。由于pygame隐藏了很多错误消息,我花了很长时间才找到罪魁祸首。@keltar提出的解决方案对我有效。为了完整起见,我共享命令:

$ sudo usermod -aG input username

相关内容

  • 没有找到相关文章

最新更新