O que eu preciso configurar se um dispositivo de entrada estiver conectado através de um comutador KVM?

8

Eu tenho um switch KVM do meu empregador (Aten CS782DP), que funciona bem, tanto quanto eu posso dizer. No entanto, parece estar causando um problema com o meu dispositivo de entrada (Thinkpad USB Compact Keyboard com TrackPoint) no Ubuntu 16.04 e 16.10. Não consigo mais clicar com o botão do meio e nem posso rolar verticalmente (horizontalmente funciona bem).

Em particular, é assim que xinput output aparece quando o teclado é conectado diretamente:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=14   [slave  pointer  (2)]
⎜   ↳ Lenovo ThinkPad Compact USB Keyboard with TrackPoint  id=10   [slave  pointer  (2)]
⎜   ↳ ATEN KVM V1.1.104                         id=17   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=13   [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)]
    ↳ Integrated Camera                         id=11   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=15   [slave  keyboard (3)]
    ↳ Lenovo ThinkPad Compact USB Keyboard with TrackPoint  id=9    [slave  keyboard (3)]
    ↳ ATEN KVM V1.1.104                         id=16   [slave  keyboard (3)]

É assim que a saída xinput se parece quando conectada ao KVM:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=14   [slave  pointer  (2)]
⎜   ↳ Lenovo ThinkPad Compact USB Keyboard with TrackPoint  id=9    [slave  pointer  (2)]
⎜   ↳ Lenovo ThinkPad Compact USB Keyboard with TrackPoint  id=16   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=13   [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)]
    ↳ Integrated Camera                         id=11   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=15   [slave  keyboard (3)]
    ↳ Lenovo ThinkPad Compact USB Keyboard with TrackPoint  id=10   [slave  keyboard (3)]

Tanto quanto eu posso ver, isso também parece bem, exceto pela estranha duplicação do dispositivo apontador (IDs 9 e 16). Eu vou assumir que isso tem a ver com o KVM ser um pouco como hub USB e ignorar essa duplicação por enquanto.

Eu tentei executar xinput test para os dois dispositivos e descobri que o primeiro dispositivo aceita movimento e cliques esquerdo e direito (botão 1 e 3 do mouse), enquanto o segundo dispositivo apenas rola horizontalmente (botão 6 e 7). Não aceita o botão do meio (botão 2) ou a rolagem vertical (botões 4 e 5).

A saída de xinput list-props parece idêntica para os dois dispositivos:

Device 'Lenovo ThinkPad Compact USB Keyboard with TrackPoint':
    Device Enabled (152):   1
    Coordinate Transformation Matrix (154): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (284): 0
    Device Accel Constant Deceleration (285):   1.000000
    Device Accel Adaptive Deceleration (286):   1.000000
    Device Accel Velocity Scaling (287):    10.000000
    Device Product ID (272):    6127, 24647
    Device Node (273):  "/dev/input/event17"
    Evdev Axis Inversion (288): 0, 0
    Evdev Axes Swap (290):  0
    Axis Labels (291):  "Rel X" (162), "Rel Y" (163), "Rel Horiz Wheel" (282), "Rel Vert Wheel" (283)
    Button Labels (292):    "Button Left" (155), "Button Middle" (156), "Button Right" (157), "Button Wheel Up" (158), "Button Wheel Down" (159), "Button Horiz Wheel Left" (160), "Button Horiz Wheel Right" (161), "Button Side" (280), "Button Extra" (281), "Button Unknown" (275), "Button Unknown" (275), "Button Unknown" (275), "Button Unknown" (275)
    Evdev Scrolling Distance (293): 1, 1, 1
    Evdev Middle Button Emulation (294):    1
    Evdev Middle Button Timeout (295):  50
    Evdev Third Button Emulation (296): 0
    Evdev Third Button Emulation Timeout (297): 1000
    Evdev Third Button Emulation Button (298):  3
    Evdev Third Button Emulation Threshold (299):   20
    Evdev Wheel Emulation (300):    1
    Evdev Wheel Emulation Axes (301):   6, 7, 4, 5
    Evdev Wheel Emulation Inertia (302):    10
    Evdev Wheel Emulation Timeout (303):    200
    Evdev Wheel Emulation Button (304): 2
    Evdev Drag Lock Buttons (305):  0

A configuração padrão do TrackPoint no Ubuntu ( /usr/share/X11/xorg.conf.d/11-evdev-trackpoint.conf ) se parece com isso:

Section "InputClass"
        Identifier      "trackpoint catchall"
        MatchIsPointer  "true"
        MatchProduct    "TrackPoint|DualPoint Stick"
        MatchDevicePath "/dev/input/event*"
        Option  "Emulate3Buttons"       "true"
        Option  "EmulateWheel"  "true"
        Option  "EmulateWheelButton"    "2"
        Option  "XAxisMapping"  "6 7"
        Option  "YAxisMapping"  "4 5"
EndSection

Então, de acordo com essa regra, os dois dispositivos devem ter a configuração idêntica, que é aceitar movimento, todos os três botões e também os dois tipos de rolagem. No entanto, este não é o caso, conforme ilustrado acima. Um teclado conectado diretamente funciona perfeitamente.

Então, o que estou perdendo, o que preciso fazer para que meu teclado externo funcione corretamente por meio desse comutador KVM?

    
por Nikolai Prokoschenko 05.11.2016 / 20:37

1 resposta

0

Acredite ou não, eu resolvi este aqui. A solução não é específica para o teclado Aten KVM ou Thinkpad Compact e pode ajudar no genérico "meu teclado não funciona corretamente com um comutador KVM".

Portanto, a ideia é esta: o driver do kernel está tentando inicializar o dispositivo específico (por exemplo, um teclado). No entanto, um switch KVM geralmente fornece atalhos de conveniência para a comutação e outros recursos. No caso de Aten, há um atalho para o clique duplo na roda de rolagem. O próprio switch precisa filtrar os comandos USB para obter esse funcionamento, o que obviamente interfere na capacidade do kernel de definir certos bits de configuração no dispositivo. No meu caso, não conseguiu configurar a funcionalidade de rolagem.

A solução é simples: desative o modo conflitante. Para o Aten, é chamado "modo de emulação de mouse". Tendo desativado isso, tudo começou a funcionar corretamente.

    
por Nikolai Prokoschenko 25.01.2017 / 16:43