У всех людей свой опыт использования 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.

Комментарии (4)


  1. r0mik
    01.09.2018 09:03

    есть же FreeRdp, который в отличии от давным-давно умершего rdesktop живет и здравствует (последний коммит в гит неск дней тому).
    это я к тому, что вы похоже изобрели велосипед. потому что описываемая вами проблема у меня ушла именно с переходом на freerdp лет 5 тому…


    1. kab01m Автор
      01.09.2018 18:50

      Ну во-первых во freerdp своих проблем хватает, а если даже и так — поделитесь каким именно образом решены эти проблемы именно в нем.


  1. PocketSam
    02.09.2018 20:01

    Я пользуюсь Remmina в режиме передачи всех клавиш удалённому хосту. раскладка переключается нормально. После выхода обновлённой версии меня полностью устраивает. remmina.org


    1. PocketSam
      02.09.2018 20:04

      Только что из любопытства зашёл в их раздел статистики. Оказалось большинство пользователей, кто включили опцию отсылки статистики разработчикам, из России. Пишут, что будут улучшать языковую поддержку www.remmina.org/stats/stats.html
      Возможно, стоит сообщить разработчикам свои хотелки по этому радостному поводу. :)