Linux

Xinput 按鍵映射和中鍵模擬

  • October 24, 2016

我有一個帶有 4 個物理按鈕的滑鼠(Kensington Slimblade 軌跡球),我們稱它們為 ABCD,外加 3 個軸:滑鼠 X、Y 和滾輪。

按鈕 A 和 B 開箱即用,作為主要按鈕(按鈕 1)和右鍵點擊(按鈕 3)。同時按下 A + B 會產生中間點擊(按鈕 2),這也很棒。

現在我想為自己的目的映射按鈕 C 和 D,但我找不到如何將按鈕 C 與 A+B 仿真分開映射。

使用預設按鈕映射,我得到這個映射:

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!

如何將按鈕 C 映射到任意按鈕編號,同時將 A+B 仿真保持為按鈕 2?

我應該在比 Xinput 更低的級別上工作嗎?如何?我應該使用不同的 Xinput 設置嗎?

編輯:這是evtest4 個按鈕的程式碼:

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

我最終修補了 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。瞧。

引用自:https://unix.stackexchange.com/questions/314795