重新编程鼠标按钮

重新编程鼠标按钮

我拿到了一只 nox krom khanda 鼠标。这有点不错,但我仍在尝试。在 Linux (debian jessie) 上玩《雷神之锤 4》时,我注意到左侧按钮之一无法识别,而右侧按钮只能发射一发子弹。

使用xev检查鼠标事件后,我发现似乎不起作用的鼠标左键被映射到button9,而右侧的按钮基本上是重复的button1。按下时,它会持续发送按钮 1 的按下和释放消息。

所以,基本上没什么用。现在,在 Windows 上,这款鼠标附带一张 CD,其中包含用于重新编程按钮的软件。这很糟糕,好吧,但我只是想从那个按钮上取消那个该死的“自动射击”。它似乎有效,但当我重新启动 Linux 时,一切又回来了。

我尝试使用 wine 运行该软件,但它没有检测到鼠标,virtualbox 也没有检测到(它们都检测到通用鼠标)。有没有办法在Linux中重新编程,或者我需要另一个鼠标吗?谢谢。

答案1

第一步是找出物理按钮是什么。我将描述重新映射通用游戏鼠标的过程,在我的例子中是 Saitek RAT3,但一般步骤适用于任何鼠标。

  1. xinput list找出您的鼠标的 ID 及其名称
  2. xinput query-state {id}找出所有按钮的状态。利用这个机会来数一下你的鼠标按钮。为了帮助这个过程,运行watch -n0 xinput query-state {id}以保持查询。
  3. 识别任何具有特殊行为的按钮。
  4. 记下哪个按钮具有哪个按钮 ID。
  5. 添加一个名为50-mousenameto 的文件/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 MouseID 为 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

相关内容