(комментарий: вы нашли XKB! Поздравляем, это адская кроличья нора! - обратите внимание, ваше решение будет взорвано в следующий раз, когда пакет ukntu-data для ubuntu обновит этот файл, и повлияет на все остальные подключаемые вами клавиатуры. которые используют ту же конфигурацию.)
XKB следует модели RMLVO - Правила, Модель, Макет, Вариант, Опции. Ваше решение изменяет файл модели системы, но лучшим решением будет поиск или создание опции для добавления ваших переопределений. ( evdev
это правило по умолчанию для большинства дистрибутивов, и большинство внешних клавиатур будут использовать pc
модель, хотя у внутренних моделей ноутбуков могут быть определенные варианты, уже близкие к вашему сценарию использования. Стандартная клавиатура QWERTY для США будет использовать us
раскладку без вариантов, хотя вы можете выберите intl
или altgr-intl
варианты, если вы работаете с другими языками.)
Параметры - это конкретные переопределения основных функций. Если вы хотите отключить CapsLock, потому что этот ключ просто отстой, у него уже есть опция для этого ( caps:none
), или вы можете вместо него установить дополнительную клавишу Escape ( caps:escape
). Вы можете увидеть конкретные переопределения в /usr/share/X11/xkb/symbols/caps
; каждая строфа - это отдельная опция, которую вы можете включить во время выполнения.
Если вы это сделаете, setxkbmap -print
вы должны получить список ваших текущих настроек XKB:
$ setxkbmap -print xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete"}; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
Создайте свой файл переопределения:
$ mkdir -p .config/xkb/symbols $ touch .config/xkb/symbols/pgupdown
Теперь отредактируйте новый файл в вашем любимом редакторе и добавьте следующее:
// mapping PgUp and PgDown to other keys partial alphanumeric_keys xkb_symbols "rwinmenu" { key <RWIN> { [ Prior ] }; key <MENU> { [ Next ] }; }; // same but switched partial alphanumeric_keys xkb_symbols "menurwin" { key <MENU> { [ Prior ] }; key <RWIN> { [ Next ] }; };
Теперь создайте базовую раскладку:
$ setxkbmap -print > ~/.config/xkb/mymap
Отредактируйте этот файл и добавьте новую опцию в список символов в формате +optionfile(function)
:
xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete"}; xkb_symbols { include "pc+us+inet(evdev)+pgupdown(rwinmenu)" }; xkb_geometry { include "pc(pc105)" }; };
Если позже вы решите, что вы предпочитаете PgUp на клавишу меню, а не просто заменить rwinmenu
с menurwin
там, и вы хорошо идти.
Теперь вы можете загрузить этот файл с помощью xkbcomp
:
$ xkbcomp -I$HOME/.config/xkb $HOME/.config/xkb/mymap $DISPLAY
Запустите xev
(из x11-utils
пакета) и нажмите клавиши, чтобы убедиться, что изменения загружены:
# sed to scrape out non-kbd events; xev is pretty spammy $ xev | sed -ne '/^KeyPress/,/^$/p'
Если вы получили все в нужных местах, ваша клавиша меню должна отправлять события Next, а клавиша Win_R отправляет Prior. Если это сработает, вы можете добавить вышеуказанную xkbcomp
команду к себе .xinitrc
или .xprofile
около того, она запускается при входе в систему или запуске X.
... если вы не используете Gnome. (и / или, возможно, KDE.) Затем мы идем дальше по кроличьей норе и выясняем, как включить эту новую опцию в системные файлы, чтобы DE могли использовать ее как стандартную опцию. По сути, это будет включать
- размещение вашего файла опций
/usr/share/X11/xkb/symbols/
(вот почемуpgupdown
был хороший выбор опций, так как нет ранее существующего файла символов с таким именем) - и затем добавление строк в
/usr/share/X11/xkb/rules/evdev*
(чтобы отобразитьoptionsfile:function
формат командной строки на+optionsfile(function)
используемыйxkbcomp
) - и, наконец, установка DE для использования вашего предпочтительного макета и параметров.
Шаг 2: Если вам нужно пойти по этому пути, вам может потребоваться выполнить шаг 2 снова после любых обновлений, связанных с xkb.
# in /usr/share/X11/xkb/rules/evdev # find the line that starts "! option = symbols" and add new lines: pgupdown:rwinmenu = +pgupdown(rwinmenu) pgupdown:menurwin = +pgupdown(menurwin) # in /usr/share/X11/xkb/rules/evdev.lst # find the line that starts "! option" and add a new line: pgupdown:rwinmenu PgUp on RWin, PgDown on Menu pgupdown:menurwin PgUp on Menu, PgDown on RWin # in /usr/share/X11/xkb/rules/evdev.xml # .... ummm .... ¯\_(ツ)_/¯ .... sorry! ....
Шаг 3: проверьте, localectl
доступен ли в вашей системе. localectl
Можно настроить виртуальную консольную клавиатуру, а также настроить системную клавиатуру X11. Поскольку оба параметра настроены в файлах правил, вы можете использовать одну rwinmenu
или menurwin
из этих команд.
$ localectl set-x11-keymap us pc "" pgupdown:rwinmenu # format [layout] [model] [variant] [option1,...,optionN]
Для Gnome вам нужно использовать dconf-editor
или gsettings
:
# set layout/variant $ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us')]" # set options $ gsettings set org.gnome.desktop.input-sources xkb-options "['pgupdown:rwinmenu']"
Другим вариантом для Gnome может быть отключение настроек клавиатуры; это должно позволить либо опции localectl, либо опции user-config оставаться в силе:
$ gsettings set org.gnome.settings-daemon.plugins.keyboard active false
Устранение неполадок: если кажется, что ваши изменения не принимаются, и вы уверены, что правильно отформатировали файл, удалите все *.xkm
файлы из /var/lib/xkb/
. Это кэшированные предварительно скомпилированные таблицы ключей, которые могут мешать вам.
Ресурсы:
- http://madduck.net/docs/extending-xkb/
- http://apps.jcns.fz-juelich.de/doku/sc/xkbmap
- https://wiki.archlinux.org/index.php/Keyboard_configuration_in_Xorg
- https://unix.stackexchange.com/questions/66624/where-is-xkb-getting-its-configuration
- https://askubuntu.com/questions/451945/permanently-set-keyboard-layout-options-with-setxkbmap-in-gnome-unity