进一步阅读

进一步阅读

我已经能够更改键盘布局/映射X窗口系统正在使用~/.Xmodmap(我想你也可以通过X协议直接使用作为 X 协议调用的包装器)。

我已经能够在控制台/tty 上(即当 X 未运行时)使用loadkeys.

有没有一种方法可以类似地自定义键盘布局,但是从单一来源,以这样的方式影响 X 和控制台,即。以“X 和控制台不可知论”的方式?

(我能想到的唯一方法是编写一个“键盘驱动程序”,它与内核的输入接口对话,evdev并发送你想要的输入(通过uinput?),或者其他什么,但我不知道这是否有意义,或者是否有更简单的方法。)

答案1

是的,有一种方法,这确实是 Debian 的控制台设置包的做法。

  • 键盘布局由管理员在名为 的文件(keyboard通常为/etc/default/keyboard.这是单一来源。可以使用文本编辑器对其进行编辑。
  • setxkbmap程序被赋予这些相同的 XKB 设置并相应地配置 X11 服务器。
    • 如果键盘配置包的安装后维护程序脚本发现自己具有 X11 显示器,则setxkbmap直接运行设置并进行设置。/etc/default/keyboard因此,dpkg-reconfigure keyboard-configuration从 X11 GUI 终端仿真器运行将影响 X11 键盘布局。
  • setupcon脚本采用这些 XKB 设置,将它们传递给实用程序以生成键盘映射,并使用/ckbcomp将该键盘映射加载到内核虚拟终端中。 loadkeyskbdcontrol
    • 该脚本由服务在系统引导时运行。
    • 也可以在其他时候手动运行。

其他 systemd 操作系统的工作方式有所不同,但也有单一来源。

  • XKB 布局、变体和选项存储在/etc/X11/xorg.conf.d/00-keyboard.conf.这是单一来源。
    • 该文件在启动时由X11服务器直接读取并直接设置X11键盘映射。
    • 该文件在启动时被解析systemd-localed。该文件在运行时无法使用文本编辑器进行有用的编辑systemd-localed,因为该服务会愉快地用自己的内存信息覆盖它。
    • 要更改 XKB 信息,需要运行localectl,它与另一台服务器通信,而另一台服务器又与 通信systemd-localed
  • systemd-localed使用 中的映射将 XKB 设置转换为虚拟终端键盘映射名称/usr/share/systemd/kbd-model-map,然后将其写入/etc/vconsole.conf。与 Debian 系统不同,它不会根据 XKB 信息动态生成地图,而是仅选择地图文件中列出的预先提供的静态地图。
  • systemd-vconsole-setup在引导程序中运行,读取/etc/vconsole.conf并通过运行将键盘映射加载到内核虚拟终端中loadkeys

进一步阅读

相关内容