éta*_*ogy 9 keyboard keyboard-layout
我已经能够在X Window System运行时更改键盘布局/映射~/.Xmodmap
(我想你也可以直接通过X 协议来完成,例如使用libxcb作为 X 协议调用的包装器)。
我已经能够在控制台/tty(即当 X 未运行时)使用loadkeys
.
有没有一种方法可以类似地自定义键盘布局,但来自单一来源,以这样的方式影响 X 和控制台,即。以一种“X 和控制台不可知论”的方式?
(我能想到的唯一方法是编写一个“键盘驱动程序”,它与内核的输入接口对话evdev
,并发送您想要的输入(通过uinput
?),或者其他什么,但我不知道这是否有意义,或者如果有更简单的方法。)
Jde*_*eBP 16
是的,有一种方法,这确实是 Debian 的 console-setup 软件包的做法。
keyboard
,文件名为,通常为/etc/default/keyboard
. 这是唯一的来源。它可以使用文本编辑器进行编辑。setxkbmap
程序具有相同的 XKB 设置,并相应地配置 X11 服务器。
setxkbmap
使用/etc/default/keyboard
设置直接运行。因此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
. 控制台设置用户手册。Debian。ckbcomp
. 控制台设置用户手册。Debian。