Jak zamieniać klawisze Command i Control krok po kroku za pomocą xkb?

9

Chcę używać mojej długiej aluminiowej klawiatury Apple z zamienionymi klawiszami Command Cmdi Control Ctrl. Jak to zrobić krok po kroku na Trusty Tahr (14.04) przy użyciu xkb?

Uwaga: to rozwiązanie nie działa dla mnie tak, jak zostało xkbzastąpione xmodmapw 13.04 lub nawet wcześniej .

Aleksandar Savkov
źródło
1
To rozwiązanie nie działało dla mnie. Najprawdopodobniej jest przestarzały (właściwie jestem całkiem pewien, po prostu nie mogę teraz znaleźć referencji). Próbowałem tego przed opublikowaniem. Dlatego podałem wersję Ubuntu.
Aleksandar Savkov
1
@WaldirLeoncio Mam nadzieję, że to wyjaśnia, dlaczego pytanie to NIE jest duplikatem: askubuntu.com/questions/325272/…
Aleksandar Savkov

Odpowiedzi:

8

Ta odpowiedź opiera się głównie na podanej tutaj odpowiedzi . Powodem, dla którego zadaję i odpowiadam ponownie na to pytanie, jest ostatni krok, który nie został w pełni opisany. Więcej informacji na temat xkbpatrz tutaj , tutaj i tutaj .

  1. Utwórz plik w /usr/share/X11/xkb/symbols(może być również w /etc/X11/xkb/symbols) o nazwie altwin2i zawierający następujące mapowanie:

    // 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. Wstaw następujący wiersz pod option = symbolssekcją w /usr/share/X11/xkb/rules/evdev(zignoruj ​​ostrzeżenie w pierwszym wierszu):

    altwin2:cmd_n_ctrl               =       +altwin2(cmd_n_ctrl)
    
  3. Dodaj nową opcję /usr/share/X11/xkb/rules/evdev.lstw sekcji option:

    altwin2:cmd_n_ctrl    Win swapped with Ctrl
    
  4. Jeśli nie wiesz, gdzie plik konfiguracja klawiatury jest, można edytować go za pomocą dconf-editor , dodając "altwin2:cmd_n_ctrl"w xkb-optionsramach org :: pulpit gnome :: :: wejściowe-sources , jak pokazano tutaj . Jeśli wiesz, gdzie jest plik konfiguracyjny, powinieneś dołączyć nową opcję w XkbOptionspolu, jak pokazano poniżej:

    Section "InputClass"
            Identifier "keyboard-layout"
            Driver "evdev"
            MatchIsKeyboard "yes"
            Option "XkbLayout" "us, ru, ca, fr"
            Option "XkbOptions" "altwin2:cmd_n_ctrl"
    EndSection
    
  5. Uruchom ponownie lub uruchom ponownie, lightdmaby zaktualizować zmiany:

    sudo restart lightdm
    

UWAGA: jeśli jakiekolwiek zmiany zostaną wprowadzone bezpośrednio w plikach układu, tzn. Nie zostaną użyte opcje, pliki w pamięci podręcznej /var/lib/xkb/muszą zostać usunięte, jak wskazano tutaj .

Aleksandar Savkov
źródło
2
Powinien być !option = symbolssekcja, a nie options = symbols(spędziłem czas na szukaniu „options =”, aby znaleźć sekcję).
Ben Davis,
Zobacz także tutaj: reddit.com/r/Ubuntu/comments/8lnr8q/remapping_keys
Aleksandar Savkov
Jak większość rzeczy z xkb i xmodmap, nie działa, prawdopodobnie zepsuło mój system w inny sposób, mam dość tego badziewia i naprawdę chciałbym, żeby linux dostał bzdury razem z najbardziej podstawową dziwaczną rzeczą dotyczącą mapowania klawiszy i wiązania.
Seph
Pamiętaj, że zostało to napisane w 2014 roku i nie dotyczy współczesnych dystrybucji.
Aleksandar Savkov
3

W 16.04 oto jak w końcu udało mi się to uruchomić. Xmodmap nie działa uniwersalnie we wszystkich aplikacjach, narzędzie do dostosowywania gnomów nie posiadało tej funkcji, dconf nie edytował niestandardowej zamiany klawiszy altwin2 (jak tutaj główna odpowiedź), więc oderwałem włosy, aż połączyłem kilka odpowiedzi w ten kompletny, prosty i eleganckie rozwiązanie:

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

zmień na:

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        ]   };
};

Zapisać.

rm -rf /var/lib/xkb/*

(Nie wiem, czy jest to wymagane, ale zrobiłem to.)

Restart.

Tom Mercer
źródło
Dziękuję za to. Przetestuję to, gdy w najbliższej przyszłości przeprowadzę migrację do wersji 16.04.
Aleksandar Savkov
Właśnie użyłem tego przy mojej aktualizacji 16.10. Pracował bardzo ładnie.
Tom Mercer
1
Zdecydowanie najprostsza odpowiedź działała jak urok na mojej Fedorze. Dzięki!
hakunin