Как поменять местами клавиши Command и Control с xkb?

9

Я хочу использовать мою длинную алюминиевую клавиатуру Apple с замененными клавишами Command Cmdи Control Ctrl. Как это делается шаг за шагом при использовании Trusty Tahr (14.04) xkb?

Примечание: это решение не работает для меня, поскольку xkbзаменено xmodmapв 13.04 или даже раньше .

Александар Савков
источник
1
Это решение не сработало для меня. Скорее всего, он устарел (на самом деле я уверен, просто не могу найти ссылку сейчас). Я попробовал это перед публикацией. Вот почему я указал версию Ubuntu.
Александар Савков
1
@WaldirLeoncio Надеюсь, это прояснит, почему вопрос НЕ является дубликатом: askubuntu.com/questions/325272/…
Александар Савков

Ответы:

7

Этот ответ в основном основан на ответе, приведенном здесь . Причина, по которой я спрашиваю и отвечаю на этот вопрос снова, является последним шагом, который не был полностью описан. Для дальнейшего прочтения xkbсмотрите здесь , здесь и здесь .

  1. Создайте файл в /usr/share/X11/xkb/symbols(также может быть в /etc/X11/xkb/symbols) с именем altwin2и содержащий следующее отображение:

    // Control is SWAPPED with Win-keys 
    partial modifier_keys
    xkb_symbols "cmd_n_ctrl" {
        key <LWIN> {        [       Control_L               ]       };
        key <RWIN> {        [       Control_R               ]       };
        key <LCTL> {       [       Super_L         ]       };
        modifier_map Control { <LWIN>, <RWIN> };
        modifier_map Mod4 { <LCTL> };
    };
    
  2. Вставьте следующую строку под option = symbolsразделом /usr/share/X11/xkb/rules/evdev(не обращая внимания на предупреждение в первой строке):

    altwin2:cmd_n_ctrl               =       +altwin2(cmd_n_ctrl)
    
  3. Добавьте новую опцию /usr/share/X11/xkb/rules/evdev.lstв раздел option:

    altwin2:cmd_n_ctrl    Win swapped with Ctrl
    
  4. Если вы не знаете , где ваш файл конфигурации клавиатуры, вы можете редактировать его с помощью dconf-редактор , добавив "altwin2:cmd_n_ctrl"в xkb-optionsрамках орг :: гном :: настольных :: вход-источники , как показано здесь . Если вы знаете, где находится ваш файл конфигурации, вы должны включить новую опцию в XkbOptionsполе, как показано ниже:

    Section "InputClass"
            Identifier "keyboard-layout"
            Driver "evdev"
            MatchIsKeyboard "yes"
            Option "XkbLayout" "us, ru, ca, fr"
            Option "XkbOptions" "altwin2:cmd_n_ctrl"
    EndSection
    
  5. Перезагрузите или перезапустите, lightdmчтобы обновить изменения:

    sudo restart lightdm
    

ПРИМЕЧАНИЕ. Если какие-либо изменения вносятся непосредственно в файлы макета, т. Е. Не используются параметры, кэшированные файлы /var/lib/xkb/необходимо удалить, как указано здесь .

Александар Савков
источник
2
Должен быть !option = symbolsраздел, а не options = symbols(потратил время на поиск "options =", чтобы найти раздел).
Бен Дэвис,
Смотрите также здесь: reddit.com/r/Ubuntu/comments/8lnr8q/remapping_keys
Александар Савков
Как и большинство вещей с xkb и xmodmap, не работает, возможно, сломал мою систему иным образом, я устал от этой чепухи и очень хотел бы, чтобы linux совпал со своей чепухой вместе с самой основной неприятной вещью о сопоставлении клавиш и связывании.
Seph
Не забывайте, что это было написано в 2014 году и не относится к современным дистрибутивам.
Александр Савков
3

В 16.04, вот как я, наконец, получил это на работу. Xmodmap не работает универсально во всех приложениях, инструменту gnome tweak не хватало функции, dconf редактировать пользовательскую замену клавиш altwin2 (как основной ответ здесь) не удалось, поэтому я рвал волосы, пока не собрал несколько ответов в этот полный, простой и элегантное решение:

gksudo gedit /usr/share/X11/xkb/symbols/pc

измените это на:

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

key <ESC>  {    [ Escape        ]   };

// The extra key on many European keyboards:
key <LSGT> {    [ less, greater, bar, brokenbar ] };

// The following keys are common to all layouts.
key <BKSL> {    [ backslash,    bar ]   };
key <SPCE> {    [    space      ]   };

include "srvr_ctrl(fkey2vt)"
include "pc(editing)"
include "keypad(x11)"

key <BKSP> {    [ BackSpace, BackSpace  ]   };

key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
key <RTRN> {    [ Return        ]   };

key <CAPS> {    [ Caps_Lock     ]   };
key <NMLK> {    [ Num_Lock      ]   };

key <LFSH> {    [ Shift_L       ]   };
key <LCTL> {    [ Alt_L     ]   };
key <LWIN> {    [ Super_L       ]   };

key <RTSH> {    [ Shift_R       ]   };
key <RCTL> {    [ Alt_R     ]   };
key <RWIN> {    [ Super_R       ]   };
key <MENU> {    [ Menu          ]   };

// Beginning of modifier mappings.
modifier_map Shift  { Shift_L, Shift_R };
modifier_map Lock   { Caps_Lock };
modifier_map Control{ Control_L, Control_R };
modifier_map Mod2   { Num_Lock };
modifier_map Mod4   { Super_L, Super_R };

// Fake keys for virtual<->real modifiers mapping:
key <LVL3> {    [ ISO_Level3_Shift  ]   };
key <MDSW> {    [ Mode_switch       ]   };
modifier_map Mod5   { <LVL3>, <MDSW> };

key <ALT>  {    [ NoSymbol, Control_L, Control_R    ]   };
//include "altwin(meta_alt)"
key <LALT> {    [ Control_L     ]   };
key <RALT> {    [ Control_R     ]   };
modifier_map Mod1   { Alt_L, Alt_R, Meta_L, Meta_R };

key <META> {    [ NoSymbol, Meta_L, Meta_R  ]   };
modifier_map Mod1   { <META> };

key <SUPR> {    [ NoSymbol, Super_L ]   };
modifier_map Mod4   { <SUPR> };

key <HYPR> {    [ NoSymbol, Hyper_L ]   };
modifier_map Mod4   { <HYPR> };
// End of modifier mappings.

key <OUTP> { [ XF86Display ] };
key <KITG> { [ XF86KbdLightOnOff ] };
key <KIDN> { [ XF86KbdBrightnessDown ] };
key <KIUP> { [ XF86KbdBrightnessUp ] };
};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
key <PRSC> {
type= "PC_ALT_LEVEL2",
symbols[Group1]= [ Print, Sys_Req ]
};
key <SCLK> {    [  Scroll_Lock      ]   };
key <PAUS> {
type= "PC_CONTROL_LEVEL2",
symbols[Group1]= [ Pause, Break ]
};
key  <INS> {    [  Insert       ]   };
key <HOME> {    [  Home         ]   };
key <PGUP> {    [  Prior        ]   };
key <DELE> {    [  Delete       ]   };
key  <END> {    [  End          ]   };
key <PGDN> {    [  Next         ]   };

key   <UP> {    [  Up           ]   };
key <LEFT> {    [  Left         ]   };
key <DOWN> {    [  Down         ]   };
key <RGHT> {    [  Right        ]   };
};

Сохранить.

rm -rf /var/lib/xkb/*

(Я не знаю, требуется ли это, но я сделал это.)

Перезагрузка.

Том Мерсер
источник
Спасибо за это. Я протестирую его, когда перейду на 16.04 в ближайшем будущем.
Александар Савков
Просто использовал это на моем обновлении 16.10. Работал очень хорошо.
Том Мерсер
1
Безусловно, самый простой ответ, сработал, как талисман на моей Fedora. Спасибо!
Хакунин