X11 Распознают исходное устройство события

У меня есть определенная проблема - я хотел бы распознать исходное устройство входных событий в моей программе. Давайте примем, что у меня есть два идентичных сенсорных экрана, присоединенные к USB-портам. Моя программа захватывает XButtonPressedEvent, XButtonReleaseEvent и т.д., но я хотел бы вести себя по-другому между событиями, сгенерированными первым устройством и событиями, сгенерированными вторым устройством. Я хотел бы соответствовать любому из полей события к дескриптору устройств, устройства xinput идентификатор, системный идентификатор устройств или что-либо еще определяющее устройство.

Действительно ли возможно реализовать?

Раз так я ценил бы любые подсказки того, как сделать это.

С наилучшими пожеланиями, PG!

1
задан 3 April 2019 в 16:57

1 ответ

Кажется, что это не поддерживается со старым расширением XInput. Необходимо будет использовать XInput2, который сообщает об идентификаторе устройства для каждого нажатия кнопки. Исходный автор разместил ряд в своем блоге, объяснив некоторые важные аспекты (part1, part2, part3), и несколько полных примеров кода доступны здесь. Начиная с xinput утилита командной строки поддерживает оба расширения, можно посмотреть на ее исходный код, особенно test_xi2.c, чтобы понять, как использовать XInput2.

xinput_calibrator использует старую версию XInput (см. здесь). В то время как Вы могли попытаться использовать XInput2 параллельно, YMMV, потому что существуют определенные ограничения относительно совместимости этих двух версий, как описано здесь.

Однако с тех пор xinput_calibrator как известно, делает плохое вычисление матрицы преобразования, кто-то записал маленький python3 сценарий (xcal) для калибровки сенсорных экранов. Это намного более просто, чем xinput_calibrator и таким образом может быть легче адаптироваться к Вашим потребностям. Additonally, python3-xlib библиотека (доступный в репозиториях человечности) действительно использует XInput2 по умолчанию (если это доступно), и поэтому каждое событие нажатия кнопки будет содержать идентификатор исходного устройства.

0
ответ дан 7 December 2019 в 20:51

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

Похожие вопросы: