了解桌面 Linux 上的键盘输入堆栈,尤其是。编写键

了解桌面 Linux 上的键盘输入堆栈,尤其是。编写键

对于上下文,我试图追踪我在 Wayland 上使用 GNOME 在 Fedora 39 上遇到的 Compose 键处理中的错误,讨论了这里这里。然而,我的问题更为笼统。我试图了解 Linux 桌面上键盘输入的宏伟方案中所有的小部分是如何组合在一起的。

我听说过这些作品:

  • Linux 内核
  • 埃夫德夫
  • (lib)xkbcommon
  • 总线
  • 韦兰
  • GUI工具包:GTK、Qt
  • 桌面环境:GNOME、KDE(及其配置机制,如 gsettings)
  • 传统X11

我有点不知道哪个做什么。

这就是我的思考我明白,这可能是非常错误的——在这种情况下我想知道该怎么做。

  • Linux 内核从键盘获取物理按键信号(通过 udev??)并将其转换为“按键代码”,
  • evdev 是一个库层,它使来自内核的原始信息更容易检索(从它的文档,“libevdev 本质上是 /dev/input/eventX 设备的类固醇读取(2)”)
  • libxkbcommon 是一个理解键盘描述的库,键盘描述是从“键代码”到“键符号”的美化映射。
  • Wayland 协议(具体来说wl_键盘)提供带有键码的输入键盘事件,并且还提供了以 libxkbcommon 格式获取键盘描述的方法。
  • X11 做了类似的事情,“xkbcommon”这个名字源于 xkbcommon 作为 X11 的一部分的历史,尽管它现在更通用,
  • 桌面环境(在我的例子中:GNOME)使键盘布局可以通过其配置 GUI 进行配置。为了使布局生效,他们将其作为wl_keyboard::keymapWayland 合成器(对于 GNOME 来说是 Mutter)的输出。
  • GUI 工具包(如 GTK)从 Wayland 协议获取按键代码和键盘描述,使用 libxkbcommon 将其转换为按键符号……然后以某种方式(如何?)按键符号变成 Unicode 字符。

我不明白 IBus 在这张图中的位置。它是干什么用的?它与 libxkbcommon 有什么不同?它是否做了一些不同的事情,或者与之竞争?堆栈的哪些部分使用它?桌面环境?它的合成器具体是什么? GUI 工具包?

我也不明白~/.XCompose文件在哪里读取。实际上,我什至不明白可能的关键符号列表是在哪里定义的。

相关内容