vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
В мониторе 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

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

Date: 2019-10-04 10:03 am (UTC)
kondratenko: (fortuna)
From: [personal profile] kondratenko
Можно установить для каждой раскладки комбинацию для переключения на нее откуда угодно, и тогда (с точностью до капслока) все получится.

Date: 2019-10-04 11:08 am (UTC)
avnik: (Default)
From: [personal profile] avnik
Один из вариантов.
Второй -- сделать stateless клавиатуру (я делал для RDP ~150 клавишную, с кириллицей на неиспользуемых сканкодах). Правда патчить "понемногу" пришлось почти все.

Date: 2019-10-04 01:29 pm (UTC)
avnik: (Default)
From: [personal profile] avnik
У меня по условиям задачи был линукс на сервере, и браузер на клиенте -- где я не мог вообще никак состояние клавиатуры отслеживать

Date: 2019-10-04 01:27 pm (UTC)
avnik: (Default)
From: [personal profile] avnik
Там все плохо. RDP оперирует сканкодами клавиатуры, +там специальный хак который позволяет вставить unicode symbol. Так вот этот символ xrdp транслирует.... правильно, в сканкод.
Вот я ему нагенерил таблицу сканкодов несуществующих клавиш с кодами 210-243, и сделал для них xkb раскладку. Но с этим не все приложения живут (нормальные -- живут, а вот вайн мне патчить пришлось, потому что он считает символы для которых нет сканкода несуществующими. Ужасные подробности есть в багтрекере вайна, потому что если XLookupString возвращает для инпута валидный юникод, то символ должен вводиться не смотря на все внутренние хаки для игрушек).

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

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

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

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
1819202122 2324
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 24th, 2025 10:08 am
Powered by Dreamwidth Studios