Чтобы продолжить то, что вы в настоящее время разработали, вы можете использовать evemu пакет инструментов (s )для использования утилит evtest
и evemu-event
. Перечислите устройства ввода событий с помощью sudo evtest
и найдите строку, соответствующую вашей клавиатуре. У меня есть специальная клавиатура, поэтому я получил:
/dev/input/event2: HID 05f3:0007
Теперь выберите этот номер (2 в моем случае )и нажмите клавишу, которую вы хотите распознать (Alt для вас ). Я использовал сдвиг влево и получил
Event: time 15094562, -------------- SYN_REPORT ------------
Event: time 15094562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 15094562, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
Здесь мы видим, что я получил событие типа EV _KEY с кодом KEY _LEFTSHIFT, получающее значение 1 при нажатии клавиши Shift и аналогичное событие со значением 0 при ее отпускании.
Теперь вы можете просто запросить состояние этого ключа в любое время, например, после chvt. Используйте, в моем случае,
sudo evtest --query /dev/input/event2 EV_KEY KEY_LEFTSHIFT
Код возврата этой команды — 0, если значение равно 0, и 10, если значение равно 1. Вы можете использовать echo $?
, чтобы отобразить это значение.
Зная состояние ключа,теперь вы можете эмулировать событие нажатия клавиши, чтобы сервер X11 видел «текущее» состояние. В моем случае я бы сделал
sudo evemu-event /dev/input/event2 --type EV_KEY --code KEY_LEFTSHIFT --value 1
Как вы понимаете, возможно, существует более простое решение исходной проблемы. Вместо того, чтобы использовать xbindkeys
и решить эту проблему здесь, вы можете найти другое решение, используя libevent. Примеры на C есть в Linux USB Input Subsystem и , часть 2 в Linux Journal. В вашей системе может быть библиотека Python evdev , чтобы упростить эту задачу.
Эти зависимости являются «виртуальными» зависимостями, предоставляемыми библиотекой rpm
. Похоже, что пакет, который вы пытаетесь установить, был упакован для другой версии rpm
.