Сопоставить устройства XInput2 с узлами sysfs

Как включить устройство XInput2, например, как сообщили XIQueryDeviceв соответствующий sysfs узел? Устройство является общим устройством HID, которое обрабатывается evdev драйвер ввода.

Я знаю, что могу получить name устройства. Я мог бы посмотреть на Xorg.0.log и попробуйте найти соответствующее сообщение журнала, когда это устройство было добавлено, надеясь, что оно упоминает /dev/input/event* узел устройства, связанный с этим. Или я мог бы посмотреть на все входные события в sysfsнайдите одно с таким именем и надейтесь, что это имя уникально и совпадает с тем, о котором сообщается через XInput. Но я надеюсь, что есть более чистое решение, чем любой из них.

2 ответа

Решение

Вы можете получить идентификатор устройства, используя xinput команда. Из этого вы можете получить путь к узлу устройства, используя xinput list-props <device id>, Свойство 261 является узлом устройства.

Получив узел устройства, вы можете получить путь к узлу sysfs, используя udevadm info -p $(udevadm info -q path -n <device node path>),

Ленивый

 udevadm info  -q path -n $(xinput list-props `xinput | grep "search term" | awk -F "id=" '{print $2}' | awk  '{print $1}'` | grep "261" | awk -F '"' '{print $2}')

`

Для этого программно нужно позвонить XIGetProperty с deviceid от XIDeviceInfo (например XIDeviceInfo->deviceid), пример вызова синтаксиса здесь.

Чтобы получить путь sysfs из пути устройства, вы используете udev_device_new_from_devnum со статистикой (как показано здесь), чтобы сделать udev_device из пути устройства, а затем позвоните udev_device_get_syspath с этим udev_device в качестве аргумента.

Устройства ввода могут иметь дополнительные свойства; XIListProperties Перечислю их. По крайней мере, в моей системе одно из этих свойств - "Узел устройства", которое указывает на /dev/input/eventX устройство для устройства.

В основном, хотя, XIQueryDevice чтобы найти устройства, то XIGetProperty для свойства "Имя устройства" на каждом из них. (Тебе понадобятся кое-какие материалы для атома.)

xinput Утилита ( код здесь) может отображать эту информацию: xinput list-props $devid и должен служить полным примером того, что делать.

Другие вопросы по тегам