我已经发现在 xorg(很棒的桌面管理器)下启用粘滞键在超级用户上,这表明我可以通过以下方式启用粘滞键
xkbset sticky -twokey
这按预期工作,但就我而言,我更愿意仅使特定键 ( Alt Gr
) 成为粘性键,而不是所有修饰键。这个可以配置吗?如果是这样:在哪里?
答案1
在 X11 上实现这一点的一种方法是使用 XKB 并将右侧 alt 键设置为当前锁存模式作为 AltGr。有几种方法可以解决这个问题:
选项1
您可以将当前的键盘布局导出到文件,仅更改右侧 alt 键 (AltGr) 的行为并将其加载回 X,从而覆盖默认布局:
运行
xkbcomp $DISPLAY current.xkb
以导出当前的键盘布局。打开
current.xkb
文件并找到以下代码片段:key <RALT> { type= "ONE_LEVEL", symbols[Group1]= [ ISO_Level3_Shift ] };
更改如下:
key <RALT> { type= "ONE_LEVEL", symbols[Group1]= [ ISO_Level3_Shift ], actions[Group1]= [ LatchMods(mods=AltGr) ] };
保存文件并运行
xkb current.xkb $DISPLAY
以应用新布局。
注意事项
新布局仅适用于当前的 X 会话。您可能希望在登录后自动重新加载它。如果您使用窗口管理器,只需将其添加
xkb current.xkb $DISPLAY
到您的.xinitrc
或.xprofile
.如果您使用的是桌面环境,这可能会有点棘手,因为桌面环境通常以自己的方式处理键盘布局,并且它们可以覆盖本地配置。请务必检查他们的文档,或者尝试选项2以下。如果您使用多种键盘语言,则需要对每个导出的 xkb 文件重复上述步骤,并在适当时以某种方式加载它们(例如,使用每种语言的快捷方式)。
选项2
您可以创建一个新的 XKB 选项来启用 AltGr 键所需的行为,然后将其与语言布局一起激活:
/usr/share/X11/xkb/symbols
在named中创建一个altgr
包含以下内容的文件:partial alphanumeric_keys xkb_symbols "latch" { key <RALT> { symbols = [ ISO_Level3_Shift ], actions = [ LatchMods(mods=AltGr) ] }; };
打开
evdev
文件/usr/share/X11/xkb/rules
并找到行! option = symbols
.在其后添加一个新行并插入altgr:latch = +altgr(latch)
.它将如下所示:! option = symbols altgr:latch = +altgr(latch) ...
+altgr(latch)
方法使用位于以下位置的文件中latch
的组altgr
/usr/share/X11/xkb/symbols
。
现在您需要激活新选项。您可以执行以下操作之一:
运行
setxkbmap -layout us -variant altgr-intl -option altgr:latch
以激活新选项,将us
和替换altgr-intl
为您的语言和变体。这将持续当前的 X 会话(对于测试有用),您可能希望将其添加到.xinitrc
,.xprofile
以便它在登录时自动加载。如果使用 systemd,请运行以更新
sudo localectl --no-convert set-x11-keymap us pc104 altgr-intl altgr:latch
您的键盘配置。/etc/X11/xorg.conf.d
如果使用桌面环境,可能有一种方法可以告诉它在加载键盘布局时激活该选项。我知道 GNOME 使用 dconf 并且您可以在
org.gnome.desktop.input-sources.xkb-options
.
警告
中的 XKB 文件/usr/share/X11/xkb
并不意味着可以直接编辑,并且在执行系统更新时可能会被覆盖。更改 XKB 配置的“正确方法”是太复杂了我建议您只需创建一个脚本,在需要时(重新)应用新选项。