xmodmap
застарілий; тому справді це слід робити з xkb
інструментами.
Здається, потрібна свопа не включається за замовчуванням з файлами X11; тому вам доведеться писати це самостійно.
Сторінка http://madduck.net/docs/extending-xkb/ допомогла мені зрозуміти і знайти спосіб це зробити.
Створіть файл, ~/.xkb/keymap/mykbd
куди ви покладете вихід setxkbmap
, це буде базовим визначенням клавіатури; наприклад:
setxkbmap -print > ~/.xkb/keymap/mykbd
потім створіть файл символів, щоб визначити заміну ключів, помістіть його, наприклад, у ~/.xkb/symbols/myswap
там помістіть наступні рядки:
partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
replace key <LCTL> { [ Shift_L ] };
replace key <LFSH> { [ Control_L ] };
};
потім відредагуйте ~/.xkb/keymap/mykbd
файл та змініть xkb_symbols
рядок, який потрібно додати
+myswap(swap_l_shift_ctrl)
нарешті, ви можете завантажити його xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
(не можна використовувати параметр "~" -I
). Ймовірно, буде випльовано багато попереджень про невизначені символи для деяких рідкісних клавіш, але ви можете їх ігнорувати (наприклад, помилка перенаправлення на Дейв:) 2> /dev/null
.
Якщо ви хочете мати можливість легко переходити між звичайним та інвертованим ctrl / shift одним; просто створіть під ~/.xkb/keymap/
іншим файлом, без додаткової опції "myswap", і завантажте його xkbcomp
. Ви можете зробити два невеликих сценарії для їх завантаження.