如何分别映射左右 shift 键?

mbf*_*her 11 linux keyboard

首先,请原谅我对 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 键输入美元符号。

我意识到要写一个包含大量无用信息的大量问题,所以我会停在这里;请询问我遗漏的任何内容。

有任何想法吗?

mbf*_*her 3

这就是最终奏效的!我使用了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 为我提供了大部分答案!