LINUX.ORG.RU
ФорумGames

Xboxdrv - эмуляция геймпада xbox360 - выпилить устройство самого геймпада

 ,


1

1

Есть один старый геймпад, который не поддерживает xinput - logitech cordless rumplepad 2. Вроде настроил xboxdrv на эмуляцию геймпада от xbox 360, запускаю так:

$ cat logitech_cordless_rumblepad2.xboxdrv
[xboxdrv]

[evdev-keymap]
# left hand - logitech cordless rumblepad 2 buttons and axises
# right hand - xbox360 buttons and axises

# button 1
BTN_A=X

# button 2
BTN_B=A

# button 3
BTN_C=B

# button 4
BTN_X=Y

# button 5
BTN_Y=LB

# button 6
BTN_Z=RB

# button 7
BTN_TL=LT

# button 8
BTN_TR=RT

# button 9
BTN_TL2=Back

# button 10
BTN_TR2=Start

# left analog stick press
BTN_SELECT=TR

# right analog stick press
BTN_START=TL

[evdev-absmap]
# left hand - logitech cordless rumblepad 2 buttons and axises
# right hand - xbox360 buttons and axises

# dpad up/down axis
ABS_HAT0Y=DPAD_Y

# dpad left/right axis
ABS_HAT0X=DPAD_X

# left stick up/down (up = 0, down = 255)
ABS_Y=Y1

# left stick left/right (left = 0, right = 255)
ABS_X=X1

# right stick up/down (up = 0, down = 255)
ABS_RZ=Y2

# right stick left/right (left = 0, right = 255)
ABS_Z=X2

[axismap]
# change negative values to positive and vice-versa (analog stick coordinates are inverted by default)
-Y1=Y1
-Y2=Y2

sudo xboxdrv --evdev /dev/input/event5 -c logitech_cordless_rumblepad2.xboxdrv --silent
И вроде работает, новое устройство /dev/input/js2 появляется, в КДЕ настройках -> Input Devices -> Joystick теперь есть два геймпада: собственно сам logitech cordless rumblepad 2 (/dev/input/js1) и Microsoft X-Box 360 pad (/dev/input/js2). В оригинальном геймпаде теперь нажатия клавиш никаких событий не производят, а в сэмулированном производят, вроде все как надо. Но, судя по всему, многие игры путаются от того, что видят 2 геймпада, пытаются работать не с тем, с которым надо, и в итоге ничего не работает. Например risk of rain:
Game..Math..Graphic..Action..File..Resource..Interaction..3D..Particle..Misc..DS..Sound..Physics..Gamepad..GAMEPAD: Initialising Ubuntu support
GAMEPAD: 4 axis values (last) at 0x8a564f0
GAMEPAD: 4 axis values (last) at 0x8a56820
GAMEPAD: Enumerating 3
GAMEPAD: device name Logitech Logitech Cordless RumblePad 2
GAMEPAD: buttons - 12, axes - 6
GAMEPAD: 4 axis values (last) at 0x8a56dd0
GAMEPAD: Enumerating 4
GAMEPAD: device name Microsoft X-Box 360 pad
GAMEPAD: buttons - 11, axes - 8
GAMEPAD: 4 axis values (last) at 0x8a69688
Buffers..Networking..Shaders..Steam_Init

Как это поправить?

Выпиливай ядерный модуль (rmmod, blacklist, вот это вот всё). Если хочешь делать это «на лету», то при запуске укажи "--detach".

А зачем ты каждый раз стартуешь руками xboxdrv? Запускай в режиме демона =)

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

А зачем ты каждый раз стартуешь руками xboxdrv?

Я его не стартую каждый раз. Я его только настроил, а оно все не работает как надо. Ядерного модуля (xpad) в lsmod вроде и нет.

hlebushek ★★
() автор топика
Ответ на: комментарий от alarm

Если хочешь делать это «на лету», то при запуске укажи "--detach".

Видимо имелось в виду -d, --detach-kernel-driver ?

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Видимо имелось в виду -d, --detach-kernel-driver ?

Да, сам я давно заблокировал ядерный модуль и стартую xboxdrv как сервис system.d, поэтому точно не помню.

Ядерного модуля (xpad) в lsmod вроде и нет.

Тогда откуда у тебя второй джостик определяется в системе? xbox геймпад у тебя проводной или нет?

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

--detach-kernel-driver не помогает - /dev/input/js1, соответствующий самому геймпаду остается, кдешная утилитка для проверки геймпадов тоже его по-прежнему видит.

xbox геймпад у тебя проводной или нет?

Беспроводной http://support.logitech.com/en_gb/product/287 Не знаю, как узнать, благодаря какому модулю ядра или еще чему он работает.

Bus 002 Device 003: ID 046d:c219 Logitech, Inc. Cordless RumblePad 2
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x046d Logitech, Inc.
  idProduct          0xc219 Cordless RumblePad 2
  bcdDevice            2.00
  iManufacturer           3 
  iProduct                1 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           41
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 No Subclass
      bInterfaceProtocol      0 None
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode           33 US
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     119
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10

hlebushek ★★
() автор топика
Ответ на: комментарий от wakuwaku

Как в этом треде? геймпад для стима (комментарий) Что собственно эти правила должны удалять? Устройство /dev/input/jsНОМЕР? /dev/input/eventНОМЕР? Но как тогда сам xboxdrv будет работать, откуда он будет читать события? Или я ничего не понял?

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Rumblepad удалить, устройство, создаваемое xboxdrv — оставить. Удалять по идентификатору, ибо сей номер может быть любым.

wakuwaku ★★★★
()
Ответ на: комментарий от hlebushek

xbox геймпад у тебя проводной или нет?

Беспроводной http://support.logitech.com/en_gb/product/287 Не знаю, как узнать, благодаря какому модулю ядра или еще чему он работает.

Ну не xbox же это))) У логитека свой ресивет и ловится он, видимо, как и остальные мышки, клавиатуры удевом.

Был бы Xbox с отдельным ресивером, то он даже в системе без драйвера не определится. Вернее с ядерным у тебя появляется 4 устройства js*. Гасишь модуль и всё, тишина в /dev/input/. А вот xboxdrv уже добавляет по одному устройству в зависимости от конфига.

У меня вот 2 xbox360 геймпада + ресивер + xboxdrv.

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

Я и не говорил, что у меня xbox. Но я им хочу эмулировать xbox360, чтобы он просто везде работал.

hlebushek ★★
() автор топика
Ответ на: комментарий от wakuwaku

Удалить - то есть просто удалить файлы /dev/input/by-i/usb-Logitech_Logitech_Cordless_RumblePad_2-* ? Но /dev/input/event5 (соответствует геймпаду) и /dev/input/js1 (тоже ему соответствует) остаются же.

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Насколько я помню, RUN:="/bin/sh -c '/bin/rm -f $env{DEVNAME}; for i in $env{DEVLINKS}; do /bin/rm -f $i; done'" удаляет все устройства. Наверное, $DEVNAME это /dev/input/js$NUM и $DEVLINKS всё остальное.

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

Но как мне это поможет с геймпадом? Если xboxdrv читает /dev/input/event5, то не получится его удалить. А если удалить заранее, то с чем xboxdrv будет работать?

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Разве xboxdrv зависит от evdev? Если не работает напрямую, можно поменять порядок устройств, наверное.

wakuwaku ★★★★
()

если он есть в списке xboxdrv -L, то убери --evdev мутотень и добавь -d
(-d не работает с --evdev)

iSage ★★★★
()

А просто удалять устройство джойстика не помогает?

kinik ★★☆
()
Ответ на: комментарий от hlebushek

Ну тогда просто удали /dev/js0 и переименуй /dev/js1 в /dev/js0
В мане xboxdrv написано ж

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