当X Window 系统运行时,我已经能够更改键盘布局/映射~/.Xmodmap
(我想你也可以直接通过X 协议来做到这一点,例如,使用libxcb作为 X 协议调用的包装器)。
我已经能够在控制台/tty(即 X 未运行时)上使用loadkeys
.
有没有一种方法可以类似地自定义键盘布局,但从单一来源,以影响 X 和控制台的方式,即。以“与 X 和控制台无关”的方式?
(我能想到的唯一方法是编写一个“键盘驱动程序”,它与内核的输入接口对话evdev
,并发送你想要的输入(通过uinput
?),但我不知道这是否有意义,或者如果有更简单的方法。)
是的,有一种方法,这确实是 Debian 的控制台设置包的方式。
keyboard
,通常为/etc/default/keyboard
. 这是单一来源。它可以用文本编辑器进行编辑。setxkbmap
程序具有这些相同的 XKB 设置并相应地配置 X11 服务器。setxkbmap
直接运行/etc/default/keyboard
,如果它发现自己带有 X11 显示器,则带有设置。因此dpkg-reconfigure keyboard-configuration
,从 X11 GUI 终端仿真器运行将影响 X11 键盘布局。setupcon
脚本采用这些 XKB 设置,将它们传递给ckbcomp
实用程序以生成键盘映射,并使用loadkeys
/将该键盘映射加载到内核虚拟终端中kbdcontrol
。其他 systemd 操作系统的工作方式不同,但也有单一来源。
/etc/X11/xorg.conf.d/00-keyboard.conf
. 这是单一来源。systemd-localed
该文件在启动时被解析。该文件在运行时无法使用文本编辑器进行有用的编辑systemd-localed
,因为该服务会用自己的内存信息轻松地覆盖它。localectl
,该服务器与另一台服务器通信,该服务器又与systemd-localed
.systemd-localed
使用映射将 XKB 设置转换为虚拟终端键盘映射名称/usr/share/systemd/kbd-model-map
,然后将其写入/etc/vconsole.conf
. 与 Debian 系统不同,它不会根据 XKB 信息动态生成映射,而是仅选择映射文件中列出的预先提供的静态映射。systemd-vconsole-setup
在引导程序中运行,读取/etc/vconsole.conf
键盘映射,并通过运行将键盘映射加载到内核虚拟终端中loadkeys
。进一步阅读
keyboard
. 控制台设置用户手册。德比安。ckbcomp
. 控制台设置用户手册。德比安。