LINUX.ORG.RU

Настройка XKB

 , ,


3

2

Привет. Пытаюсь поменять местами клавиши на клаве, решил сделать не топорно правя файлы в /usr/share/X11, а через конфик-опцию в sway

input <identifier> xkb_file <file_name>
           Sets all xkb configurations from a complete .xkb file. This file can be dumped from xkbcomp $DISPLAY keymap.xkb. This setting overrides xkb_lay‐
           out, xkb_model, xkb_options, xkb_rules, and xkb_variant settings.

сделал дамп через xkbcomp:

root /usr/share/X11/xkb/rules # xkbcomp $DISPLAY xkb_config.xkb

подключаю:

input keyboard xkb_rules "xkb_config.xkb"

Результат - жалуется на ошибки в файле, пытался скомпилировать .xkb в .xkm, итог аналогичный. Может кто уже мучился? Если чего-то накостылится, то хотелось бы кинуть xkb_config.xkb в ~/.config/sway, но никак не выходит, не находится там конфиг, по-всякому задавал пути - отностельный и абсолютные. Интересно, почему решили взять иксовый xkb? Как-то причесать бы его под wayland.

Разобрался, описываю свои шаги:

  1. Делаем базовый ~/.config/sway/config конфиг (желаемые раскладки, переключалка):
input * xkb_layout "us,ru"
input * xkb_options "grp:win_space_toggle"
  1. Перезагружаем sway. Делаем xkb дамп (именно здесь, иначе xkb не найдёт):
$ mkdir -p ~/.xkb/symbols
$ xkbcomp $DISPLAY ~/.xkb/symbols/my_layout.xkb
$ mv ~/.xkb/symbols/my_layout.xkb ~/.xkb/symbols/my_layout
  1. В my_layout оставляем лишь секцию xkb_symbols «(unnamed)» {…}, остальное удаляем. Попутно переназначем клавиши желаемым образом. Синтаксис там простой, нечего сложного.
  2. Финально правим ~/.config/sway/config, перезагружаем sway:
# xkb_layout и xkb_options не нужны, всё есть в my_layout.
#input * xkb_layout "us,ru"
#input * xkb_options "grp:win_space_toggle"
input * xkb_layout my_layout

В итоге у нас легко конфигурируемый файл в хоум, my_layout собрался из всех необходимых инклудов.

pavlick ★★ ()
Последнее исправление: pavlick (всего исправлений: 1)

Буду продолжать писать здесь, для себя и для тех найдёт поиском.
Удалось загрузить полный .xkb файл (возможно из-за сохранения в ~/.xkb, но не уверен, может какая магия, а может руки):

$ mkdir -p ~/.xkb
$ xkbcomp $DISPLAY ~/.xkb/config.xkb

# ~/.config/sway/config
input * xkb_file ~/.xkb/config.xkb

В дампнутом файле не удаляем секции, загружаем целиком. Считаю такой способ более предпочтительным, чем загрузка xkb_layout - это позволяет создавать новые слои (назначать символы на клавиши с желаемыми модификаторами). Например, я привык переключать раскладку через Win+d, а стандартные xkb опции даёт ограниченный набор переключалок (байндинг хуже, чем переключение напрямую через xkb, раньше мучился с modemap байндингом). Для этого в дампнутом конфиге создаю новый тип с тремя слоями:

    type "ALPHABETIC_SUPER" {
          modifiers= Shift+Lock+Mod4;
          map[Shift]= Level2;
          map[Lock]= Level2;
          map[Mod4]= Level3;
          level_name[Level1]= "Base";
          level_name[Level2]= "Caps";
          level_name[Level3]= "Super";
      };

и задаю «D» следующим образом:

key <AC03> {
         type= "ALPHABETIC_SUPER",
         symbols[Group1]= [               d,               D,    ISO_Next_Group ],
         symbols[Group2]= [     Cyrillic_ve,     Cyrillic_VE,    ISO_Next_Group ]

т.е. значение в первом,втором,третьем слоях.

pavlick ★★ ()