web-dev-qa-db-ja.com

Xinputボタンのマッピングと中央のボタンのエミュレーション

私は4つの物理ボタン(Kensington Slimblade Trackball)を備えたマウスを持っています。それらをA B C Dに加えて、マウスX、Y、およびスクロールホイールの3つの軸と呼びましょう。

ボタンAとBは、箱から出してプライマリ(ボタン1)として機能し、右クリック(ボタン3)します。 A + Bを同時に押すと、ミドルクリック(ボタン2)が生成されます。これもすばらしいことです。

今度は自分の目的でボタンCとDをマップしたいのですが、A + Bエミュレーションとは別にボタンCをマップする方法が見つかりません。

デフォルトのボタンマップを使用すると、次のマッピングが得られます。

physical buttons:   A C B         D
xinput button-map:  1 2 3 4 5 6 7 8 9 10 11 12 

ボタンCを8に、Dを9にマップしようとすると、xinput set-button-map、次にA + Bを押すと、ボタン8にもマップされます。

physical buttons:   A C B         D
xinput button-map:  1 8 3 0 0 0 0 9
                      ^
                      A+B emulation becomes 8 too!

A + Bエミュレーションをボタン2のままにして、ボタンCを任意のボタン番号にマップするにはどうすればよいですか?

Xinputよりも低いレベルで作業する必要がありますか?どうやって?別のXinput設定を使用する必要がありますか?

編集:4つのボタンのevtestコードは次のとおりです。

A:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
type 1 (EV_KEY), code 272 (BTN_LEFT), value 1

B:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
type 1 (EV_KEY), code 273 (BTN_RIGHT), value 1

C:
type 4 (EV_MSC), code 4 (MSC_SCAN), value ff000001
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1

D:
type 4 (EV_MSC), code 4 (MSC_SCAN), value ff000002
type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
2
Tobia

Xorg evdevドライバーにパッチを適用して、中央のボタンエミュレーションによって発行されるボタン番号を構成するEmulate3Buttonオプションを追加することになりました。 (私はパッチをメーリングリストに提出しました。遅かれ早かれマージされるはずです。)

次に、この構成を追加しました。

Section "InputClass"
    Identifier  "SlimBlade Trackball"
    Driver      "evdev"

    Option      "ButtonMapping" "1 8 3 4 5 6 7 9 0 2"
    Option      "Emulate3Button" "10"
EndSection

これにより、中央のボタンエミュレーションがボタン番号10を発行し、ボタンCを8に、Dを9に、10を2にマップします。

2
Tobia