我不明白虚拟终端设备(例如),但我知道如果我按 ,/dev/tty1
我可以“切换”到。tty1
ctrl + alt + f1
我有一个自定义键盘布局,/usr/share/X11/xkb/symbols/us
但它只有在 X 运行时才“有效”。
虚拟终端和 X 似乎都以自己的方式管理键盘输入/输出,但大概它们都以某种方式与(Linux)内核交互,这必须为键盘硬件提供某种抽象。
Linux 内核如何处理键盘输入/输出?是否有一个源文件可供我查看,其中包含所有扫描码/键码/keysims/等的列表,也许还有 Linux 如何管理“键盘”的整个概念的整体逻辑?
(我正在运行 Lubuntu。)
答案1
看键盘输入和文本输出如何工作?了解该主题的概述。
更详细地说,在Linux下,内核从硬件接收扫描码并将其转换为键码。 (此术语并不完全标准;您可能会发现两者都使用“扫描代码”或“键代码”。)此转换的工作方式取决于键盘驱动程序。对于 PS/2 键盘,您可以配置它setkeycodes
。对于USB键盘,您可以配置它通过udev。也可以看看Arch 维基。所有用户输入设备,包括键盘和鼠标,都通过事件设备公开/dev/input/event*
。
在 Linux 控制台中,键码根据控制台键映射映射到转义序列。由于控制台是文本终端,因此应用程序会看到字节,其中可打印字符代表自身,而功能键则使用控制字符或转义序列进行编码。您可以使用以下命令更改映射loadkeys
。该映射使用两个间接级别,从键码+修饰符组合(具有三个修饰符:shift
、control
、alt
)到键符号,以及从键符号到字符串(字符或转义序列)。键符号集是固定的,因此如果您想定义自定义组合,则需要使用未使用的现有键符号,例如F13
, F14
, ...
如果您想查看实现这些翻译的源代码,请查看键盘驱动程序和通用输入代码, 和乌德夫和利布德夫。
X11(GUI)有自己的方式将键码映射到应用程序接收的内容。 X11 应用程序可以看到键符号和修饰符,因此功能键不需要进一步编码。事实上,在 X 下定义键盘映射有两种方法:经典方法 xmodmap 和更新的机制 XKB,它更强大但更复杂。