저는 두 개의 Logitech 트랙볼, Wireless TrackMan FX 및 Marble Mouse를 가지고 있습니다. 둘 다 evtest
: BTN_LEFT
, BTN_RIGHT
, BTN_MIDDLE
에서 동일한 버튼 세트를 보고 BTN_SIDE
하지만 BTN_EXTRA
각각 물리적 버튼은 4개만 있습니다. TrackMan FX는 왼쪽, 오른쪽, 중앙, 측면 등 내가 원하는 정확한 이벤트를 보냅니다. 그런데 Marble Mouse가 BTN_EXTRA
대신 전송하고 있어서 BTN_MIDDLE
다시 매핑하고 싶습니다.
이 답변내가 원하는 것을 정확하게 다루는 것 같고 hwdb가 이 작업을 수행하기에 적합한 장소인 것 같습니다. 아쉽게도 이는 절반만 작동하며 왜 클릭으로 생성된 두 가지 다른 입력 이벤트와 관련이 있는지 모르겠습니다. evtest
FX의 현장 히트 보고서는 다음과 같습니다(명확성을 위해 관련 없는 타임스탬프는 생략됨).
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
MarbleMouse에서 수정되지 않은 클릭:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
type 1 (EV_KEY), code 276 (BTN_EXTRA), value 1
그래서 내 99-marblebutton.hwdb
파일은 다음과 같습니다
evdev:input:b0003v046DpC408*
ID_INPUT_KEY=1
KEYBOARD_KEY_90005=btn_middle
결과 입력 이벤트가 수정됩니다.
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
그래서 이벤트를 받았지만 BTN_MIDDLE
관련 MSC_SCAN
값이 여전히 잘못되어 중간 클릭이 어디에서도 인식되지 않기 때문에 영향을 미치는 것 같습니다. 실제로 유효한 입력 이벤트로 간주되지도 않는 것 같습니다. libinput debug-events
다음을 사용하여 수정되지 않은 이벤트를 볼 수 있습니다.
event7 POINTER_BUTTON +97.374s BTN_EXTRA (276) pressed, seat count: 1
hwdb 구성을 완료한 후 동일한 버튼을 눌러도 아무 것도 보고되지 않아 wev
이벤트가 표시되지 않습니다.
내가 시도한 다른 것에는 swaywm에서의 재매핑이 포함됩니다. 이는 작동하지만 특정 응용 프로그램에서만 작동합니다.
set $MOUSE "1133:50184:Logitech_USB_Trackball"
bindsym --input-device=$MOUSE --whole-window BTN_EXTRA seat - cursor press BTN_MIDDLE
bindsym --input-device=$MOUSE --whole-window --release BTN_EXTRA seat - cursor release BTN_MIDDLE
차단 도구EV_KEY
및 이벤트를 "수정"하는 EV_MSC
필터를 작성하겠습니다. 효과는 hwdb와 비슷합니다. 이벤트는 제대로 표시되지만 evtest
libinput에서는 이를 볼 수도 없습니다.
Solaar는 내 장치를 지원하지 않는 것 같고 입력 리매퍼를 사용하여 유용한 작업을 수행하기에는 너무 뚱뚱합니다.