我使用丹麦和英语(美国)键盘布局,键盘采用北欧几何设计,这意味着它有小/大键。我休闲时使用丹麦布局,工作时使用英语(美国)。
我希望仅当我使用英语(美国)布局时,此键才为 Compose。
同样地,我希望在相同情况下 Caps Lock 和 Escape 可以互换。
也就是说,我需要将此功能切换为“概念上依赖于”键盘布局小部件的状态。这可能意味着我必须在 XKB 中执行某些操作。
这可能吗? 怎么做?
附加信息:
~$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules: evdev
model: pc105
layout: dk,us
variant: ,
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwerty)
types: complete
compat: complete
symbols: pc+dk+us:2+inet(evdev)
geometry: pc(pc105)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+dk+us:2+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
答案1
我无法帮助解决 xkb 问题,但您仍然可以更改xmodmap
保持兼容的映射。例如,如果我已使用 xkb 将键盘配置为:
setxkbmap -layout us,fr -option "grp:lctrl_lshift_toggle,compose:102"
然后我转储映射
xmodmap -pke | egrep -i 'less|greater|multi|caps|escape'
它列出了感兴趣的键码和键符号:
keycode 9 = Escape NoSymbol Escape
keycode 59 = comma less semicolon period horizconnector multiply
keycode 60 = period greater colon slash periodcentered division
keycode 66 = Caps_Lock NoSymbol Caps_Lock
keycode 94 = Multi_key Multi_key Multi_key Multi_key
...
我可以简单地移动要更改的键的列并为其设置新的映射。您可以通过查看字母键(如“w”)的键码来猜测这些列的用途:
keycode 25 = w W z Z guillemotleft less
这一行中的列似乎是:us、us-shift、fr、fr-shift、fr-altgr、fr-altgr-shift。
因此,键码 9 的第 1 列中的 Escape 适用于我的键盘我们模式。如果我想在 Caps_Lock 中我们我做的模式:
xmodmap -e 'keycode 9 = Caps_Lock NoSymbol Escape'
更改应立即生效。尝试完所有更改后,将所有新的“keycode =”行放入一个文件中,并xmodmap -
在每次登录时将其输入到管道中。