LINUX.ORG.RU

Джойстик не работает


0

1

Само устройство в системе определяется иксами

$ xinput list | grep Hotas
⎜   ↳ Thrustmaster T.Flight Hotas X           	id=6	[slave  pointer  (2)]
и оставляет записи в dmesg
[163741.130116] usb 1-1: New USB device found, idVendor=044f, idProduct=b108
[163741.130119] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[163741.130123] usb 1-1: Product: T.Flight Hotas X
[163741.130125] usb 1-1: Manufacturer: Thrustmaster
[163741.130230] usb 1-1: ep 0x81 - rounding interval to 64 microframes, ep desc says 80 microframes
[163741.132361] input: Thrustmaster T.Flight Hotas X as /devices/pci0000:00/0000:00:1c.6/0000:06:00.0/usb1/1-1/1-1:1.0/input/input7
[163741.132505] generic-usb 0003:044F:B108.0006: input,hidraw5: USB HID v1.00 Joystick [Thrustmaster T.Flight Hotas X] on usb-0000:06:00.0-1/input0
Кстати, на все манипуляции с джойстком он реагирует в /dev/input/event7, как и подсказал dmesg. Таким образом проблема в иксах и дальше. С драйвером evdev устройство появляется в xinput и эмулирует мышь. С драйвером joystick у меня после перезапуска иксов отваливаются все устройства ввода и приходится делать Alt+SysRq+R и только потом уже Ctrl+Alt+F1. Судя по логам, в данном случае InputClass вешает свой драйвер куда надо и не надо, считая всех поголовно джойстиками. А ведь это почти копипаста из man joystick, мной лишь была добавлена проверка по вендору. Куски xorg.conf: для joystick
Section "InputClass"
         Identifier "joystick-all"
         Driver "joystick"
         Option "MatchIsJoystick"   "on"
         Option "MatchDevicePath" "/dev/input/event7"
         Option "MatchVendor" "ThrustMaster, Inc."
EndSection
И для evdev:
Section "InputDevice"
        Identifier "Thrustmaster T.Flight Hotas X"
        Option "Device" "/dev/input/event7"
        Option "Path" "/dev/input/event7"
        Driver "evdev"
        Option "SendCoreEvents" "True"
EndSection
Да, я пробовал прописывать само устройство в InputDevice, а не чтоб оно ловилось через InputClass, результат тот же.

Deleted

Та-ак, окэй, я почти заставил его заработать.
Если убрать рекомендуемую в man joystick секцию InputClass из xorg.conf и поместить её в /usr/share/X11/xorg.conf.d/10-evdev.conf, в самое начало, то клавиатура определяется как клавиатура, мышь как джойстик и джойстик как джойстик. В принципе, уже что-то, зайти в систему можно, xinput list его видит, но:
- оси X и Y ограничены горизонтальным и вертикальным разрешением экрана соответственно;
- ось рыскания определяется как кнопка трёх состояний (левая кнопка, покой, правая кнопка), причём в состоянии, отличном от покоя, ручка как бы генерирует тем более нажатий в секунду, чем сильнее повёрнута от исходного положения (покоя);
- то же самое с осью РУД;
- не распозналось 7 из 14 кнопок. Хоть что-то.
Надо попробовать запилить свою /etc/X11/xorg.conf.d, авось секцию можно будет спихнуть туда.

В Ил-2 джойстик по-прежнему не определяется, но его действия в стиле «я мышка» имеют эффект и там.

Deleted
()
Ответ на: комментарий от Deleted

Таки нет, куда секцию не пихай, нигде кроме как в /usr/share она нужного эффекта не возымеет. После того, как дописал для потенциальных кнопок и осей MapButton и MapAxis, они все нашлись. Занятно, что после того, как я убрал из конфига лишние блоки описания кнопок, оси съехали с кнопок, и теперь находятся на вроде бы положенных им рукоятках. Разве что на хатке одна ось осталась и две кнопки и ручка рыскания теперь страдает тем, чем страдала РУД постом выше.

Джойстик получилось отвадить от осознания им мышкой самого себя. По крайней мере, на вид. то есть, курсор он не двигает, в xinput test работает, а xinput --list --long

Thrustmaster T.Flight Hotas X           	id=9	[floating slave]
	Reporting 3 classes:
		Class originated from: 9
		Buttons supported: 32
		Button labels: None None None None None None None None None None None None None None None None None None None None None None None None None None None None None None None None
		Button state:
		Class originated from: 9
		Detail for Valuator 0:
		  Label: Rel X
		  Range: 0.000000 - 1600.000000
		  Resolution: 1 units/m
		  Mode: absolute
		  Current value: 0.000000
		Class originated from: 9
		Detail for Valuator 1:
		  Label: Rel Y
		  Range: 0.000000 - 900.000000
		  Resolution: 1 units/m
		  Mode: absolute
		  Current value: 0.00000
Опять 1600х900 и абсолютные координаты. Даже пробовал в конфиге сначала прописывать на оси 2000 абс. потом сразу relative, но он всё равно уверен, что максимум должен упираться в экран. А отучить его быть мышкой получилось, прописав
Option "NoSendCoreEvents"
В ту самую секцию и
Option "SendCoreEvents"
в остальные.

Восьмая кнопка хорошо работает и отслеживается в xinput test, как и все остальные, но

Option "MapButton8" "key=31"
почему-то не генерирует нажатия клавиши «i» ни в окнах, ни в вайне. Может это из-за NoSendCoreEvents? Если так, то это прекрасно, значит весь день пошёл на смарку.

Wine ни в какую не хочет видит джойстик. И никакими WINEDEBUG=+dinput или WINEDEBUG=joystick нельзя добиться большего, чем

DirectX Joystick NOT created: DirectX joystick driver: device not attached
wine-1.3.35 если что.

Пробовал назначить осям генерацию нажатий клавиш в релятиве

Option "MapAxis2" "mode=relative keylow=113 keyhigh=114 axis=+0.5key"
По идее это должно на ось X повесить стрелки влево-вправо для управления элеронами, которые в ил-2 можно наблюдать сразу из кабины. Но чтобы это работало, то же не заметно.

Deleted
()

хз как насчет вайна, но у меня в oolite работает безовсяких конфигураций в иксах итд, обьявляется точто так же как inputX, цепляет она его судя по всему через SDL правда, но настраивать не потребовалось ровным счетом ничего, воткнул и полетел. ты уверен что иксам вообще нужно о нем чтото знать?

GHhost
()
Ответ на: комментарий от GHhost

Это конечно большой кусок добра, но где тамчто-нибудь похожее на

[   174.376] (II) XINPUT: Adding extended input device "Mah pleasure staff" (type: JOYSTICK)
?

Deleted
()
Ответ на: комментарий от Deleted

эм, это уже не ко мне а к разработчикам sdl, могу только утверждать что в иксах его нет но в игре он при этом нормально работает.

GHhost
()
Ответ на: комментарий от GHhost

Ну так oolite нативный под линукс, а вайн вряд ли так умеет, ему нужно подмазывать dinput. Хуже всего, что вроде может цеплять только те джойстики, которые подключаются через gameport, а у меня USB HID

Deleted
()
Ответ на: комментарий от Deleted

С SendCoreEvents кнопками джойстика с драйвером joystick удалось сотворить управление двигателем в Ил-2. Но зато с осями полный бардак.

Поэтому откатился обратно на evdev. Там все пять осей определяются сразу, с кошерными диапазонами (1024 по X, 1024 по Y, остальные 255) но совсем не определяются кнопки[code]$ xinput get-button-map 6
device has no buttons[/code] Надо найти либо какой-то способ заставить кнопки работать с evdev или придётся сращивать оси с ним, а кнопки — с joystick.

Deleted
()
Ответ на: комментарий от Deleted

Кстати, в SDLJoytest-GL все 12 кнопок тоже есть.

Deleted
()

Говорят, реализаций джойстика в Linux много разных. Например, у меня в SuperTuxKart геймпад работает, а в Braid - нет.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ms-dos32

У хъящика геймпад, а не джойстик вроде бы. Что за модуль-то? В гугле только про linux-2.4 и наладонники.

Алсо, собрал flightgear, потому что заметил в нём поддержку sdl. У него даже конфиг специальный для моего джойстика есть. Но и тут эта херня не работает.

Deleted
()
Ответ на: комментарий от ms-dos32

Да, я его как-то проглядел при конфигурации ведра. Плохо зделали тупо. На отшибе. Хрен увидишь.

Deleted
()
Ответ на: комментарий от ZenitharChampion

говорят, в москве кур доя́т

anonymous
()
Ответ на: комментарий от ms-dos32

Нет, лол, у меня наоборот, джойстик определяется, как мышка.

[    24.373] (II) XINPUT: Adding extended input device "Thrustmaster T.Flight Hotas X" (type: MOUSE, id 6)
…
[    24.393] (II) XINPUT: Adding extended input device "A4Tech USB Mouse" (type: MOUSE, id 9)

Deleted
()
Ответ на: комментарий от ms-dos32

Иксовый конфиг → иксовые проблемы → может быть, стоит попробовать драйвер xf86-input-joystick?
Но с ним всё может начать определяться, как джойстики. Решение я привёл выше — прописать InputClass для joystick там, где он не перекроет evdev

Deleted
()
Ответ на: комментарий от Deleted

Какой у тебя дистрибутив? Возможно, этот глюк с распознаванием устройствп пофиксили и evdev можно не использовать. У меня без глюков он работал только с USB-клавиатурой

ms-dos32
()
Ответ на: комментарий от ms-dos32

Gentoo.
Вообще-то, за evdev будущее, и уже создаются патчи на ведро, чтобы заменить убогий character device для джойстиков на событийный интерфейс.
А для клавиатур и мышей ничего кроме evdev сейчас и нет, потому что современные версии xorg игнорируют секцию InputDevice, если в качестве driver там указано kbd или mouse.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.