Создайте конфигурацию xkb из xmodmap

У меня есть пользовательский файл xmodmap который я использую, включая полезные многоязычные диакритические символы, английские котировки, тире и т. Д. Я хочу использовать эту карту с kmscon , поэтому мне нужно создать конфигурацию xkb . Есть ли автоматизированный метод для этого? Или даже простой ручной процесс, так как мне не нужно делать это часто?

Создайте свой собственный файл конфигурации xkb

Идея состоит в том, чтобы «прочитать» текущую конфигурацию клавиатуры (не вызывать xmodmap ) и написать свой собственный файл символов на основе этого. Первый:

xkbcomp -xkb $DISPLAY

Это создает server-0_0.xkb . В этом файле сделайте следующий блок:

 xkb_symbols "pc+inet(evdev)+compose(menu)+whatever(option)" { key <ESC> { [ Escape ] }; ... }; 

измените первую строку на:

 default xkb_symbols "my_symbols" { include "pc+inet(evdev)" include "compose(menu)+whatever(option)" 

(Я думаю, что вы можете разбить варианты на столько «включенных» строк, сколько захотите). Измените ключи, которые хотите изменить, и добавьте их с override :

 override key <AE10> { [ 0, parenright, degree ]}; 

Удалите все неизменные ключи.

Общесистемная установка

Поместите все это в /usr/share/X11/xkb/symbols/my_terrific_kb . Теперь пользователи могут загрузить его с помощью setxkbmap my_terrific_kb.xinitrc или .xsessionrc ). Вероятно, вы можете поместить Option "XkbLayout" "my_terrific_kb" в xorg.conf для общесистемного изменения.

Однопользовательская установка

Поместите все это в ~/anywhere/my_terrific_kb . Найдите XInput id вашей клавиатуры с xinput list . Затем запустите xkbcomp -i <XInput_id> ~/anywhere/my_terrific_kb $DISPLAY .

Я просто решил проблему. После того, как я применил конфигурацию xmodmap , я использовал xkbcomp :0 custom-xkb-keymap чтобы скопировать текущую xkb (с дисплея :0 ) в файл с именем custom-xkb-keymap .

Файл карты, созданный с помощью xkbcomp :0 custom-xkb-keymap состоит из многих компонентов, которые можно загрузить, просто заменив аргументы xkbcomp custom-xkb-keymap :0 . Он показывает несколько предупреждений здесь, но, похоже, работает, когда я изменяю макет в файле.

Макет xkb хранится в каталоге symbols , например /usr/local/share/X11/xkb/symbols . Путь может меняться в зависимости от системы. Когда вам нужен макет, вам нужно вырезать часть, похожую на:

 xkb_symbols "id+id+id(pc104)" { name[group1]="..." . . . }; 

и сохраните его в каталоге symbols . Пожалуйста, убедитесь, что вы не перезаписываете какой-либо файл там! Как только он хранится там (например, как mylayout ), вы можете загрузить его, набрав setxkbmap mylayout . И это соответствует настройке xorg.conf Option "XkbLayout" "mylayout" в разделе InputDevice (подробнее см. InputDevice страницу для kbd ).

Похоже, что другие части на выходе xkcomp соответствуют файлам в других каталогах, поэтому, если что-то не работает, вам, вероятно, придется разделить custom-xkb-keymap на свои компоненты и скопировать ее в соответствующие каталоги в /usr/local/share/X11/xkb . Но это то, чего я еще никогда не делал.

Улучшенные макеты

Вместо использования исходных дампов, которые выглядят как декомпилированный код, вы также можете создать свой собственный файл symbols , который более читабельен. У меня есть собственный собственный макет, который, вероятно, не будет использоваться большинству из вас, но вы все равно можете взглянуть на этот короткий файл, который я использую для программирования на немецких клавиатурах (просто чтобы понять, как это может выглядеть и как что вы можете сделать с файлом symbols ).

В этой теме есть аналогичная проблема: Xephyr: отображение клавиатуры не работает должным образом. Аналогично предоставленному решению вы можете сохранить свои настройки клавиатуры с помощью

 setxkbmap -display :0 -print > mykeymap 

Этот файл может быть применен xkbcomp в других системах:

 xkbcomp mykeymap :0 

Эта команда может выполняться в автозапуске gnome или других DE. Я не знаю, будут ли все ручные изменения приняты, но я думаю, что стоит попробовать. Куда поместить этот файл для автоматической загрузки без использования xkbcomp, я не знаю.