Как отправить событие нажатия клавиши в X для клавиши, которой нет на клавиатуре? - PullRequest
0 голосов
/ 15 февраля 2012

Я бы хотел отправить синтетическое событие нажатия клавиши в X. Кажется, что все это работает нормально для большинства клавиш, использующих XSendEvent для отправки события KeyPress. К сожалению, я не могу заставить его работать на клавиатуре, которой на самом деле нет на моей клавиатуре - в этом случае знак стерлинга £ (у меня есть клавиатура США).

Проблема, похоже, в том, что для структуры XKeyEvent требуется keycode, а у меня есть только KeySym для этого знака. XKeysymToKeycode возвращает 0, потому что для него нет ключа.

Кто-нибудь знает, как мне этого добиться? Может быть, мне нужен какой-то другой подход - любой совет приветствуется!

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Посмотрите на xdotool .

1 голос
/ 21 февраля 2012

@ Питер, ты смотришь по правильному пути. Часть проблемы заключается в том, что набор KeySyms намного больше, чем размер keycode. Вы можете решить эту проблему, изменив раскладку клавиш непосредственно перед синтезом события.

Взгляните на libfakekey: http://git.yoctoproject.org/cgit/cgit.cgi/libfakekey/tree/src/libfakekey.c

И, в частности: fakekey_press_keysym функция, которая принимает KeySym для отправки, а не просто код.

...