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)]
による xinput test 12
Super_L
キー(キーコード133)は、「Windowsボタン」がマウスで押されたときにマウスによって生成されます。
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キーとして解釈されます。
次に、2番目のアプローチ(純粋なxkbcomp
)を使用してUSBキーボード(id = 9)のWindowsキー(と交換)を再マッピングしようとしましたが、それは機能しましたが、マウスのボタンの動作も同じように変更されました(ボタンがマウスにどのようにマッピングされたかに関係なく)。奇妙なことに、ラップトップの内蔵キーボード(再マップされていない)のWindowsボタンを押してからマウスを押すと、Windowsボタンとして解釈されます。 USBキーボード(VOL +に再マップ)のWindowsボタンを押してからマウスを押すと、VOL +として解釈されます。 バグ91571に関連している可能性があります-xkbcompを介して設定されたxkbは-iに適用されないようです(または一般的なデバイスで使用されている場合は固定されません) 。
残念ながら、特定のデバイスに対してのみボタンを再マップすることはできません。
1)xkbcomp
ツールは「スレーブキーボード」デバイスでのみ正しく機能する可能性がありますか? (「スレーブポインタ」ではありません)
2)このマウスを「スレーブキーボード」として扱う方法はありますか?
3)または、この特定のデバイスのみ(メインUSBキーボードではない)の「Windowsボタン」を再マップする別の方法はありますか?
私自身の質問#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