首先,请原谅我对 X 和 XKB 的无知;我一直在尝试拼凑一个解决方案,希望能够在不需要详细掌握的情况下实现我想要的。
我正在尝试在 Ubuntu 12.04 上创建一个 XKB 键盘映射,它允许我规定两个 shift 键中的哪一个构成 Level2 修饰符。具体来说,4键应该只$在按住右移时产生 a ,而不是左移。
到目前为止我的阅读:
我试图定义一个自定义类型,然后在符号映射中明确引用它:
/usr/share/X11/xkb/types/mbfisher:
default xkb_types "mbfisher" {
type "RIGHT_SHIFT" {
modifiers = None+Shift_R;
map[None] = Level1;
map[Shift_R] = Level2;
};
}
Run Code Online (Sandbox Code Playgroud)
/usr/share/X11/xkb/symbols/mbfisher:
default
partial alphanumeric_keys
xkb_symbols "basic" {
name[Group1]= "mbfisher";
key <AE04> {
type= "RIGHT_SHIFT",
symbols[Group1]= [ 4, dollar ]
};
};
Run Code Online (Sandbox Code Playgroud)
然后我使用 Ubuntu 键盘布局 GUI 选择地图。
这显然会禁用除4键之外的字母数字键盘,但仍然可以使用任一 shift 键输入美元符号。
我意识到要写一个包含大量无用信息的大量问题,所以我会停在这里;请询问我遗漏的任何内容。
有任何想法吗?
这就是最终奏效的!我使用了xmodmapand 一个~/.Xmodmap文件而不是 xkb 配置。
~/.Xmodmap:
clear Shift
! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key
keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5
keysym Shift_R = Mode_switch
add Shift = Shift_L
Run Code Online (Sandbox Code Playgroud)
2 条注释行(以 开头!)显示了我更改之前和之后的列标题。这允许我将第 2 列指定为 Shift_L,将第 3 列指定为 Shift_R,因为我已将 shift_R 映射为 Mode_switch。
更改是通过运行以下命令进行的:
# setxkbmap us
# xmodmap ~/.Xmodmap
Run Code Online (Sandbox Code Playgroud)
setxkbmap us设置默认的美国地图,以便您从头开始工作,并将xmodmap自定义更改附加到其中。
实现后!,@、 、#、$和%字符只能用右 Shift 键输入,而^、&、*、(和)只能用左 Shift 键输入。
现在,我可以继续将键盘左侧的所有键映射为仅由右 Shift 键修改(即字母字符及其大写修改),反之亦然;这个解决方案意味着我只需要重新映射左侧。
一路上发现的其他有用的链接:
非常感谢@Trudbert 为我提供了大部分答案!