Как работает сопоставление клавиш в Linux?

Как работает сопоставление клавиш в Linux?

У меня всегда были проблемы с пониманием того, как организована раскладка клавиатуры и связанные с ней вещи в 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 существует несколько определенных уровней интерпретации нажатия клавиши.
  1. На самом базовом уровне каждое событие нажатия клавиши представлено числовым кодом клавиши.
  2. XkbModel в сочетании с XkbLayout используются для связывания заданного кода клавиши с реальным событием клавиши. Например, на моей клавиатуре код клавиши 50 генерирует Shift_L.
  3. При желании вы можете указать несколько XkbLayouts для клавиатуры, а затем использовать XkbOptions(полный список обычно хранится в /usr/share/X11/xkb/rules), чтобы настроить переключение раскладок. (Это полезно, если, скажем, вы пытаетесь самостоятельно выучить Дворака или хотите переключаться между английской и русской раскладками клавиатуры).
  4. Каждый код клавиши может быть интерпретирован несколькими способами в зависимости от удерживаемых модификаторов. 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

Связанный контент