LINUX.ORG.RU

Сделать кнопку Windows на мышке кнопкой назад

 , ,


2

1

Есть клава с мышкой Microsoft Sculpt Comfort Desktop с одним ресивером на двоих.

На мышке есть кнопка «Windows», которая вызывает меню Пуск

Я её хочу сделать клавишей назад

Я пробовал прописать в `/etc/udev/hwdb.d/10-ms-sculpt-back.hwdb`

# remap MS Sculpt Comfort Mouse Windows key to Back key
evdev:input:b0003v045Ep07B2*
 KEYBOARD_KEY_700e05ce0dc=back

Проблема в том, что я не знаю правильно ли я определил b0003v045Ep07B2 и KEYBOARD_KEY_700e05ce0dc (пробовал и KEYBOARD_KEY_700e0 KEYBOARD_KEY_700dc и так далее)

Основывался на этом вопросе/ответе, но в точности как там не работает https://superuser.com/questions/1238269/remap-windows-key-on-ms-sculpt-comfor... Возможно ревизия другая

showkey --scancodes выдаёт такую последовательность:

    0xe0 0x5c 
    0xe0 0xdc

Далее:

  • xinput --list
  • lsusb
  • find /sys -name *modalias | xargs grep -i 045E
  • find /sys -name *modalias | xargs grep -i 07B2
    $ xinput --list
    ⎡ Virtual core pointer                      id=2    [master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ⎜   ↳ DELL07FA:00 06CB:7E92 Touchpad            id=15   [slave  pointer  (2)]
    ⎜   ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=14   [slave  pointer  (2)]
    ⎜   ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=13   [slave  pointer  (2)]
    ⎜   ↳ SynPS/2 Synaptics TouchPad                id=18   [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)]
        ↳ Video Bus                                 id=8    [slave  keyboard (3)]
        ↳ Sleep Button                              id=10   [slave  keyboard (3)]
        ↳ Power Button                              id=9    [slave  keyboard (3)]
        ↳ Integrated_Webcam_HD                      id=11   [slave  keyboard (3)]
        ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=12   [slave  keyboard (3)]
        ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=20   [slave  keyboard (3)]
        ↳ Intel HID events                          id=16   [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=17   [slave  keyboard (3)]
        ↳ Dell WMI hotkeys                          id=19   [slave  keyboard (3)]

    # lsusb
    Bus 002 Device 002: ID 174c:5106 ASMedia Technology Inc. ASM1051 SATA 3Gb/s bridge
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 004: ID 27c6:5301  
    Bus 001 Device 003: ID 8087:0a2b Intel Corp. 
    Bus 001 Device 002: ID 045e:07b2 Microsoft Corp. 
    Bus 001 Device 005: ID 0c45:6718 Microdia 
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    notebook ~ # find /sys -name *modalias | xargs grep -i 045E
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/modalias:hid:b0003g0001v0000045Ep000007B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/input/input7/modalias:input:b0003v045Ep07B2e0111-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc01ip01in00
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc01ip02in01
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:045E:07B2.0002/modalias:hid:b0003g0001v0000045Ep000007B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:045E:07B2.0002/input/input8/modalias:input:b0003v045Ep07B2e0111-e0,1,2,4,k110,111,112,113,114,r0,1,6,7,8,am4,lsfw
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:045E:07B2.0003/modalias:hid:b0003g0001v0000045Ep000007B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:045E:07B2.0003/input/input9/modalias:input:b0003v045Ep07B2e0111-e0,1,2,3,4,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8E,8F,90,94,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,CE,CF,D0,D1,D2,D4,D8,D9,DB,DF,E0,E1,E4,E7,E8,E9,EA,EB,F0,F1,F4,100,161,162,164,166,16A,16E,172,174,176,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B6,1B7,1BA,240,241,242,243,244,245,246,250,251,260,261,262,263,264,265,r6,a20,28,m4,lsfw
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc00ip00in02
    grep: /sys/devices/platform/Fixed: No such file or directory
    grep: MDIO: No such file or directory
    grep: bus.0/modalias: No such file or directory


    notebook ~ # find /sys -name *modalias | xargs grep -i 07B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/modalias:hid:b0003g0001v0000045Ep000007B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/input/input7/modalias:input:b0003v045Ep07B2e0111-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc01ip01in00
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc01ip02in01
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:045E:07B2.0002/modalias:hid:b0003g0001v0000045Ep000007B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:045E:07B2.0002/input/input8/modalias:input:b0003v045Ep07B2e0111-e0,1,2,4,k110,111,112,113,114,r0,1,6,7,8,am4,lsfw
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:045E:07B2.0003/modalias:hid:b0003g0001v0000045Ep000007B2
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:045E:07B2.0003/input/input9/modalias:input:b0003v045Ep07B2e0111-e0,1,2,3,4,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8E,8F,90,94,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,CE,CF,D0,D1,D2,D4,D8,D9,DB,DF,E0,E1,E4,E7,E8,E9,EA,EB,F0,F1,F4,100,161,162,164,166,16A,16E,172,174,176,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B6,1B7,1BA,240,241,242,243,244,245,246,250,251,260,261,262,263,264,265,r6,a20,28,m4,lsfw
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc00ip00in02
    grep: /sys/devices/platform/Fixed: No such file or directory
    grep: MDIO: No such file or directory
    grep: bus.0/modalias: No such file or directory


Последнее исправление: nleo (всего исправлений: 1)

Скорее всего сканкод неправильный, возможно должен быть 700e3.

For USB keyboards, it is apparently necessary to use evtest from the evtest package instead of showkey

с одним ресивером на двоих

Наверное надо к evdev:input:b0003v045Ep07B2 дописать ещё что-то, чтобы отличать кнопку мыши от кнопки клавиатуры.

anonymous
()
Ответ на: комментарий от anonymous
# evtest 
/dev/input/event5:	Microsoft Microsoft® 2.4GHz Transceiver v8.0
/dev/input/event6:	Microsoft Microsoft® 2.4GHz Transceiver v8.0
/dev/input/event7:	Microsoft Microsoft® 2.4GHz Transceiver v8.0

event5 - клава event6 - мышь

Когда жму кнопку на мышке событие происходит на клавиатуре

Testing ... (interrupt to exit)
Event: time 1519017572.445162, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1519017572.445162, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e7
Event: time 1519017572.445162, type 1 (EV_KEY), code 126 (KEY_RIGHTMETA), value 1
Event: time 1519017572.445162, -------------- SYN_REPORT ------------
Event: time 1519017572.589156, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e7
Event: time 1519017572.589156, type 1 (EV_KEY), code 126 (KEY_RIGHTMETA), value 0
Event: time 1519017572.589156, -------------- SYN_REPORT ------------

Попробовал так:

# remap MS Sculpt Comfort Mouse Windows key to Back key
evdev:input:b0003g0001v0000045Ep000007B2*
 KEYBOARD_KEY_700e7=back

Но не прокатило

udevadm info /dev/input/event5
P: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/input/input7/event5
N: input/event5
S: input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v8.0-event-if00
S: input/by-path/pci-0000:00:14.0-usb-0:2:1.0-event
E: BACKSPACE=guess
E: DEVLINKS=/dev/input/by-path/pci-0000:00:14.0-usb-0:2:1.0-event /dev/input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v8.0-event-if00
E: DEVNAME=/dev/input/event5
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/input/input7/event5
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_MODEL=Microsoft®_2.4GHz_Transceiver_v8.0
E: ID_MODEL_ENC=Microsoft®\x202.4GHz\x20Transceiver\x20v8.0
E: ID_MODEL_ID=07b2
E: ID_PATH=pci-0000:00:14.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0
E: ID_REVISION=0746
E: ID_SERIAL=Microsoft_Microsoft®_2.4GHz_Transceiver_v8.0
E: ID_TYPE=hid
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030101:030102:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Microsoft
E: ID_VENDOR_ENC=Microsoft
E: ID_VENDOR_ID=045e
E: LIBINPUT_DEVICE_GROUP=3/45e/7b2/111:usb-0000:00:14.0-2
E: MAJOR=13
E: MINOR=69
E: SUBSYSTEM=input
E: USEC_INITIALIZED=1524194
E: XKBLAYOUT=us,ru
E: XKBMODEL=pc105
E: XKBOPTIONS=grp:alt_shift_toggle,grp_led:scroll
E: XKBVARIANT=,

find /sys -name *modalias | xargs grep -i 07B2
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/modalias:hid:b0003g0001v0000045Ep000007B2
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:045E:07B2.0001/input/input7/modalias:input:b0003v045Ep07B2e0111-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,9E,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc01ip01in00
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc01ip02in01
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:045E:07B2.0002/modalias:hid:b0003g0001v0000045Ep000007B2
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:045E:07B2.0002/input/input8/modalias:input:b0003v045Ep07B2e0111-e0,1,2,4,k110,111,112,113,114,r0,1,6,7,8,am4,lsfw
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:045E:07B2.0003/modalias:hid:b0003g0001v0000045Ep000007B2
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:045E:07B2.0003/input/input9/modalias:input:b0003v045Ep07B2e0111-e0,1,2,3,4,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8E,8F,90,94,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,CE,CF,D0,D1,D2,D4,D8,D9,DB,DF,E0,E1,E4,E7,E8,E9,EA,EB,F0,F1,F4,100,161,162,164,166,16A,16E,172,174,176,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B6,1B7,1BA,240,241,242,243,244,245,246,250,251,260,261,262,263,264,265,r6,a20,28,m4,lsfw
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/modalias:usb:v045Ep07B2d0746dc00dsc00dp00ic03isc00ip00in02
nleo
() автор топика
Ответ на: комментарий от nleo

Попробовал так ... evdev:input:b0003g0001v0000045Ep000007B2*

Не факт, что udev (systemd) понимает восьмизначные значения VID, PID. В /usr/lib/udev/hwdb.d/60-keyboard.hwdb написано только про такие варианты:

# Supported hardware matches are:
#  - Generic input devices match:
#      evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV
#    This matches on the kernel modalias of the input-device, mainly:
#    ZZZZ is the bus-id (see /usr/include/linux/input.h BUS_*), YYYY, XXXX and
#    WWW are the 4-digit hex uppercase vendor, product and version ID and VVVV
#    is an arbitrary length input-modalias describing the device capabilities.
#    The vendor, product and version ID for a device node "eventX" is listed
#    in /sys/class/input/eventX/device/id.
#
#  - AT keyboard DMI data matches:
#      evdev:atkbd:dmi:bvn*:bvr*:bd*:svn<vendor>:pn<product>:pvr*
...
#  - Input driver device name and DMI data match:
#      evdev:name:<input device name>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
...
#  - Extended input driver device name, properties and DMI data match:
#      evdev:name:<input device name>:phys:<phys>:ev:<ev>:dmi:bvn*:bvr*:bd*:svn<vendor>:pn*
...

Когда жму кнопку на мышке событие происходит на клавиатуре

Возможно, что этим само устройство управляет, в таком случае, невозможно будет отличить кнопку на мышке от кнопки на клавиатуре. Но это не точно. С другой стороны, KEY_RIGHTMETA может отсутствовать на клавиатуре.

После изменения правила, нужно обновить и перезагрузить hwdb: systemd-hwdb update, udevadm trigger.

anonymous
()
Ответ на: комментарий от anonymous

Я делал так

udevadm hwdb --update; udevadm trigger

И даже перезагрузился - не помогло.

Да RIGHTMETA нету, а если бы и была - не жалко. Попозже ещё поиграюсь или погуглю может ещё есть способы/варианты на более высоком уровне RIGHTMETA переназначить

nleo
() автор топика
Ответ на: комментарий от nleo

Перезагружаться не нужно.

Попробовал сейчас для своей клавиатуры сделал правило:

$ cat /etc/udev/hwdb.d/test.hwdb 
evdev:input:b0003v046DpC318*-e0,1,2*
 KEYBOARD_KEY_c0192=c

Всё работает.

anonymous
()
Ответ на: комментарий от anonymous

Да работает, спасибо большое

evdev:input:b0003v045Ep07B2*
 KEYBOARD_KEY_700e7=back

id был не правильный. `b0003v045Ep07B2` - нужный

nleo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.