У всех людей свой опыт использования Linux десктопа, но лично для меня очень важным является тандем linux desktop + rdesktop в виртуальные машины. Причины тому — определенный софт, который зачастую работает только под Windows, или работает под Windows лучше, а также необходимость тестировать всякие виндовые штуки.
Такая конфигурация рабочего стола ставит назойливую проблему — в Windows свои языки и их переключение, в Linux — свои, соответственно постоянно попадаешь в необходимость 3-4 раза переключиться, пока не получится. Тем более, если в Xorg язык выбирается не пооконно, а глобально.
Я решил исследовать эту проблему и решить ее как-то нативно для всех режимов, чтобы русские буквы набирались в окне rdesktop ровно также, как они набираются в окнах Xorg. Постараюсь кратко описать суть и технологию такого решения.
Суть проблемы заключается в том, что технология RDP предполагает передачу сканкодов, а не каких-то конкретных символов. Соответственно в rdesktop есть штатные keymap'ы, которые автоматически выбираются исходя из текущей локали.
Таким образом необходимо:
Такие раскладки существуют (например Cyrilock), но ни одной нормально работающей я не нашел, поэтому используя Microsoft Keyboard Layout Creator v1.4 я сделал свою. MKLC собирает dll раскладки и делает ей инсталлятор. На кнопках в ней определены английские символы, русские символы определены как AltGr+кнопка (из цифр определить нужно только 3 — №, остальные передаются корректно).
Для работы нужно два файла:
1. Скачать установщик раскладки, установить ее на Windows и оставить единственной. Если вы будете подключаться не через rdesktop, а через консоль — английский язык работать будет, русские буквы можно набирать через Ctrl-Alt.
В линуксе необходимо положить keymap в глобальный (/usr/share/rdesktop/keymaps) или пользовательский (~/.rdesktop/keymaps) каталог.
Несколько нюансов:
Ссылки:
Такая конфигурация рабочего стола ставит назойливую проблему — в Windows свои языки и их переключение, в Linux — свои, соответственно постоянно попадаешь в необходимость 3-4 раза переключиться, пока не получится. Тем более, если в Xorg язык выбирается не пооконно, а глобально.
Я решил исследовать эту проблему и решить ее как-то нативно для всех режимов, чтобы русские буквы набирались в окне rdesktop ровно также, как они набираются в окнах Xorg. Постараюсь кратко описать суть и технологию такого решения.
Суть проблемы заключается в том, что технология RDP предполагает передачу сканкодов, а не каких-то конкретных символов. Соответственно в rdesktop есть штатные keymap'ы, которые автоматически выбираются исходя из текущей локали.
Таким образом необходимо:
- Создать специальную раскладку для Windows, в которой одновременно будут присутствовать как английские, так и русские символы, выбираемые каким-то модификатором.
- Сделать keymap, который будет передавать русские буквы как сканкод с модификатором. Штатный keymap «ru» сделан так, что он отправляет русские символы как AltGr+сканкод. В нем не хватает только символа "№".
Такие раскладки существуют (например Cyrilock), но ни одной нормально работающей я не нашел, поэтому используя Microsoft Keyboard Layout Creator v1.4 я сделал свою. MKLC собирает dll раскладки и делает ей инсталлятор. На кнопках в ней определены английские символы, русские символы определены как AltGr+кнопка (из цифр определить нужно только 3 — №, остальные передаются корректно).
Для работы нужно два файла:
1. Скачать установщик раскладки, установить ее на Windows и оставить единственной. Если вы будете подключаться не через rdesktop, а через консоль — английский язык работать будет, русские буквы можно набирать через Ctrl-Alt.
В линуксе необходимо положить keymap в глобальный (/usr/share/rdesktop/keymaps) или пользовательский (~/.rdesktop/keymaps) каталог.
Несколько нюансов:
- В keymap добавлено значение ISO_Next_Group 0x0, чтобы нажатие кнопок переключения языка не передавалось на ту сторону и упомянутый выше знак №.
- Для справки — у меня переключение осуществляется через Caps Lock, индикатором и пооконным контроллером переключения занимается gxkb.
- Если вы исправляете раскладку и собираете ее через MKLC — всегда называйте ее по разному и перезагружайте машину, он постоянно цепляет старые версии библиотеки раскладки. Перед перезагрузкой ее лучше всего деинсталлировать.
- В Windows реальное положение раскладок не всегда соответствует настройкам клавиатуры, иногда там появляются лишние. Верное состояние показывает только панель переключения языка.
- MKLC зачастую не в состоянии исправить название раскладки, для этого ее надо загрузить из установленных в системе и пересохранить исходный файл.
Ссылки:
Комментарии (4)
PocketSam
02.09.2018 20:01Я пользуюсь Remmina в режиме передачи всех клавиш удалённому хосту. раскладка переключается нормально. После выхода обновлённой версии меня полностью устраивает. remmina.org
PocketSam
02.09.2018 20:04Только что из любопытства зашёл в их раздел статистики. Оказалось большинство пользователей, кто включили опцию отсылки статистики разработчикам, из России. Пишут, что будут улучшать языковую поддержку www.remmina.org/stats/stats.html
Возможно, стоит сообщить разработчикам свои хотелки по этому радостному поводу. :)
r0mik
есть же FreeRdp, который в отличии от давным-давно умершего rdesktop живет и здравствует (последний коммит в гит неск дней тому).
это я к тому, что вы похоже изобрели велосипед. потому что описываемая вами проблема у меня ушла именно с переходом на freerdp лет 5 тому…
kab01m Автор
Ну во-первых во freerdp своих проблем хватает, а если даже и так — поделитесь каким именно образом решены эти проблемы именно в нем.