Jak zmienić mapę klawiszy konsoli w systemie Linux?

36

Chciałbym wymienić Esci CapsLockw konsoli (nie w X i używać xev), jak mogę to zrobić?

Mój system operacyjny to Ubuntu.

Vayn
źródło

Odpowiedzi:

60

Narzędzia do manipulowania układ klawiatury na konsolach wirtualnychloadkeys, dumpkeysi showkey. Przeczytaj ich strony i dowiedz się o ich zawiłościach.

Zauważ, że narzędzia te działają tylko w wirtualnej konsoli, a nie w emulatorze terminali w środowisku graficznym takim jak gnome. Aby dowiedzieć się o różnicy, przeczytaj to pytanie i odpowiedzi: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Oto krótki przewodnik, jak robić, co chcesz:

  1. Zapisz swój obecny układ klawiatury:

    $ dumpkeys > backup.kmap
    

    Jeśli coś pójdzie nie tak, możesz przywrócić mapę klawiszy za pomocą polecenia:

    $ sudo loadkeys backup.kmap
    

    Jeśli klawiatura jest tak pomieszana, że ​​nie możesz tego zrobić, to jedyną opcją, która nie wiąże się ze starożytną magią jądra, jest ponowne uruchomienie.

  2. Sprawdź, które kody dostępu są przypisane do twoich kluczy:

    $ showkey
    

    Teraz naciśnij klawisz ESC i klawisz CAPSLOCK. Kody klawiszy powinny pojawić się na ekranie. Zanotuj kody klawiszy. W moim systemie ESC ma kod 1, a CAPSLOCK ma kod 58. showkeyzakończy się po 10 sekundach bezczynności (przynajmniej w moim Ubuntu 10.04).

  3. Zanotuj nazwy kluczy ESC i CAPSLOCK z klawiszy zrzutu:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Zanotuj wiersz mapy klawiszy ze śmietników:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Utwórz plik mapy klawiszy, który przełącza ESC i CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Załaduj mapę klawiszy:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Test: Testowanie klucza CAPSLOCK jest oczywiste. Wystarczy nacisnąć klawisz CAPSLOCK i sprawdzić, czy inne klawisze wychodzą z dużej litery. Aby przetestować klucz ESC, możesz użyć CTRL + V, a następnie ESC. Powinien wydrukować ^[. CTRL + V sprawia, że ​​powłoka wypisuje następny klucz dosłownie zamiast go interpretować.

Aby ta modyfikacja była ładowana przy każdym ponownym uruchomieniu, umieść w swoim /etc/rc.localpliku następujący wiersz :

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

Informacje zebrane z różnych stron, w tym między innymi:

lesmana
źródło
5
Możesz także użyć sudo setupcon --savedo wprowadzenia zmian na stałe, zamiast edytować plik rc.local. Jest to w zasadzie to samo, codumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor
Bezpieczniej jest używać /usr/bin/loadkeysw /etc/rc.localponieważ zmienna środowiskowa PATH nie jest gwarantowana być ustawione na tym etapie. I sudonie jest potrzebny w rc.local.
August Karlstrom,
@AugustKarlstrom Komenda in jest rc.localwykonywana przy każdym uruchomieniu systemu. @ bukzor na sudo setupconto nie w rc.local, to komenda setup jednorazowa, która zastępuje domyślny układ układ klawiatury, bez dodawania jakiegokolwiek kodu startowego wykonawcze. Dodanie loadkeys do rc.localdodaje dodatkowo uruchomić kod i duplikatów, co zostało już zrobione przez domyślny system loadkeys. Ta rc.localmetoda może być mniej bezpieczna, ponieważ zależy od niestandardowej ścieżki do mapy klawiszy.
RobertL
@RobertL proszę opracować setupconmetodę. Dodaj własną odpowiedź lub edytuj moją, jeśli chcesz.
lesmana
Nie mogę zweryfikować oświadczenia @ bukzor o setupcon. Wydaje się, że sierpień wykonane przy założeniu, że sudo setupcon --savepójdzie do rc.localktórych ja nie sądzę, to prawda, ale jeśli tak, to nie trzeba sudosię rc.local. Myślę, że potrzebujemy więcej informacji przed zaktualizowaniem twojej odpowiedzi. Główne pytanie brzmi: „Jak zainstalować zmodyfikowaną mapę klawiszy, aby ładowała się automatycznie podczas procesu uruchamiania?” Naprawdę nie wiem, który jest lepszy sposób, rc.localinstalowanie mapy klawiszy, a nawet to, czy instalacja klawiatury będzie działać. Ostatnio to badam i wrócę tutaj.
RobertL
4

Użyj „ctrl: nocaps” zamiast „ctrl: swapcaps”, jeśli chcesz mieć tylko dwa klawisze Capslocks (Capslock pod inną nazwą jest nadal bardzo bezużyteczny).

X11: (zobacz też: /usr/share/X11/xkb/rules/base.lst)

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

Konsola tekstowa: (skradziony z setupcon)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
bukzor
źródło