重新编程鼠标按钮

Joa*_*cho 3 linux mouse

我拿到了一只 nox krom khanda 鼠标。挺不错的,不过我还在试。在 linux (debian jessie) 上玩 quake 4 时,我注意到无法识别左侧按钮之一,而右侧按钮只能发射一枪。

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

所以,基本没用。现在,在 Windows 上,这款鼠标带有一张带有软件的 CD,可以对按钮进行重新编程。这很糟糕,好吧,但我只是想从那个按钮上取消那个该死的“自动开火”。它似乎有效,但是当我重新启动到 linux 时,一切又回来了。

我尝试使用 wine 运行该软件,但它没有检测到鼠标,virtualbox 也没有(它们都检测到通用鼠标)。有什么方法可以在 linux 中重新编程,还是我需要另一只鼠标?谢谢。

小智 6

第一步是找出物理按钮是什么。我将描述重新映射通用游戏鼠标的过程,在我的例子中是 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!
    
    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)