У меня есть определенная проблема - я хотел бы распознать исходное устройство входных событий в моей программе. Давайте примем, что у меня есть два идентичных сенсорных экрана, присоединенные к USB-портам. Моя программа захватывает XButtonPressedEvent
, XButtonReleaseEvent
и т.д., но я хотел бы вести себя по-другому между событиями, сгенерированными первым устройством и событиями, сгенерированными вторым устройством. Я хотел бы соответствовать любому из полей события к дескриптору устройств, устройства xinput идентификатор, системный идентификатор устройств или что-либо еще определяющее устройство.
Действительно ли возможно реализовать?
Раз так я ценил бы любые подсказки того, как сделать это.
С наилучшими пожеланиями, PG!
Кажется, что это не поддерживается со старым расширением 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 по умолчанию (если это доступно), и поэтому каждое событие нажатия кнопки будет содержать идентификатор исходного устройства.