
У меня всегда были проблемы с пониманием того, как организована раскладка клавиатуры и связанные с ней вещи в Linux.
Когда что-то ломается, у меня кровь закипает, когда мне приходится просматривать бесконечные устаревшие списки рассылки и сообщения на форумах, чтобы найтиЧТОодна команда или строка inputrc, которая решает мою проблему.
Есть классические проблемы, такие как backspace не работает в vim, или Ctrl
+ стрелки в bash, пока вы не переключите тип терминала. Или проблема, с которой я столкнулся недавно, когда в свежей установке Debian @
key на самом деле печатает "
, и "
печатает @
(неправильная раскладка клавиатуры?)
Просто просмотр файлов и инструментов не поможет. inputrc? xmodmap? setxkbmap? console-setup? С чего мне начать на самом делепониматькак это работает, чтобы мне не пришлось прибегать к попыткам ввести чьи-то сомнительные команды, чтобы исправить проблемы с клавиатурой?
решение1
Это гораздо сложнее, чем должно быть, но вот моя попытка.
На самом базовом уровне ядро знает, как распознавать устройства клавиатуры, и понимает концепциюраскладка клавиатуры консоли. Это самый простой способ настройки клавиатуры, и здесь нужно учитывать только одну переменную, но эти настройки влияют только на ввод с клавиатуры в текстовой консоли Linux.
Как только вы попадаете в Xorg, все становится немного сложнее, но на самом деле это имеет некий смысл. Xorg имеет несколько конкретных понятий, которые очень важно понимать.
- Xorg взаимодействует напрямую с устройством клавиатуры, минуя ядро и игнорируя раскладку клавиатуры, указанную в консоли.
- Xorg позволяет вам устанавливать некоторые особые параметры для вашей клавиатуры в файле xorg.conf, хотя текущие дистрибутивы Linux стараются работать без файла xorg.conf вообще. В зависимости от вашей версии Xorg вам может потребоваться указать XkbLayout внутри раздела
InputClass
(для более новых версий Xorg) илиInputDevice
раздела (для более старых выпусков). - В Xorg существует несколько определенных уровней интерпретации нажатия клавиши.
- На самом базовом уровне каждое событие нажатия клавиши представлено числовым кодом клавиши.
- XkbModel в сочетании с XkbLayout используются для связывания заданного кода клавиши с реальным событием клавиши. Например, на моей клавиатуре код клавиши 50 генерирует
Shift_L
. - При желании вы можете указать несколько XkbLayouts для клавиатуры, а затем использовать
XkbOptions
(полный список обычно хранится в/usr/share/X11/xkb/rules
), чтобы настроить переключение раскладок. (Это полезно, если, скажем, вы пытаетесь самостоятельно выучить Дворака или хотите переключаться между английской и русской раскладками клавиатуры). - Каждый код клавиши может быть интерпретирован несколькими способами в зависимости от удерживаемых модификаторов.
xmodmap
позволяет увидеть, какие события клавиш будут отправлены в зависимости от удерживаемых модификаторов.
решение2
В наши дни консоль и X действительно могут работать вместе.
Я не знаю, полностью ли это стандартизировано, но в Debian Unstable (и, предположительно, в других дистрибутивах с современным Xorg и консольными инструментами) /etc/default/keyboard
позволяет использовать синтаксис в стиле X для настройки клавиатуры в консоли и в X - по крайней мере, если вы используете console-tools и console-setup. Остальное - как описано clee.
решение3
Есть классические проблемы, например, неработающая клавиша Backspace в Vim...
Возможно, вы говорите о поведении vim, который удаляет с помощью клавиши Backspace только те символы, которые вы ввели в текущем издании, и не позволяет вам сделать то же самое с символами, которые уже были введены до того, как вы вошли в режим редактирования.
Это поведение изменяется путем установки:
set backspace=indent,eol,start