我拿到了一只 nox krom khanda 鼠标。这有点不错,但我仍在尝试。在 Linux (debian jessie) 上玩《雷神之锤 4》时,我注意到左侧按钮之一无法识别,而右侧按钮只能发射一发子弹。
使用xev检查鼠标事件后,我发现似乎不起作用的鼠标左键被映射到button9,而右侧的按钮基本上是重复的button1。按下时,它会持续发送按钮 1 的按下和释放消息。
所以,基本上没什么用。现在,在 Windows 上,这款鼠标附带一张 CD,其中包含用于重新编程按钮的软件。这很糟糕,好吧,但我只是想从那个按钮上取消那个该死的“自动射击”。它似乎有效,但当我重新启动 Linux 时,一切又回来了。
我尝试使用 wine 运行该软件,但它没有检测到鼠标,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"
。请务必用 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