vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2019-10-04 12:42 pm

QEMU sendkey

В мониторе QEMU есть команда sendkey. Правда, она почти не документирована.
Только в каком-то левом Wiki удалось нарыть таблицу названий клавиш, причем не полную и по состоянию на qemu 0.12.

Пришлось RTFS заняться. Но теперь у меня в документации на vws есть таблица, в которой по крайней мере все нормальные клавиши с алфавитно-цифровой клавиатуры описаны (включая grave_accent, bracket_left и bracket_right).

Правда, вот возможность сделать
vws sendkey machine "Hello, kitty!" 


я туда не приделал. Просто потому что из qemu монитора нет никакой возможости узнать в какой раскладке сегодня клавиатура виртуальной машины. (и даже состояния caps lock и num lock).
Поэтому если я туда пошлю что-то вроде

vws sendkey WinSrv2008 ctrl-shift shift-r b c f comma spc r e minus r e shift-1

может быть получится "Киса, ку-ку!", а может и нет.
avnik: (Default)

[personal profile] avnik 2019-10-04 01:48 pm (UTC)(link)
ты про xrdp или про freerdp? К первому у меня есть кривопатч, который надо рефакторить в нормальный патч и опцию в модуле иксов типа "Option XKBReloadOnReconnect yes/always/never . Но у меня мотивации нет.
avnik: (Default)

[personal profile] avnik 2019-10-07 12:24 pm (UTC)(link)
Ну по идее там есть скрипт-коллбек, который вызывается при реконнекте (сервером), и есть место где шлется сигнал на то, что у нас клавиатура сменилась (unconditionally в ту, которая в их внутренней таблице соотвествует языку который ты показал при коннекте в rdp). На то что в некоторых языках латиницы нет, и нужны две раскладки -- забили болт как обычно (вводите команды и пароли на кириллице, не обляпайтесь).

Я могу показать место в исходниках иксового модуля где это происходит -- https://github.com/neutrinolabs/xorgxrdp/blob/devel/xrdpkeyb/rdpKeyboard.c#L860 вот собственно