녹스 크롬 칸다 마우스를 받았습니다. 좀 좋은데 아직 노력 중이에요. Linux(debian jessie)에서 Quake 4를 플레이하는 동안 왼쪽 버튼 중 하나가 인식되지 않고 오른쪽 버튼이 총알 하나만 발사하는 것을 발견했습니다.
xev를 사용하여 마우스 이벤트를 확인한 후 작동하지 않는 것 같은 왼쪽 마우스 버튼이 버튼9에 매핑되어 있는 반면 오른쪽 버튼은 기본적으로 버튼1과 중복되어 있음을 발견했습니다. 누르면 버튼 1을 눌렀다 떼었다는 메시지가 계속해서 전송됩니다.
따라서 기본적으로 쓸모가 없습니다. 이제 Windows에서는 마우스에 버튼 재프로그래밍용 소프트웨어가 포함된 CD가 함께 제공됩니다. 짜증나, 알았어. 하지만 난 그냥 그 버튼에서 그 빌어먹을 "자동 발사" 기능을 없애고 싶을 뿐이야. 작동하는 것 같았지만 Linux를 다시 시작하면 모든 것이 다시 돌아왔습니다.
와인을 사용하여 소프트웨어를 실행해 보았지만 마우스를 감지하지 못했고 virtualbox도 감지하지 못했습니다(둘 다 범용 마우스를 감지했습니다). Linux에서 다시 프로그래밍할 수 있는 방법이 있습니까? 아니면 다른 마우스가 필요합니까? 감사해요.
답변1
첫 번째 단계는 물리적 버튼이 무엇인지 알아내는 것입니다. 범용 게임 마우스(제 경우에는 Saitek RAT3)를 다시 매핑하는 과정을 설명하겠습니다. 일반적인 단계는 모든 마우스에 적용됩니다.
xinput list
마우스의 ID와 이름을 알아보세요xinput query-state {id}
모든 버튼의 상태를 알아보세요. 이 기회를 이용하여 마우스 버튼 수를 세어보세요. 이 프로세스를 지원하려면watch -n0 xinput query-state {id}
보류할 쿼리를 실행하세요.- 특별한 동작을 보이는 버튼을 식별하세요.
- 어떤 버튼에 어떤 버튼 ID가 있는지 기록해 두세요.
50-mousename
이름이 to인 파일을 추가/usr/share/X11/xorg.conf.d/
하고 즐겨 사용하는 편집기로 엽니다. 다음 템플릿을 삽입하세요.Section "InputClass" Identifier "Mouse Remap" MatchProduct "{mouse name}" MatchDevicePath "/dev/input/event*" Option "ZAxisMapping" "4 5" Option "ButtonMapping" "1 2 3 4 5 6 7 8 9 0 0 0 0 0" Option "Resolution" "3200" #you will probably have to change this!
중요한 줄은 다음과 같습니다.
Option "ButtonMapping" "1 2 3"...
이전에 만든 버튼 목록을 기억하시나요? 이 옵션은 어떤 물리적 버튼이 어떤 버튼 이벤트에 해당하는지 결정합니다."1 2 3"
"물리적 버튼 1"은 "버튼 이벤트 1", "물리적 버튼 2"는 "버튼 이벤트 2" 등을 의미합니다. 예를 들어 스크롤 휠과 마우스 오른쪽 버튼 사이를 전환하려면 "3 2 1"로 변경하면 됩니다. 이해가 되지 않는다면 다음 표를 확인해 보세요.| Physical Button | Button Event | normal action | |-----------------|--------------|---------------| |Left | 1 | select | |Middle | 2 | paste/depends | |Right | 3 | context menu | |Scroll Up | 4 | context menu | |Scroll Down | 5 | context menu | |Custom | 6+ | depends |
버튼을 비활성화하려면 해당 위치에 0을 입력합니다. 예를 들어 마우스 가운데 버튼을 비활성화하려면
"1 0 3 4 5 6 7 8 9 ..."
이 내용을 적용하려면 로그인하고 로그아웃해야 합니다.
별로 말이 안되는 것 같아서 제 과정을 보여 드리겠습니다.
username@hostname ~> xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Saitek Cyborg R.A.T.3 Mouse id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ USB Keyboard id=10 [slave keyboard (3)]
↳ USB Keyboard id=11 [slave keyboard (3)]
알겠습니다. 내 장치 이름 Saitek Cyborg R.A.T.3 Mouse
의 ID는 12 입니다.
notafile@notapc ~> xinput query-state 12
2 classes :
ButtonClass
button[1]=up
button[2]=up
button[3]=up
button[4]=up
button[5]=up
button[6]=up
button[7]=up
button[8]=up
button[9]=up
button[10]=down
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
button[17]=up
button[18]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=1351
valuator[1]=403
valuator[2]=-372
그래서 내 마우스에는 총 18개의 버튼이 있습니다. 내가 찾은 매핑은 다음과 같습니다.
| Number | Button |
|--------|-------------|
| 1 | Left |
| 2 | Middle |
| 3 | Right |
| 4 | scroll up |
| 5 | scroll down |
| 8 | upper thumb |
| 9 | lower thumb |
| 10 | mode red |
| 11 | mode blue |
| 12 | mode purple |
| 13 | DPI up |
| 14 | DPI down |
이 마우스에는 특별한 동작을 하는 몇 가지 버튼이 있습니다. 모드 버튼을 다시 누를 때까지 버튼 10-12가 계속 눌러져 있습니다. 이 문제는 "AutoRelease" 옵션을 사용하여 해결할 수 있으며, 이것이 귀하에게 문제가 되지 않는 한 지금은 논의하지 않겠습니다.
따라서 우리의 매핑은 매우 간단해야 합니다. 버튼 1-5는 일반 버튼이고, 8과 9는 사용자 정의 버튼이고, 6-7과 10+는 실제로 필요하지 않은 버튼입니다. 결과 맵은 다음과 같습니다 "1 2 3 4 5 0 0 0 8 9 0 0 0 0 0 0 0 0 0"
. 항목 수가 버튼과 동일하도록(이 경우 18) 끝 부분을 0으로 채워야 합니다.
난 끝났어! 이제 구성 파일에 삽입하고 /usr/share/X11/xorg.conf.d/50-saitek-rat3
로그아웃했다가 다시 로그인하면 됩니다!
이것이 나의 최종 구성입니다.
Section "InputClass"
Identifier "Mouse Remap"
MatchProduct "Saitek Cyborg R.A.T.3 Mouse"
MatchDevicePath "/dev/input/event*"
Option "ZAxisMapping" "4 5"
Option "ButtonMapping" "1 2 3 4 5 0 0 0 8 9 0 0 0 0 0 0 0 0 0"
Option "Resolution" "3200"
EndSection