마우스 버튼을 활성화한 상태에서 마우스 움직임 입력을 비활성화하는 방법은 무엇입니까?

마우스 버튼을 활성화한 상태에서 마우스 움직임 입력을 비활성화하는 방법은 무엇입니까?

버튼 전용으로 사용하는 마우스가 있습니다. 마우스 움직임 입력을 비활성화하고 싶습니다. 센서를 물리적으로 덮는 것은 작동하지 않습니다.

답변1

당신은 그것을 사용할 수 있습니다 xinput.

>xinput --list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer            id=4    [slave  pointer  (2)]
⎜   ↳ Mouse0                                id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard           id=5    [slave  keyboard (3)]
    ↳ Keyboard0

여기에서 마우스 이름(이 경우 Mouse0)을 얻을 수 있습니다.

다음 명령을 사용하면 마우스 속도를 100000배로 늦춘 다음 기본적으로 0으로 만들 수 있습니다.

xinput --set-prop 6 'Device Accel Constant Deceleration' 100000

또는

xinput --set-prop Mouse0 'Device Accel Constant Deceleration' 100000

복원하려면 동일한 것을 사용할 수 있습니다

xinput --set-prop Mouse0 'Device Accel Constant Deceleration' 1

답변2

내 마우스에는 "장치 가속 일정 감속" 속성이 없습니다. 여전히 모션을 비활성화할 수 있습니다

xinput set-prop 9 266 -1    
xinput set-prop 9 269 0 1

다시 활성화하세요.

xinput set-prop 9 269 1 0
input set-prop 9 266 0.0

버튼도 비활성화했습니다.

xinput set-button-map 9 0 0 0

장치 9는 내 것입니다미츠미 전기 애플 광학 USB 마우스.

장치 목록

Device 'Mitsumi Electric Apple Optical USB Mouse':
    Device Enabled (132):   1
    Coordinate Transformation Matrix (134): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Accel Speed (266):     -1.000000
    libinput Accel Speed Default (267):     0.000000
    libinput Accel Profiles Available (268):        0, 0
    libinput Accel Profile Enabled (269):   0, 1
    libinput Accel Profile Enabled Default (270):   1, 0
    libinput Natural Scrolling Enabled (271):       0
    libinput Natural Scrolling Enabled Default (272):       0
    libinput Send Events Modes Available (250):     1, 0
    libinput Send Events Mode Enabled (251):        0, 0
    libinput Send Events Mode Enabled Default (252):        0, 0
    libinput Left Handed Enabled (273):     0
    libinput Left Handed Enabled Default (274):     0
    libinput Scroll Methods Available (275):        0, 0, 1
    libinput Scroll Method Enabled (276):   0, 0, 0
    libinput Scroll Method Enabled Default (277):   0, 0, 0
    libinput Button Scrolling Button (278): 2
    libinput Button Scrolling Button Default (279): 274
    libinput Middle Emulation Enabled (280):        0
    libinput Middle Emulation Enabled Default (281):        0
    Device Node (253):      "/dev/input/event4"
    Device Product ID (254):        1452, 772
    libinput Drag Lock Buttons (282):       <no items>
    libinput Horizonal Scroll Enabled (255):        1

답변3

내가 man 4 mousedrv올바르게 읽었다면 xorg.conf의 CorePointer 섹션에서 이것을 설정할 수 있습니다.

Option "EmulateWheel" true
Option "EmulateWheelButton" 0
Option "EmulateWheelInertia" 10000

이는 움직임을 마우스 휠 버튼 이벤트로 변환하지만 관성 설정으로 인해 이벤트 등록에 너무 둔감해집니다. 최신 시스템에서는 mousedrv가 아닌 evdev입니다. 이는 xinput을 사용하여 런타임에 설정할 수도 있습니다. 예를 들면 다음과 같습니다.

xinput --set-prop 17 'Evdev Wheel Emulation' 1
xinput --set-prop 17 'Evdev Wheel Emulation Button' 0
xinput --set-prop 17 'Evdev Wheel Emulation Inertia' 10000

여기서 17은 자신의 장치 번호여야 합니다. 저는 장치 이름으로 이 번호를 가져오고 시작 스크립트 중에 $device-id에 저장하는 함수를 사용합니다.

set_device_id() {
  device_id=$(xinput --list | grep -m 1 "$1")
  device_id=${device_id##*id=}
  device_id=${device_id%%[[:space:]]*}
}

불행하게도 이는 장치 휠 입력을 비활성화하는 부작용이 있습니다.

관련 정보