Linux 中的键盘映射如何工作?

Linux 中的键盘映射如何工作?

我一直很难理解 Linux 中键盘映射和相关内容的组合方式。

当事情出现问题时,如果我必须在无数过时的邮件列表和论坛帖子中筛选才能找到,我会感到热血沸腾。一个命令或 inputrc 行可以解决我的问题。

Ctrl在切换终端类型之前,有一些经典问题,例如 vim 中的退格键不起作用,或者bash 中的 + 箭头不起作用。或者我最近遇到的一个问题,在新的 Debian 安装@密钥中实际上打印", 并"打印@(键盘布局错误?)

仅仅查看文件和工具并没有太大帮助。输入rc? xmodmap?设置xkbmap?控制台设置?我实际上从哪里开始理解它是如何工作的,这样我就不必尝试别人的可疑命令来解决我的键盘问题?

答案1

这比应有的要复杂得多,但这是我的尝试。

在最基本的层面上,内核知道如何识别键盘设备,并且理解键盘的概念。控制台键盘映射。这是配置键盘的最简单方法,并且只需考虑一个变量,但这些设置仅影响 Linux 文本控制台上的键盘输入。

一旦你进入 Xorg,事情就会变得有点复杂,但它确实有意义。 Xorg 有几个特定的​​概念,理解这些概念非常重要。

  • Xorg 直接与键盘设备对话,绕过内核并忽略控制台上指定的键盘映射。
  • Xorg 允许您在 xorg.conf 文件中为键盘设置一些特定选项,尽管当前的 Linux 发行版尽力在没有任何 xorg.conf 文件的情况下运行。根据您的 Xorg 版本,您可能需要在一个InputClass部分(对于较新版本的 Xorg)或一个InputDevice部分(对于旧版本)内指定您的 XkbLayout。
  • 当按键时,Xorg 中有几个特定的​​解释层。
  1. 在最基本的层面上,每个按键事件都由数字键码表示。
  2. XkbModel 与 XkbLayout 结合用于将给定的键码与实际的键事件相关联。例如,在我的键盘上,键码 50 生成Shift_L.
  3. 您可以选择为键盘指定多个 XkbLayout,然后使用XkbOptions(通常存储在 中的完整列表/usr/share/X11/xkb/rules)来配置如何切换布局。 (如果您想自学德沃夏克,或者您想在英语和俄语键盘布局之间切换,这很有用)。
  4. 每个键码都可以用多种方式解释,具体取决于所持有的修饰符。xmodmap让您可以看到根据所持有的修饰符将发送哪些关键事件。

答案2

如今,控制台和 X 实际上可以协同工作。

我不知道这是否完全标准化,但在 Debian Unstable(大概还有其他具有最新 Xorg 和控制台工具的发行版)中,/etc/default/keyboard允许您使用 X 样式语法在控制台和 X - at 中设置键盘至少如果您使用控制台工具和控制台设置。其余的就如克利所描述的那样。

答案3

有一些经典的问题,比如 vim 中退格键不起作用......

也许您正在谈论 vim 的行为,即使用退格键仅删除您在当前版本中键入的字符,并阻止您对进入编辑模式之前已经存在的字符执行此操作。

通过设置可以更改该行为:

set backspace=indent,eol,start

相关内容