Я хотел бы переназначить "кнопку Windows" на MS Sculpt Comfort Mouse на другую кнопку (например, кнопку "Назад") на моем компьютере с 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
Я также попробовал аналогичный подход, описанный в Remap/ изменить ваши вторичные / USB-клавиатуры. Пытался поменять коды например. для <LWIN>
и <VOL+>
. Но безуспешно, клавиша Windows мыши все равно интерпретируется как клавиша Windows
Затем я попытался переназначить клавишу Windows (поменять местами) на клавиатуре USB (id = 9), используя второй подход (чистый xkbcomp
), и это сработало, НО также изменил поведение кнопки мыши аналогичным образом (независимо от того, как была кнопка отображается для мыши). Странно то, что когда я нажимаю кнопку Windows на встроенной клавиатуре ноутбука (не переназначается), а затем на мыши, она интерпретируется как кнопка Windows. Когда я нажимаю кнопку Windows на клавиатуре USB (переназначается на VOL+), а затем на мышь, она интерпретируется как VOL+. Может быть связано с ошибкой 91571 - xkb, установленный через xkbcomp, похоже, не применяется к -i (или не привязывается, если используется на обычном устройстве).
К сожалению, я не могу переназначить кнопку только для конкретного устройства.
1) Может ли инструмент xkbcomp
корректно работать только с устройствами «подчиненная клавиатура»? (Не с указателем раба)
2) Есть ли способ рассматривать эту мышь как «подчиненную клавиатуру»?
3) Или есть другой способ переназначить «кнопку Windows» только для этого конкретного устройства (а не для основной клавиатуры USB)?