Сопоставить устройства 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
и должен служить полным примером того, что делать.