Переназначить Windows ключ на MS Sculpt Comfort Mouse

1088
Pavel Kriz

Я хотел бы переназначить «кнопку 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)?

0

1 ответ на вопрос

1
Pavel Kriz

Отвечая на мой собственный вопрос № 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 обычного устройства ввода?

Похожие вопросы