Как изменить раскладку консоли в 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:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Обратите внимание на строку раскладки клавиатуры из dumpkeys:

    $ 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

Информация, собранная с разных страниц, включая, но не ограничиваясь:

lesmana
источник
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
@ РобертЛ, пожалуйста, уточни setupconметод. Добавьте свой ответ или отредактируйте мой, если хотите.
Lesmana
Я не могу подтвердить заявление @ bukzor о setupcon. Оказывается , что Август сделал предположение о том , что sudo setupcon --saveбудет идти в rc.localкоторый я не думаю , что это правда, но если это произойдет, вам не нужно sudoв rc.local. Я думаю, что нам нужно больше информации, прежде чем обновлять ваш ответ. Основной вопрос: «Как установить измененную таблицу ключей, чтобы она автоматически загружалась во время процесса загрузки?» Я действительно не знаю, какой из них лучше, rc.localили установка карты ключей, или даже если установка карты ключей будет работать. Я изучал это в последнее время, и я проверю здесь.
RobertL
4

Используйте 'ctrl: nocaps' вместо 'ctrl: swapcaps', если вы просто хотите получить ключ с двумя capslocks (capslock под другим именем по-прежнему бесполезен).

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
bukzor
источник