在一种“从头开始的 Linux”环境中,我遇到了 xkbcomp 在 X 启动时失败的问题。我发现我什至无法在我的标准 Ubuntu 机器上编译键盘映射:
xkbcomp -w 10 -R/usr/share/X11/xkb -xkm rules/evdev dummy.km
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
Warning: Changing root directory to "/usr/share/X11/xkb"
syntax error: line 16 of rules/evdev
last scanned symbol is:
Errors encountered in rules/evdev; not compiled.
Run Code Online (Sandbox Code Playgroud)
xkbcomp应该如何使用?
/usr/share/X11/xkb/rules/evdev包含规则的规范。规则告诉 XKB 如何从零件构建键盘映射,它们不指定特定的键盘映射。的输入xkbcomp需要是键盘映射。
弄清楚输入应该是什么的最简单方法是\n阅读手册页(哈哈,不)\n阅读官方文档(好像)\n阅读误导性命名的Unreliable 指南(该指南非常好,它是链接在半官方X.org wiki上,但虽然它确实有信息,但实际上并没有说明这是 )\nerrr 的输入xkbcomp,在互联网上询问?哦,你刚刚这么做了。
嗯,xkbcomp双向有效。因此,如果您只是要求它从显示器上反编译键盘映射,您将看到一些可接受的输入。
xkbcomp :0 - | less\nRun Code Online (Sandbox Code Playgroud)\n\n语法是:
\n\nxkb_keymap {\n xkb_keycodes { \xe2\x80\xa6 };\n xkb_types { \xe2\x80\xa6 };\n xkb_compat { \xe2\x80\xa6 };\n xkb_symbols { \xe2\x80\xa6 };\n xkb_geometry { \xe2\x80\xa6 };\n}\nRun Code Online (Sandbox Code Playgroud)\n\n后面大括号的内容xkb_xxx是进入目录中文件的内容/usr/share/X11/xkb/xxx。您可以使用include语句来告诉xkbcomp读取现有文件。请注意,您需要在文件名之间添加一个include指令。+有些文件包含多个xkb_xxx指令,请在括号中传递所需指令的名称。例如,要将美国布局与Composeon 一起使用Menu,请使用
xkb_symbols { include "us+compose(menu)" }\nRun Code Online (Sandbox Code Playgroud)\n\n您可以要求setxkbmap提供可接受的输入xkbcomp。传递-print选项以查看输出,而不是将键盘映射推送到服务器。用setxkbmap、 、-compat、-geometry、-keycodes来-types设置对应的xkb_xxx、-layout和xkb_symbols。
setxkbmap -layout "us+compose(menu)" -print\nRun Code Online (Sandbox Code Playgroud)\n\n实际上,我在上面的遗漏中撒了谎,有一个更简单的方法:该信息位于Arch wiki上。如果您想了解如何配置系统,无论您是否使用 Arch Linux,Arch wiki 都是一个极好的资源。
\n