重新映射 MS Sculpt Comfort Mouse 上的 Windows 键

重新映射 MS Sculpt Comfort Mouse 上的 Windows 键

我想将 MS Sculpt Comfort Mouse 上的“Windows 按钮”重新映射到我的 Linux 机器(Linux Mint 18.2“Sonya”)上的另一个按钮(例如“返回”按钮)。

根据xinput list,鼠标被识别为指针设备(id=12)。

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Microsoft Sculpt Comfort Mouse            id=12   [slave  pointer  (2)]
⎜   ↳ FocalTechPS/2 FocalTech FocalTech Touchpad    id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Chicony USB Keyboard                      id=9    [slave  keyboard (3)]
    ↳ Chicony USB Keyboard                      id=10   [slave  keyboard (3)]
    ↳ USB2.0 UVC HD Webcam                      id=11   [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=13   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]

根据鼠标上按下“Windows 按钮”时产生的键(键码 133)xinput test 12Super_L

key press   133 
key release 133 

现在,我需要将此特定设备的按键重新映射到另一个按键。我将使用setxkbmap工具(在如何在 Linux 下为特定键盘重新映射按键)。

我的脚本如下:

remote_id=$(
    xinput list | sed -n 's/.*Microsoft Sculpt Comfort Mouse.*id=\([0-9]*\).*/\1/p'
)
[ "$remote_id" ] || exit

# remap Windows button on MS Sculpt Mouse to Back button

mkdir -p /tmp/xkb/symbols
cat >/tmp/xkb/symbols/custom <<\EOF
xkb_symbols "remote" {
    key <LWIN> { [ XF86Back ]        };
};
EOF

setxkbmap -device $remote_id -print | sed 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' | xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null

我也尝试过类似的方法重新映射/更改辅助/USB 键盘键。尝试交换代码,例如<LWIN><VOL+>。但没有成功,鼠标的 Windows 键仍然被解释为 Windows 键。

然后,我尝试使用第二种方法(纯 )重新映射 USB 键盘(id=9)上的 Windows 键(与 交换),xkbcomp并且成功了,但也以同样的方式改变了鼠标按钮的行为(无论鼠标按钮是如何映射的)。奇怪的是,当我按下笔记本电脑内置键盘(未重新映射)上的 Windows 按钮,然后按下鼠标上的 Windows 按钮时,它会被解释为 Windows 按钮。当我按下 USB 键盘(重新映射到 VOL+)上的 Windows 按钮,然后按下鼠标上的 Windows 按钮时,它会被解释为 VOL+。可能与错误 91571 - 通过 xkbcomp 设置的 xkb 似乎不适用于 -i(或者在通用设备上使用时不起作用)

不幸的是,我无法为特定设备重新映射按钮。

1) 该xkbcomp工具是否只能与“从属键盘”设备配合使用?(不能与“从属指针”配合使用)

2)有没有办法将该鼠标视为“从属键盘”?

3) 或者是否有其他方法可以仅为该特定设备重新映射“Windows 按钮”(而不是主 USB 键盘)?

答案1

回答我自己的问题 #3:udev 可以做到。我的/etc/udev/hwdb.d/10-ms-sculpt-back.hwdb文件:

# remap MS Sculpt Comfort Mouse (Bluetooth) Windows key to Back key
evdev:input:b0005v045Ep07A2*
 KEYBOARD_KEY_700e3=back

谢谢将扫描码映射到键码如何找到通用输入设备的.hwdb 头?

相关内容