Використовуйте setxkbmap для заміни лівого зсуву та керування вліво


17

Чи можна поміняти ліву Shiftта ліву CTRLклавіші, використовуючи setxkbmapзамість xmodmap?

EDIT

Я перейшов на Fcitx , який працює набагато краще з розкладкою моєї клавіатури та налаштованою карткою клавіш , ніж IBus у будь-якому відношенні. Дуже рекомендую.

Відповіді:


28

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. Ви можете зробити два невеликих сценарії для їх завантаження.


1
Спасибі. Це працює, але на один раз. Проблема полягає в тому, що я використовую вхідний механізм під назвою IBus. Щоразу, коли я перемикав метод введення, а потім назад, натисканням клавіші "Ctrl + пробіл", повернення ліворуч та ліве управління повертаються назад. Будь-яка пропозиція, як цього уникнути.
день

mmn, можливо, IBus робить собі певні зміни клавіатури. спробуйте xkbcomp $DISPLAY some.dumpпісля і перед тим, як зателефонувати на IBus, і зробіть різницю з двох дампів (це повне визначення клавіатури); ви, мабуть, побачите відмінності.
Пабло Саратхага

Хм, це, як дратує. Будь-яка ідея позбутися проблеми? Зауважте, що команда setxkbmap -option caps:escapeпрацює. IBus запам'ятав клавіші Esc та Caps_Lock, що помінялися, але це не робиться для клавіш, що змінюються наліво та ліворуч.
день

можливо, IBus читає клавіатуру при запуску. Спробуйте вивантажити IBus, змінити клавіатуру та завантажити її знову. Якщо проблема не зникає, слід поставити специфічне запитання про IBus (і, можливо, повідомити про помилку; так, IBus повинен виявити зміни клавіатури та вшанувати їх)
Pablo Saratxaga,

Привіт. Хто-небудь може сказати мені, як я використовував би ту саму техніку, щоб поміняти ліву клавішу Alt лівою клавішею управління? Я спробував змінити файл myswap на: частковий modifier_keys xkb_symbols "swap_l_shift_ctrl" {ключ заміни <LCTL> {[Alt_L]}; клавіша заміни <LALT> {[Control_L]}; }; але це не спрацювало. ТІА !!!
Ніл Гірарді

3

Я зіткнувся з деякими проблемами , що відображають LALTз Control_Lдопомогою рішення Пабло , по- видимому, потрібно , щоб встановити modifier_mapпараметри , а також.

Я скопіював шаблон із /usr/share/X11/xkb/symbols/altwin- шукаю xkb_symbols "ctrl_alt_win"- та змінив його, щоб встановити наступні зміни:

  • Клавіша LALT для керування **
  • Ключ LWIN для Alt
  • Клавіша MENU для клавіші Windows

Остаточний ~/.xkb/symbols/myswapфайл:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

Я також додав -w0до xkbcompкоманди, щоб уникнути будь-якого попередження про вихід під час відкриття нової оболонки.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** Перемикання між Mac і Linux багато, мені подобається мати дві клавіші управління в Linux, щоб наблизити клавіатуру Mac для моєї м'язової пам'яті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.