Отображение кнопки Xinput и эмуляция средней кнопки

У меня есть мышь с 4 физическими кнопками (трекбол Kensington Slimblade), назовем их ABCD, а также 3 оси: мышь X, Y и колесо прокрутки.

Кнопки A и B работают из коробки как первичные (кнопка 1) и щелкните правой кнопкой (кнопка 3). Нажатие A + B вместе создает средний щелчок (кнопка 2), что также отлично.

Теперь я хотел бы отображать кнопки C и D для моих собственных целей, но я не могу найти, как отображать кнопку C отдельно от эмуляции A + B.

С картой кнопок по умолчанию я получаю это сопоставление:

physical buttons: ACBD 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: ACBD xinput button-map: 1 8 3 0 0 0 0 9 ^ A+B emulation becomes 8 too! 

Как я могу сопоставить кнопку C произвольному номеру кнопки, сохраняя эмуляцию A + B как кнопку 2?

Должен ли я работать на более низком уровне, чем Xinput? Как? Должен ли я использовать другой параметр Xinput?

Изменить: вот коды для 4 кнопок:

 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. Voila.