我拿到了一只 nox krom khanda 鼠标。挺不错的,不过我还在试。在 linux (debian jessie) 上玩 quake 4 时,我注意到无法识别左侧按钮之一,而右侧按钮只能发射一枪。
使用 xev 查看鼠标事件后,我发现似乎不起作用的鼠标左键映射到 button9,而右侧的按钮基本上是重复的 button1。按下时,它会不断发送按钮按下和释放按钮 1。
所以,基本没用。现在,在 Windows 上,这款鼠标带有一张带有软件的 CD,可以对按钮进行重新编程。这很糟糕,好吧,但我只是想从那个按钮上取消那个该死的“自动开火”。它似乎有效,但是当我重新启动到 linux 时,一切又回来了。
我尝试使用 wine 运行该软件,但它没有检测到鼠标,virtualbox 也没有(它们都检测到通用鼠标)。有什么方法可以在 linux 中重新编程,还是我需要另一只鼠标?谢谢。
小智 6
第一步是找出物理按钮是什么。我将描述重新映射通用游戏鼠标的过程,在我的例子中是 saitek RAT3,但一般步骤将适用于任何鼠标。
xinput list
找出您鼠标的 ID,以及它的名称xinput query-state {id}
找出所有按钮的状态。利用这个机会数一下您的鼠标按钮。为了帮助这个过程,运行watch -n0 xinput query-state {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!
Run Code Online (Sandbox Code Playgroud)
重要的是这一行: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 |
Run Code Online (Sandbox Code Playgroud)
停用按钮,将 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)]
Run Code Online (Sandbox Code Playgroud)
好的,所以我的设备名称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
Run Code Online (Sandbox Code Playgroud)
所以我的鼠标共有 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 |
Run Code Online (Sandbox Code Playgroud)
使用这个鼠标,我们有一些具有特殊行为的按钮。按钮 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"
。确保用 0 填充末尾,以便项目数量与按钮相同,在本例中为 18。
我受够了!现在我只需要将其插入到配置文件中/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
Run Code Online (Sandbox Code Playgroud)