Два года спустя я наконец-то с гордостью отвечаю на свой вопрос.
Я обнаружил, что самый простой, надежный и расширяемый метод - это полагаться исключительно на него xmodmap
.
1. Получить коды специальных клавиш
Запустите, xev
чтобы определить код клавиши, которую вы хотите использовать в качестве переключателей режимов. Затем нажмите интересующие вас клавиши и запишитеkeycode
$ xev KeyRelease event, serial 40, synthetic NO, window 0x2600001, root 0x2a6, subw 0x0, time 1221887800, (885,743), root:(3447,805), state 0x2010, keycode 66 (keysym 0xff7e, Mode_switch), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
Код ключа находится в третьей строке, код ключа 66.
Для меня это были ключи, которые меня особенно интересовали, и соответствующие им коды клавиш:
Caps Lock
, код клавиши 66Pause|Break
, код 128Left Windows key
код 133Num Lock
, код ключа 77
2. Установите клавиши переключения
Это настройка, которую я выбрал, но вы можете выбрать свою собственную настройку. Я сохранил это в файл $HOME/.xmodmap
.
~/.xmodmap keycode 66 = Mode_switch keycode 127 = Multi_key keycode 133 = Super_L ...
Таким образом, я обязан Caps Lock
к Mode_switch
, Pause Break
чтобы Compose
и левый Win
ключ к Super_L
. Compose
Ключ является особенно полезным, поскольку оно позволяет два ключа, которые будут объединены в лигатурой. Например, Compose
после чего T
и M
приводит знак товарного знака ™
.
3. Получить текущие привязки клавиш xmodmap
Чтобы не разрушить раскладку клавиатуры, я хотел, чтобы мои клавиши были как можно ближе к исходной раскладке. Чтобы сделать это, я распечатал текущую раскладку клавиш и искал коды клавиш, которые хотел изменить.
$ xmodmap -pke | ag 'keycode 51'
Конечно, вы можете так же легко использовать grep
или ack
, в зависимости от инструмента, который вы предпочитаете использовать.
$ xmodmap -pke | grep 'keycode 41' $ xmodmap -pke | ack 'keycode 31'
Вывод этого в том же формате, который вы указываете в вашем ~/.xmodmap
как это:
keycode 31 = i I i I rightarrow idotless rightarrow idotless i I rightarrow idotless i I rightarrow idotless
4. Сделайте резервную копию своего существующего xmodmap
На случай, если что-то пойдет не так, идея о том, чтобы ваш ток xmodmap
был легко доступен, никогда не будет плохой .
$ xmodmap -pke > ~/.xmodmap.bak
5. Добавьте символы на 2-й, 3-й, 4-й уровень ваших ключей
Насколько я понял, формат .xmodmap
файла выглядит так:
keycode <keycode> = <1st level> <Shift+1st> <2nd level> <shift+2nd> <3rd level> <shift+3rd level> <4th level> <shift+4th> ...
Теперь я не понимаю все эти уровни, но Mode_Switch
( Caps Lock
в моем случае) даст вам уровень 2 и Alt Gr
даст мне уровень 3, и это почти все, что меня интересует, поэтому я оставил остальную часть этой строки, как это было в моем ~/.xmodmap.bak
и просто изменили 3-й, 4-й, 5-й и 6-й столбцы (уровень 2 и 3, плюс смещение) на допустимые символы ( список допустимых символов см. здесь ).
~/.xmodmap ... keycode 51 = apostrophe asterisk dollar ampersand acute multiply acute multiply apostrophe asterisk acute multiply apostrophe asterisk acute multiply keycode 59 = comma semicolon parenleft parenright dead_cedilla dead_ogonek dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek keycode 60 = period colon bracketleft bracketright periodcentered dead_abovedot periodcentered dead_abovedot period colon periodcentered dead_abovedot period colon periodcentered dead_abovedot keycode 61 = minus underscore braceleft braceright slash backslash braceleft braceright keycode 65 = space space space space space underscore space space ...
6. Проверьте свой .xmodmap
Теперь давайте xmodmap
запустим .xmodmap
и протестируем вашу совершенно новую раскладку клавиатуры.
$ xmodmap /home/user/.xmodmap
7. Убедитесь, что раскладка клавиатуры загружена на x init
Я добавил это к моему $HOME/.xinitrc
:
~/.xinitrc ... [-f $HOME/.xmodmap] && xmodmap $HOME/.xmodmap ...
Я надеюсь, что это было полезно!