Meu teclado identifica como um mouse

1

Meu teclado sem fio Logitech Wave se apresenta como dois dispositivos para o kernel. Um é um teclado normal que funciona bem, mas todas as teclas adicionais aparecem como um mouse de evento, tal que

cat /dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse

produz o lixo esperado quando os botões são pressionados, mas xev não registra nada. Eu tentei hidpoint que não quer correr em OpenSuse Tumbleweed, e eu tentei %código% nos parâmetros do kernel para forçar o reconhecimento de 'multi-identidade', mas eu estou fora da minha profundidade neste momento, então pode não entender corretamente o que estou fazendo

Alguma sugestão sobre como melhor persuadir o kernel a reconhecer o dispositivo extra como um teclado em vez de um mouse?

Mais informações conforme solicitado:

lsusb: usbhid.quirks=0x46d:0xc517:0x40

dmsg: Bus 001 Device 007: ID 046d:c517 Logitech, Inc. LX710 Cordless Desktop Laser

$ evtest /dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse > evtestdump

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc517 version 0x110
Input device name: "Logitech USB Receiver"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 28 (KEY_ENTER)
    Event code 74 (KEY_KPMINUS)
    Event code 78 (KEY_KPPLUS)
    Event code 103 (KEY_UP)
...
    Event code 241 (KEY_VIDEO_NEXT)
    Event code 244 (KEY_BRIGHTNESS_ZERO)
    Event code 256 (BTN_0)
    Event code 272 (BTN_LEFT)
    Event code 273 (BTN_RIGHT)
    Event code 274 (BTN_MIDDLE)
    Event code 275 (BTN_SIDE)
    Event code 276 (BTN_EXTRA)
    Event code 277 (BTN_FORWARD)
    Event code 278 (BTN_BACK)
    Event code 279 (BTN_TASK)
    Event code 352 (KEY_OK)
    Event code 353 (KEY_SELECT)
    Event code 354 (KEY_GOTO)
    Event code 358 (KEY_INFO)
    Event code 362 (KEY_PROGRAM)
    Event code 366 (KEY_PVR)
    Event code 370 (KEY_SUBTITLE)
    Event code 371 (KEY_ANGLE)
    Event code 372 (KEY_ZOOM)
    Event code 374 (KEY_KEYBOARD)
    Event code 376 (KEY_PC)
    Event code 377 (KEY_TV)
    Event code 378 (KEY_TV2)
...
    Event code 431 (KEY_DISPLAYTOGGLE)
    Event code 432 (KEY_SPELLCHECK)
    Event code 433 (KEY_LOGOFF)
    Event code 439 (KEY_MEDIA_REPEAT)
    Event code 442 (KEY_IMAGES)
    Event code 478 (KEY_FN_1)
    Event code 479 (KEY_FN_2)
    Event code 576 (KEY_BUTTONCONFIG)
    Event code 577 (KEY_TASKMANAGER)
    Event code 578 (KEY_JOURNAL)
    Event code 579 (KEY_CONTROLPANEL)
    Event code 580 (KEY_APPSELECT)
    Event code 581 (KEY_SCREENSAVER)
    Event code 582 (KEY_VOICECOMMAND)
    Event code 592 (KEY_BRIGHTNESS_MIN)
    Event code 593 (KEY_BRIGHTNESS_MAX)
    Event code 608 (KEY_KBDINPUTASSIST_PREV)
    Event code 609 (KEY_KBDINPUTASSIST_NEXT)
    Event code 610 (KEY_KBDINPUTASSIST_PREVGROUP)
    Event code 611 (KEY_KBDINPUTASSIST_NEXTGROUP)
    Event code 612 (KEY_KBDINPUTASSIST_ACCEPT)
    Event code 613 (KEY_KBDINPUTASSIST_CANCEL)
  Event type 2 (EV_REL)
    Event code 0 (REL_X)
    Event code 1 (REL_Y)
    Event code 6 (REL_HWHEEL)
    Event code 7 (REL_DIAL)
    Event code 8 (REL_WHEEL)
  Event type 3 (EV_ABS)
    Event code 32 (ABS_VOLUME)
      Value      0
      Min        1
      Max     4173
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1498324926.500910, type 4 (EV_MSC), code 4 (MSC_SCAN), value c101c
Event: time 1498324926.500910, type 1 (EV_KEY), code 154 (KEY_CYCLEWINDOWS), value 1
Event: time 1498324926.500910, -------------- SYN_REPORT ------------
Event: time 1498324926.644944, type 4 (EV_MSC), code 4 (MSC_SCAN), value c101c
Event: time 1498324926.644944, type 1 (EV_KEY), code 154 (KEY_CYCLEWINDOWS), value 0
Event: time 1498324926.644944, -------------- SYN_REPORT ------------
Event: time 1498324926.932933, type 4 (EV_MSC), code 4 (MSC_SCAN), value c101f
Event: time 1498324926.932933, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 1
Event: time 1498324926.932933, -------------- SYN_REPORT ------------
Event: time 1498324927.052921, type 4 (EV_MSC), code 4 (MSC_SCAN), value c101f
Event: time 1498324927.052921, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 0
Event: time 1498324927.052921, -------------- SYN_REPORT ------------
Event: time 1498324927.396932, type 4 (EV_MSC), code 4 (MSC_SCAN), value c1020
Event: time 1498324927.396932, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1
Event: time 1498324927.396932, -------------- SYN_REPORT ------------
Event: time 1498324927.548930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c1020
Event: time 1498324927.548930, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 0
Event: time 1498324927.548930, -------------- SYN_REPORT ------------
Event: time 1498324927.916944, type 4 (EV_MSC), code 4 (MSC_SCAN), value c103d
Event: time 1498324927.916944, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 1
Event: time 1498324927.916944, -------------- SYN_REPORT ------------
Event: time 1498324928.084925, type 4 (EV_MSC), code 4 (MSC_SCAN), value c103d
Event: time 1498324928.084925, type 1 (EV_KEY), code 240 (KEY_UNKNOWN), value 0
Event: time 1498324928.084925, -------------- SYN_REPORT ------------
Event: time 1498324928.460914, type 4 (EV_MSC), code 4 (MSC_SCAN), value c1005
Event: time 1498324928.460914, type 1 (EV_KEY), code 212 (KEY_CAMERA), value 1
Event: time 1498324928.460914, -------------- SYN_REPORT ------------
Event: time 1498324928.628903, type 4 (EV_MSC), code 4 (MSC_SCAN), value c1005
Event: time 1498324928.628903, type 1 (EV_KEY), code 212 (KEY_CAMERA), value 0
Event: time 1498324928.628903, -------------- SYN_REPORT ------------
Event: time 1498324930.876924, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b6
Event: time 1498324930.876924, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 1
Event: time 1498324930.876924, -------------- SYN_REPORT ------------
Event: time 1498324930.908915, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b6
Event: time 1498324930.908915, type 1 (EV_KEY), code 165 (KEY_PREVIOUSSONG), value 0
Event: time 1498324930.908915, -------------- SYN_REPORT ------------
Event: time 1498324931.684927, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b5
Event: time 1498324931.684927, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
Event: time 1498324931.684927, -------------- SYN_REPORT ------------
Event: time 1498324931.724935, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b5
Event: time 1498324931.724935, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 0
Event: time 1498324931.724935, -------------- SYN_REPORT ------------
Event: time 1498324932.652916, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0183
Event: time 1498324932.652916, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 1
Event: time 1498324932.652916, -------------- SYN_REPORT ------------
Event: time 1498324932.812954, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0183
Event: time 1498324932.812954, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 0
Event: time 1498324932.812954, -------------- SYN_REPORT ------------
Event: time 1498324933.748907, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0192
Event: time 1498324933.748907, type 1 (EV_KEY), code 140 (KEY_CALC), value 1
Event: time 1498324933.748907, -------------- SYN_REPORT ------------
Event: time 1498324933.884934, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0192
Event: time 1498324933.884934, type 1 (EV_KEY), code 140 (KEY_CALC), value 0
Event: time 1498324933.884934, -------------- SYN_REPORT ------------
Event: time 1498324938.084936, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082
Event: time 1498324938.084936, type 1 (EV_KEY), code 142 (KEY_SLEEP), value 1
Event: time 1498324938.084936, -------------- SYN_REPORT ------------
Event: time 1498324938.100912, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082
Event: time 1498324938.100912, type 1 (EV_KEY), code 142 (KEY_SLEEP), value 0
Event: time 1498324938.100912, -------------- SYN_REPORT ------------

(II) config/udev: Adding input device Logitech USB Receiver (/dev/input/mouse1)
(**) Logitech USB Receiver: Applying InputClass "system-keyboard"
(**) Logitech USB Receiver: Applying InputClass "Logitech USB TrackBall"
(**) Logitech USB Receiver: Applying InputClass "Logitech M570 Trackball"
(II) Using input driver 'evdev' for 'Logitech USB Receiver'
(**) Option "SendCoreEvents" "true"
(**) Logitech USB Receiver: always reports core events
(**) evdev: Logitech USB Receiver: Device: "/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse"
(WW) evdev: Logitech USB Receiver: device file is duplicate. Ignoring.
(EE) PreInit returned 8 for "Logitech USB Receiver"
(II) UnloadModule: "evdev"
(II) config/udev: Adding input device Logitech USB Receiver (/dev/input/event11)
(**) Logitech USB Receiver: Applying InputClass "evdev keyboard catchall"
(**) Logitech USB Receiver: Applying InputClass "system-keyboard"
(**) Logitech USB Receiver: Applying InputClass "evdev keyboard catchall"
(**) Logitech USB Receiver: Applying InputClass "libinput keyboard catchall"
(II) Using input driver 'libinput' for 'Logitech USB Receiver'
(**) Logitech USB Receiver: always reports core events
(**) Option "Device" "/dev/input/event11"
(**) Option "_source" "server/udev"
(II) event11 - (II) Logitech USB Receiver: (II) is tagged by udev as: Keyboard
(II) event11 - (II) Logitech USB Receiver: (II) device is a keyboard
(II) event11 - (II) Logitech USB Receiver: (II) device removed
(**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/0003:046D:C517.000D/input/input18/event11"
(II) XINPUT: Adding extended input device "Logitech USB Receiver" (type: KEYBOARD, id 11)
(**) Option "xkb_model" "microsoftpro"
(**) Option "xkb_layout" "gb"
(**) Option "xkb_options" "terminate:ctrl_alt_bksp"
(II) event11 - (II) Logitech USB Receiver: (II) is tagged by udev as: Keyboard
(II) event11 - (II) Logitech USB Receiver: (II) device is a keyboard
(II) config/udev: Adding input device Logitech USB Receiver (/dev/input/event12)
(**) Logitech USB Receiver: Applying InputClass "evdev pointer catchall"
(**) Logitech USB Receiver: Applying InputClass "evdev keyboard catchall"
(**) Logitech USB Receiver: Applying InputClass "system-keyboard"
(**) Logitech USB Receiver: Applying InputClass "evdev pointer catchall"
(**) Logitech USB Receiver: Applying InputClass "evdev keyboard catchall"
(**) Logitech USB Receiver: Applying InputClass "Logitech USB TrackBall"
(**) Logitech USB Receiver: Applying InputClass "Logitech M570 Trackball"
(**) Logitech USB Receiver: Applying InputClass "libinput pointer catchall"
(**) Logitech USB Receiver: Applying InputClass "libinput keyboard catchall"
(II) Using input driver 'libinput' for 'Logitech USB Receiver'
(**) Option "SendCoreEvents" "true"
(**) Logitech USB Receiver: always reports core events
(**) Option "Device" "/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse"
(**) Option "_source" "server/udev"
(EE) Failed to look up path '/dev/input/event13'
(II) event13: opening input device '/dev/input/event13' failed (No such device).
(II) event13 - failed to create input device '/dev/input/event13'.
(EE) libinput: Logitech USB Receiver: Failed to create a device for /dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse
(EE) PreInit returned 2 for "Logitech USB Receiver"
(II) UnloadModule: "libinput"

Eu também tenho um trackball M570 que o receptor está obviamente conectando, embora já esteja conectado através de um receptor universal.

    
por DrMac 24.06.2017 / 11:28

2 respostas

1

Resposta parcial: como obter mais informações

1) Atualize a questão com lsusb para que possamos ver o fornecedor e o código do dispositivo.

2) Atualize a pergunta com dmesg output quando o combo for reconhecido. Desconecte e reconecte o dongle para forçar um novo reconhecimento se você não puder encontrá-lo nas mensagens de inicialização.

3) Execute evtest como root no dispositivo de entrada do mouse para ver (a) quais eventos ele alega produzir (b) quais eventos reais ele produz quando você pressiona as teclas adicionais. Atualize a pergunta com essa saída.

4) Olhe em /var/log/Xorg.0.log para ver como dispositivo o driver evdev que ele reconhece. Atualize a pergunta com linhas relevantes.

Isso deve permitir, pelo menos, identificar o motivo pelo qual o dispositivo é reconhecido como mouse.

Editar

Eu não entendo como o driver Logitech é supostamente funcionar, mas o que acontece é que o segundo dispositivo parece ser de fato reservado para chaves extras e para o eventos de mouse ( EV_REL ), então talvez seja algum tipo de coisa interessante.

Do lado do kernel que não faz diferença, todo o kernel sabe que ele traduz eventos USB HID para entrada de eventos. E udev faz ligações simbólicas com nomes enganosos, mas isso também não importa. O que importa é que o X parece decidir que o segundo dispositivo de entrada é duplicado (talvez porque tenha o mesmo nome). Então, eu tentaria criar uma seção xorg.conf com InputClass e brincar com várias opções na esperança de fazer com que o X aceitasse o dispositivo. Eu não tenho certeza porque X rejeita, então eu não posso dar instruções passo-a-passo. Veja man xorg.conf sobre opções para InputClass e pesquise um pouco no Google para entender o que eles fazem se a descrição não for suficiente, há muitos guias.

Além de verificar o log X, também veja quais dispositivos xinput lista. É o suficiente para aparecer na lista, mesmo que apareça como mouse - você pode reatribuí-lo ao Virtual core keyboard . E será provavelmente detectado como mouse, porque X pensa (provavelmente corretamente na maioria dos casos) que algo com EV_REL eventos deve ser como mouse, mesmo se ele tiver botões EV_KEY adicionais.

    
por 24.06.2017 / 13:54
0

A identificação como um rato, estranhamente, acabou por não ser a parte mais complicada para que isso funcionasse. Isso é tudo o que preciso em xorg.con

Section "InputClass"
        Identifier      "Wave keyboard extra keys"
        MatchUSBID      "046d:c517"
        MatchIsPointer  "on"
        Driver          "evdev"
        Option          "SendCoreEvents"        "true"
        Option          "Buttons"               "27"
        Option          "Device" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse"
EndSection

O problema é que muitas das chaves acabam por emitir códigos de teclas muito altos para o xorg / evdev ouvir (scancode > 255) A solução que encontrei é evrouter , usando esta configuração:

"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/418 "XKey/XF86RotateWindows"
"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/419 "XKey/XF86Game"
"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/421 "Xkey/XF86Launch7"
"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/423 "Xkey/XF86Launch8"
"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/397 "Xkey/XF86Launch9"
"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/430 "Xkey/XF86Messenger"
"Logitech USB Receiver" "/dev/input/by-id/usb-Logitech_USB_Receiver-if01-event-mouse" none key/136 "Xkey/XF86Search"

Obviamente, os mapeamentos Xkey no final de cada linha podem ser ajustados a gosto. Uma tecla aparece não mapeável - esta é a grande chave esquerda superior esquerda com uma engrenagem e uma janela; isso não gera um scancode significativo, então acho que nunca funcionará. O único outro problema, então, é que o Media Center e (adjacente) a tecla 'music notes' emitem o mesmo código de varredura, então eles sempre se duplicarão e parecerão ser a mesma chave. Fora isso, todas as teclas Fn e as teclas de mídia funcionam como esperado, ou após uma curta viagem à configuração de atalhos de teclado do seu desktop.

    
por 16.10.2017 / 22:30