我正在 Debian 上配置键盘布局以了解 XKB 扩展的工作原理。我正在尝试加载自定义键盘布局,但不确定为什么它不能在图形环境中工作,但可以在虚拟控制台中工作。
我在 处创建了一个新的键盘布局文件,/usr/share/X11/xkb/symbols/foobar
该文件基于 处的文件/usr/share/X11/xkb/symbols/us
。相关部分如下所示:
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1]= "English (US)";
key <TLDE> { [ grave, asciitilde ] };
// key <AE01> { [ 1, exclam ] };
key <AE01> { [ a, A ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
// ...
<AE01
您可以看到我已将标记为(单键)的键从符号1
and更改exclam
为a
and A
。
我通过编辑文件将系统配置为使用自定义foobar
布局/etc/default/keyboard
,如下所示:
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
# XKBLAYOUT="us"
XKBLAYOUT="foobar"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps,altwin:menu_win"
BACKSPACE="guess"
当我将系统启动到图形桌面环境并按下按键时,1
我期望它会像 一样出现,a
但它不起作用;它仍然是一个1
.
奇怪的是,如果我使用键盘快捷键切换到虚拟控制台,Ctrl + Alt + F1
那么我可以看到我的更改有效,并且按下该1
键会打印一个a
.
如果我使用localectl
命令,它看起来也像我的更改有效:
$ localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: n/a
X11 Layout: foobar
X11 Model: pc105
X11 Options: ctrl:nocaps,altwin:menu_win
为什么我的自定义布局不能foobar
在图形环境中工作?
我尝试通过 systemd 单元的曲折进行搜索keyboard-setup.service
,发现调用了以下脚本:
/lib/console-setup/keyboard-setup.sh
/usr/bin/setupcon
我注意到我的foobar
布局没有在localectl list-x11-keymap-layouts
命令中输出。
手册页localectl
指向以下配置指南:
https://www.x.org/releases/current/doc/xorg-docs/input/XKB-Config.html
它确实提到我们不应该再使用布局
Keymap配置是以前配置xkb的方式。用户包含一个特殊的键盘映射文件,它指定了直接 xkb 配置。此方法已被先前描述的规则文件所取代,这些规则文件更加灵活并且允许更简单和更直观的语法。保留它只是出于兼容性原因,如果可能的话应该避免。
不过,我还是尝试通过使用/etc/X11/xorg.conf.d/90-foobar-kdb.conf
以下内容填充文件:
Section "InputClass"
Identifier "keyboard defaults"
MatchIsKeyboard "on"
Option "XkbModel" "pc105"
Option "XkbLayout" "foobar"
Option "XKbOptions" ""
EndSection
重新启动系统后,我取消了XKbOptions
选项,但仍然没有成功加载我的 foobar 地图。所以我仍然对如何在 X11 中加载自定义布局感到困惑。