Pull to refresh

Нативный русский язык из Xorg в rdesktop — мелочь, а приятно

Reading time 2 min
Views 4.1K
У всех людей свой опыт использования Linux десктопа, но лично для меня очень важным является тандем linux desktop + rdesktop в виртуальные машины. Причины тому — определенный софт, который зачастую работает только под Windows, или работает под Windows лучше, а также необходимость тестировать всякие виндовые штуки.

Такая конфигурация рабочего стола ставит назойливую проблему — в Windows свои языки и их переключение, в Linux — свои, соответственно постоянно попадаешь в необходимость 3-4 раза переключиться, пока не получится. Тем более, если в Xorg язык выбирается не пооконно, а глобально.

Я решил исследовать эту проблему и решить ее как-то нативно для всех режимов, чтобы русские буквы набирались в окне rdesktop ровно также, как они набираются в окнах Xorg. Постараюсь кратко описать суть и технологию такого решения.

Суть проблемы заключается в том, что технология RDP предполагает передачу сканкодов, а не каких-то конкретных символов. Соответственно в rdesktop есть штатные keymap'ы, которые автоматически выбираются исходя из текущей локали.

Таким образом необходимо:

  1. Создать специальную раскладку для Windows, в которой одновременно будут присутствовать как английские, так и русские символы, выбираемые каким-то модификатором.
  2. Сделать 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) каталог.

Несколько нюансов:

  1. В keymap добавлено значение ISO_Next_Group 0x0, чтобы нажатие кнопок переключения языка не передавалось на ту сторону и упомянутый выше знак №.
  2. Для справки — у меня переключение осуществляется через Caps Lock, индикатором и пооконным контроллером переключения занимается gxkb.
  3. Если вы исправляете раскладку и собираете ее через MKLC — всегда называйте ее по разному и перезагружайте машину, он постоянно цепляет старые версии библиотеки раскладки. Перед перезагрузкой ее лучше всего деинсталлировать.
  4. В Windows реальное положение раскладок не всегда соответствует настройкам клавиатуры, иногда там появляются лишние. Верное состояние показывает только панель переключения языка.
  5. MKLC зачастую не в состоянии исправить название раскладки, для этого ее надо загрузить из установленных в системе и пересохранить исходный файл.

Ссылки:
  1. Инсталлятор готовой раскладки.
  2. Keymap rdesktop.
  3. Исходник раскладки для MKLC v1.4.
Tags:
Hubs:
+11
Comments 5
Comments Comments 5

Articles