我一直很难理解 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 中有几个特定的解释层。
- 在最基本的层面上,每个按键事件都由数字键码表示。
- XkbModel 与 XkbLayout 结合用于将给定的键码与实际的键事件相关联。例如,在我的键盘上,键码 50 生成
Shift_L
. - 您可以选择为键盘指定多个 XkbLayout,然后使用
XkbOptions
(通常存储在 中的完整列表/usr/share/X11/xkb/rules
)来配置如何切换布局。 (如果您想自学德沃夏克,或者您想在英语和俄语键盘布局之间切换,这很有用)。 - 每个键码都可以用多种方式解释,具体取决于所持有的修饰符。
xmodmap
让您可以看到根据所持有的修饰符将发送哪些关键事件。
答案2
如今,控制台和 X 实际上可以协同工作。
我不知道这是否完全标准化,但在 Debian Unstable(大概还有其他具有最新 Xorg 和控制台工具的发行版)中,/etc/default/keyboard
允许您使用 X 样式语法在控制台和 X - at 中设置键盘至少如果您使用控制台工具和控制台设置。其余的就如克利所描述的那样。
答案3
有一些经典的问题,比如 vim 中退格键不起作用......
也许您正在谈论 vim 的行为,即使用退格键仅删除您在当前版本中键入的字符,并阻止您对进入编辑模式之前已经存在的字符执行此操作。
通过设置可以更改该行为:
set backspace=indent,eol,start