Як змінити консольну клавішу в Linux?


36

Я б хотів обмінятись Escі CapsLockв консолі (не в X, а використовувати xev), як це зробити?

Моя ОС - Ubuntu.

Відповіді:


60

Інструменти для управління розкладкою клавіатури на віртуальних консолях є loadkeys, dumpkeysі showkey. Прочитайте їхні керівники та повідомте про свої тонкощі.

Зауважте, що ці інструменти працюють лише у віртуальній консолі, а не в емуляторі терміналу в графічному середовищі, наприклад, gnome. Дізнайтеся про різницю читайте це запитання та відповіді: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Ось короткий посібник, щоб зробити те, що ви хочете:

  1. Збережіть поточну розкладку клавіатури:

    $ dumpkeys > backup.kmap
    

    У випадку, якщо щось піде не так, можливо, ви зможете відновити свою карту клавіш за допомогою команди:

    $ sudo loadkeys backup.kmap
    

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

  2. Перевірте, які ключові коди призначені вашим ключам:

    $ showkey
    

    Тепер натисніть клавішу ESC і клавішу CAPSLOCK. Ключові коди повинні відображатися на екрані. Зверніть увагу на ключові коди. У моїй системі ESC має код 1 і CAPSLOCK має код 58. showkeyВін припиняється через 10 секунд бездіяльності (принаймні, це відбувається на моєму ubuntu 10.04).

  3. Зверніть увагу на назви клавіш ESC та CAPSLOCK з дамперів:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Зверніть увагу на рядок ключових карт з дамперів:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Створіть файл ключової карти, який перемикає ESC та CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Завантажте ключову карту:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Тест: Тестування клавіші CAPSLOCK очевидно. Просто натисніть клавішу CAPSLOCK і перевірте, чи не використовуються інші клавіші з великої літери. Для тестування ключа ESC ви можете використовувати CTRL + V, а потім ESC. Він повинен надрукувати ^[. CTRL + V змушує оболонку друкувати наступний ключ дослівно, а не інтерпретувати його.

Щоб завантажувати цю модифікацію під час кожного перезавантаження, введіть у /etc/rc.localфайл наступний рядок :

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

Інформація, зібрана з різних сторінок, включаючи, але не обмежуючись ними:


5
Ви також можете використовувати sudo setupcon --saveзміни постійними, а не редагувати rc.local. Це по суті те саме, щоdumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
букзор

Це безпечніше використовувати /usr/bin/loadkeysв /etc/rc.localтак змінної середовища шлях не гарантується бути встановлена на даному етапі. І sudoне потрібен в rc.local.
Серпень Карлстром

@AugustKarlstrom Команда rc.localвиконується кожного разу, коли система завантажується. @ Bukzor - х sudo setupconце НЕ в rc.local, це команда установки разової, який замінює розкладку системи по замовчуванню, без додавання будь - якого коду запуску середовища виконання. Додавання loadkeys до rc.local, додає додатковий запуск коду і дублікати , що вже було зроблено по loadkeys системи по замовчуванню. Цей rc.localметод насправді може бути менш безпечним, оскільки він залежить від нестандартного шляху до ключової карти.
RobertL

@RobertL, будь ласка, розробимо setupconметод. Додайте власну відповідь або відредагуйте мою, якщо бажаєте.
lesmana

Не можу перевірити заяву @ bukzor про setupcon. Виявляється , що Август зробив припущення про те , що sudo setupcon --saveбуде йти в rc.localякий я не думаю , що це правда, але якщо це станеться, вам не потрібно sudoв rc.local. Я думаю, нам потрібна додаткова інформація, перш ніж оновлювати вашу відповідь. Головне питання - "Як встановити змінену карту клавіш, щоб вона автоматично завантажувалася під час завантаження?" Я дійсно не знаю, що є кращим способом, rc.localабо встановити карту клавіш, або навіть якщо встановити карту буде працювати. Я досліджував це останнім часом, і я перевірю тут.
RobertL

4

Використовуйте "ctrl: nocaps" замість "ctrl: swapcaps", якщо ви просто хочете мати два ключа caplocks (caplock під іншим ім'ям все ще супер марний).

X11: (див. Також /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

Текстова консоль: (викрадено у програмі 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.