【问题标题】:SDL2 does not see joystick, but OS doesSDL2 看不到操纵杆,但操作系统可以
【发布时间】:2020-05-05 00:09:01
【问题描述】:

我正在使用 Ubuntu 18.0.4.4 LTS,并附有基于 Arduino 的自制 USB 游戏杆。

操作系统在/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() 始终返回 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 或来自 Ubuntu 存储库的二进制文件?
  • 这些来自 Ubuntu 存储库。
  • @Bram 您的/dev/input/event* 权限是什么?我想您至少需要读取权限(如果您有强制反馈,可能还需要写入权限)。检查strace -e file ./your_test_program的输出。
  • @keltar 以 root 身份运行时,找到了操纵杆。如果你写出来,我会把它标记为答案。谢谢。

标签: ubuntu sdl-2 hid joystick input-devices


【解决方案1】:

SDL2 uses /dev/input/event* 设备文件以访问游戏杆/游戏手柄,因此您需要读取(在某些情况下是写入)该文件的权限。大多数 linux 发行版对该文件使用特殊的用户组,例如input debian 或 gentoo 组;检查您的权限是什么,并使您的用户成为适当组的成员(然后重新登录)。

【讨论】:

    【解决方案2】:

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

    $ sudo usermod -aG input username
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多