如果通过 KVM 切换器连接输入设备,我需要配置什么?

Nik*_*nko 8 keyboard kvm-switch trackpoint 16.04 16.10

我从我的雇主那里得到了一台 KVM 切换器(Aten CS782DP),据我所知,它运行良好。但是,它似乎在 Ubuntu 16.04 和 16.10 上导致我的输入设备(Thinkpad USB Compact Keyboard with TrackPoint)出现问题。我无法再单击中键,也无法垂直滚动(水平工作正常)。

特别是,这是xinput直接连接键盘时输出的外观:

? 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)]
Run Code Online (Sandbox Code Playgroud)

这是xinput通过 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)]
Run Code Online (Sandbox Code Playgroud)

据我所知,除了指针设备(ID 9 和 16)的奇怪重复之外,这看起来也不错。我将假设这与 KVM 有点像 USB 集线器有关,暂时忽略这种重复。

我试过xinput test在两种设备上运行,发现第一个设备接受移动和左右点击(鼠标按钮 1 和 3),而第二个设备只能水平滚动(按钮 6 和 7)。都不接受中间按钮(按钮 2)或垂直滚动​​(按钮 4 和 5)。

xinput list-props两种设备的输出看起来相同:

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
Run Code Online (Sandbox Code Playgroud)

Ubuntu ( /usr/share/X11/xorg.conf.d/11-evdev-trackpoint.conf) 中的默认 TrackPoint 配置如下所示:

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
Run Code Online (Sandbox Code Playgroud)

所以根据这个规则,两个设备应该得到相同的配置,即接受移动、所有三个按钮以及两种类型的滚动。然而,情况并非如此,如上所示。直接连接的键盘完美无缺。

那么我错过了什么,我需要做什么才能通过这个 KVM 切换器使我的外部键盘正常工作?

Nik*_*nko 0

不管你信不信,我已经解决了这个问题。该解决方案并不特定于 Aten KVM 或 Thinkpad Compact 键盘,并且可能有助于解决“我的键盘无法与 KVM 切换器正常工作”的问题。

所以想法是这样的:内核驱动程序正在尝试初始化特定设备(例如键盘)。然而,KVM切换器通常为切换和其他功能提供方便的快捷方式。对于 Aten,有一个双击滚轮的快捷方式。交换机本身需要过滤 USB 突击队才能使其正常工作,这显然会干扰内核在设备上设置某些配置位的能力。就我而言,它无法配置滚动功能。

解决办法很简单:禁用冲突模式。对于Aten,它被称为“鼠标模拟模式”。禁用该功能后,一切都开始正常工作。