web-dev-qa-db-ja.com

入力デバイスがKVMスイッチを介して接続されている場合、何を構成する必要がありますか?

雇用主(Aten CS782DP)からKVMスイッチを入手しました。ただし、Ubuntu 16.04と16.10の両方で、私の入力デバイス(TrackPointを備えたシンクパッドUSBコンパクトキーボード)で問題が発生しているようです。私はもう中クリックすることができず、垂直にスクロールすることもできません(水平方向に正常に動作します)。

特に、これはキーボードが直接接続されたときに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)]

これは、KVMを介して接続された場合の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=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)]

私が見る限り、これはポインタデバイスの奇妙な複製(ID 9および16)を除いて、うまく見えます。これはUSBハブに少し似ているKVMに関係していると仮定し、今のところこの重複を無視します。

両方のデバイスに対してxinput testを実行してみましたが、最初のデバイスは動きと左クリックと右クリック(マウスボタン1と3)を受け入れ、2番目のデバイスは水平スクロール(ボタン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

UbuntuのデフォルトのTrackPoint構成(/usr/share/X11/xorg.conf.d/11-evdev-trackpoint.conf)は次のようになります。

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

したがって、このルールに従って、両方のデバイスは同じ構成を取得する必要があります。つまり、移動、3つのボタンすべて、および両方のタイプのスクロールを受け入れます。ただし、上記のようにそうではありません。直接接続されたキーボードは問題なく動作します。

それでは、このKVMスイッチを介して外部キーボードを適切に機能させるために何が必要ですか?

信じられないかもしれませんが、私はこれを解決しました。この解決策は、Aten KVMまたはThinkpad Compactキーボードに固有のものではなく、一般的な「キーボードがKVMスイッチで正しく動作しない」場合に役立ちます。

アイデアはこれです:カーネルドライバーは特定のデバイス(キーボードなど)を初期化しようとしています。ただし、KVMスイッチは通常、切り替えやその他の機能の便利なショートカットを提供します。 Atenの場合、スクロールホイールをダブルクリックするためのショートカットがあります。スイッチ自体は、これを機能させるためにUSBコマンドをフィルタリングする必要があります。これは、デバイスの特定の構成ビットを設定するカーネルの機能と明らかに干渉します。私の場合、スクロール機能の構成に失敗しました。

解決策は簡単です。競合モードを無効にします。 Atenでは、「マウスエミュレーションモード」と呼ばれます。それを無効にすると、すべてが正常に動作し始めました。