我目前正在设置默认键盘布局,如下所示:
setxkbmap -layout us -variant dvorak -option ctrl:nocaps,[...]
它禁用大写锁定键并使其成为附加的 ctrl 键以及大量其他选项。
我想执行以下操作来切换键盘布局:
setxkbmap -layout us -variant dvorak-l -option ctrl:swapcaps
但是,它不会重新启用大写锁定键;据我所知,左控制键和大写锁定键都保留为控制键。
我知道我可以清除整个选项列表,但为了可维护性,我宁愿不复制粘贴选项。如何重新启用大写锁定?
更新:
使用 xev(1) 查看按键,看起来 ctrl:nocapsControl_L
为两个键都提供了 a ,而 ctrl:swapcaps “恢复”大写锁定键(按下该键给出Caps_Lock
)。但是,大写锁定 LED 既不亮也不实际工作。
查看xkeyboard-config/symbols/ctrl
X.org 源中的文件确实暗示了这个问题:
xkb_symbols "nocaps" {
replace key <CAPS> { [ Control_L, Control_L ] };
modifier_map Control { <CAPS>, <LCTL> };
};
xkb_symbols "swapcaps" {
replace key <CAPS> { [ Control_L ] };
replace key <LCTL> { [ Caps_Lock ] };
};
后一个选项缺少modifier_map行,无论它做什么
答案1
以下命令应该有效:
xmodmap -e 'keycode 0x42 = Caps_Lock'
或者
setxkbmap -option
上面的命令可以很好地恢复默认行为,幸运的是,我几乎不需要它。
我通常使用以下命令将大写锁定重新映射到 Control(幸运的是 VI/VIM 支持 CTRL-C 而不是 ESC):
setxkbmap -option ctrl:nocaps -layout gb
答案2
尝试setxkbmap -option -layout us -variant dvorak-l -option ctrl:swapcaps
从联机帮助页:
[...] If you want to
replace all previously specified options, use the -option flag
with an empty argument first.
讽刺的是,这里-option ctrl:swapcaps
实际上覆盖了-option ctrl:nocaps
——我猜行为改变了。
编辑:正如OP所说,他想要避免清除选项(如上述方式完成)。
/usr/share/X11/xkb/rules/xorg.lst
显示选项ctrl:aa_ctrl
(左下角的控件),它似乎在nocaps
此处之后重置大写锁定。
我想这值得一试,您还可以查看列表 ( grep ctrl\:
),看看是否还有其他可行的方法,以防万一这个不行。
如果没有这个选项,我想解决方案是通过再次将 Caps Lock 与 Caps Lock 键关联来破解当前的键盘映射(但我没有这方面的经验,除了相信有一个工具可以让你这样做与单行)。
答案3
有一个选项“caps:capslock”(映射到将“+capslock(capslock)”添加到 xkb_symbols)来启用大写锁定。
但是,添加了该选项(也许全部大写:xxxxx?)前现有的 ctrl:xxxxx ;由于 ctrl:swapcaps 重新定义了 capslock 键,因此该选项无效。
因此,您绝对需要删除所有选项并实际放置您想要的选项;选项存在的方式不应该撤消前一个选项的操作,并且存在冲突的选项(例如,两个(或多个)重新调整同一键)您无法定义它们的顺序。