web-dev-qa-db-ja.com

xorg .confファイルは、指定されたデバイスだけでなく、すべてのデバイスのボタンを再マップします

側面にボタンの付いたスタイラスペンがあります。このボタンはミドルクリックイベントを送信します。右クリックを送信します。

これが私の入力デバイスです:

$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Microsoft Surface Keyboard Mouse          id=9    [slave  pointer  (2)]
⎜   ↳ Microsoft Surface Keyboard Consumer Control   id=10   [slave  pointer  (2)]
⎜   ↳ Microsoft Surface Keyboard Touchpad       id=11   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E UNKNOWN                    id=12   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E Touchscreen                id=14   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E Mouse                      id=15   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E Pen Pen (0)                id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Surface Pro 3/4 Buttons                   id=7    [slave  keyboard (3)]
    ↳ Microsoft Surface Keyboard Keyboard       id=8    [slave  keyboard (3)]
    ↳ ipts 1B96:005E Pen                        id=13   [slave  keyboard (3)]
    ↳ Microsoft Surface Keyboard Consumer Control   id=16   [slave  keyboard (3)]

次のように、/ etc/X11/xorg.conf.d(または/usr/share/X11/xorg.conf.dで同じ問題が発生します)に.confファイルを作成しました。

Section "InputClass"
    Identifier  "ipts 1B96:005E Pen Pen (0)"
    Option  "ButtonMapping" "1 3 2 4 5 6 7"
EndSection

問題は、私の.confファイルがタッチパッドとスタイラスペンを再マップすることです。識別情報として「ipts1B96:005Eペン」を使用しても同じ問題が発生します。

「xinputset-button-map」を使用してxinputを直接使用すると、「ipts 1B96:005E Pen Pen(0)」1 3 2 4 5 6 7」は機能しますが、サスペンドなどのイベントに耐えることができません。

この構成を修正するのが最善でしたか?

2
Todor Markov

xorg.confのマニュアルページ で説明されているように、InputClassスタンザ内で1つ以上のMatchパラメーターを使用して、そこで設定したオプション(この場合はButtonMapping)を目的の値に制限する必要があります。デバイス。それらのパラメータは次のとおりです。

  • MatchProduct
  • MatchVendor
  • MatchDevicePath
  • MatchPnPID
  • MatchUSBID
  • MatchIs ...(これは完全なデバイスタイプである必要があり、ブール値のみを受け入れます。例については以下を参照してください)

注:MatchUSBIDパラメーターで発生する一般的な障害は、その中にある16進文字に使用される大文字と小文字が関係しています。 lsusbコマンドからIDを取得すると、小文字のみで出力が生成されるため問題ありませんが、例が完全に示すように、xinputなどの他のコマンドは大文字を使用して16進文字列を出力します。上記のリンク先のマニュアルページの引用:

IDは、「:」で区切られた小文字の16進数として構成されます。


質問で提供したコマンド出力から、問題を解決するこれらの一致条件を使用してInputClassスタンザを構築できますが、それらのさまざまなサブセットを試して、最終的には、必要な動作を生成するサブセットを使用することをお勧めします。一致エントリの数(簡単にするためですが、移植性のためにもっとそうです)。

Section "InputClass"
  Identifier     "Surface Pen"
  MatchProduct   "Pen Pen (0)"
  MatchVendor    "ipts"
  MatchUSBID     "1b96:005e"
  MatchIsPointer "true"
  Option         "ButtonMapping" "1 3 2 4 5 6 7"
EndSection
2
Peter J. Mello