SDL2 не видит джойстик, а ОС видит

Я использую Ubuntu 18.0.4.4 LTS с подключенным самодельным USB-джойстиком на базе Arduino.

ОС видит устройство как по адресу /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

Тем не менее, SDL_NumJoysticks() SDL2 всегда возвращает 0, несмотря на инициализацию SDL2 с поддержкой джойстика и геймпада:

        SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER | SDL_INIT_AUDIO );

Почему SDL2 не может использовать работающее устройство /dev/input/js0 в Ubuntu?


person Bram    schedule 05.05.2020    source источник
comment
Самостоятельно собранный SDL2 или бинарники из репозиториев Ubuntu?   -  person genpfault    schedule 05.05.2020
comment
Они были из репозитория Ubuntu.   -  person Bram    schedule 05.05.2020
comment
@ Брэм, какие у тебя /dev/input/event* разрешения? Я полагаю, вам нужны как минимум права на чтение (и, возможно, на запись, если у вас есть принудительная обратная связь). Проверьте вывод strace -e file ./your_test_program.   -  person keltar    schedule 05.05.2020
comment
@keltar При запуске с правами root джойстик найден. Если напишете, отмечу как ответ. Спасибо.   -  person Bram    schedule 06.05.2020


Ответы (1)


SDL2 использует /dev/input/event* файлы устройства для доступ к джойстикам/геймпадам, поэтому вам нужны права на чтение (а в некоторых случаях и на запись) для этих файлов. Большинство дистрибутивов Linux используют специальную группу пользователей для этих файлов, например. input группа на debian или gentoo; проверьте, какие у вас разрешения, и сделайте своего пользователя членом соответствующей группы (и после этого повторно войдите в систему).

person keltar    schedule 06.05.2020