首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射额外的mmo鼠标侧按钮

映射额外的mmo鼠标侧按钮
EN

Ask Ubuntu用户
提问于 2018-11-23 16:48:21
回答 2查看 3K关注 0票数 3

我最近购买了Utechsmart智能金星鼠标:http://www.utechsmart.com/product/show/id/477/US-D16400-GM

我无法将这些侧键(以及“鼠标左键附近的快速射击按钮”)绑定到不同的键上,而不改变侧键和快速射击按钮所指向的键。

造成这种情况的原因是,我一直无法让xev真正认识到侧键和快速按钮是它们自己的事件。相反,当我按侧按钮或快速射击按钮时,xev事件测试器会立即报告该按钮被映射到的绑定。

例如,我按侧按钮"1",事件映射器报告:

代码语言:javascript
复制
 KeyPress event, serial 74, . . .
 KeyRelease event, serial 74 . . .

当我按下鼠标左键时,映射器报告:

代码语言:javascript
复制
 ButtonPress event, serial 37, . . .
 Button Release event, serial 37, . . . 

显然,我无法从鼠标映射按钮,如果它不告诉我按钮的“地址”是什么,在这两个相关的帖子中:

如何在罗技鼠标中配置额外的按钮

鼠标快捷键与Kubuntu中的键盘键混淆

有谁有任何建议来进一步尝试找出鼠标上的这些按钮吗?

很明显,鼠标在工作,只是没有按我喜欢的方式映射到按钮上。因此,在我看来,必须才能解决这个问题,我非常乐意深入解决这个问题。我一直在查看Xorg和evdev驱动程序的文档,但我甚至不确定这是否是正确的方向。

不一定要找人直接帮我解决这个问题。但是,帮助我集思广益,就如何解决这个问题提出一些想法,将是非常感谢的。

谢谢你的耐心!

更新:

所以我在archlinux论坛上找到了一篇关于razer naga的帖子,这是一只非常类似的鼠标。看起来很有希望:https://bbs.archlinux.org/viewtopic.php?id=145502。这给我带来了一个与红外遥控器类似的问题:https://www.mythtv.org/wik147+853!#@#+!i/Generic_HID_22%22_Remotes#XKB_重映射。在这个问题上,有大量的信息深入到了相当的深度。如果他们能更好地解释一下脚本中的“键”是什么,那就太好了,但是在阅读了大量的基础材料之后,似乎是从约定中来的(而且由于鼠标上的按钮对应于这些键映射,所以只会有进一步的意义。)。。

不过,我还是有点问题。我还没有创建一个shebang,相反,我只是尝试手动运行命令。

首先,我创建了符号文件/usr/share/x11/xkb/符号/自定义(我不太确定它们为什么要使用tmp目录),并包括以下内容:

代码语言:javascript
复制
xkb_symbols "venus" {
  2     key  { [          y,          Y  ]
  3     key  { [          i,          I  ]
  4     key  { [bracketleft,  braceleft  ]
  5     key  { [bracketright, braceright ]
  6     key  { [      slash,   question  ]
  7     key  { [          j,          J  ]
  8     key  { [          k,          K  ]
  9     key  { [          l,          L  ]
 10     key  { [  semicolon,      colon  ]
 11     key  { [      comma,       less  ]
 12     key  { [      minus, underscore  ]
 13     key  { [      equal,       plus  ]
 14 };

然后,我运行了xinput列表,其中包括:

代码语言:javascript
复制
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ USB Laser Game Mouse                      id=9    [slave  pointer  (2)]
⎜   ↳ USB Laser Game Mouse                      id=11   [slave  pointer  (2)]
⎜   ↳ EST Gaming keyboard                       id=13   [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)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ USB Laser Game Mouse                      id=10   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=12   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=14   [slave  keyboard (3)]
    ↳ C-Media Electronics Inc. USB Audio Device id=15   [slave  keyboard (3)]
    ↳ USB Laser Game Mouse                      id=16   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=17   [slave  keyboard (3)]

在分析了上面两个链接中编写的脚本之后,我推断出我的$remote_id变量是16,所以我运行了以下命令:

代码语言:javascript
复制
setxkbmap -device 16 -print | sed's/\(xkb_symbols.*\)"/\1+custom(venus)"/' | xkbcomp -I /usr/share/X11/xkb -i 16 -synch $DISPLAY

我没有将输出输入到/dev/null中,因为我想知道输出是什么(很明显,当我制作脚本时,我会这样做,但我正在尝试理解我目前正在做什么)。我的产出如下:

代码语言:javascript
复制
Warning:          Too many file names on command line
                  Compiling /usr/share/X11/xkb, writing to -, ignoring :0
syntax error: line 1 of /usr/share/X11/xkb
last scanned symbol is: 
Errors encountered in /usr/share/X11/xkb; not compiled.

我不太确定从这里往哪里走。。。

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2020-05-19 16:14:59

我妻子有一只非常相似的老鼠。我对你的解决方案做了几次调整。文件/usr/share/X11/xkb/symbols/venus有以下内容:

代码语言:javascript
复制
xkb_symbols "venus" {
    key  { [ KP_1          , KP_1            ] };
    key  { [ KP_2          , KP_2            ] };
    key  { [ KP_3          , KP_3            ] };
    key  { [ KP_4          , KP_4            ] };
    key  { [ KP_5          , KP_5            ] };
    key  { [ KP_6          , KP_6            ] };
    key  { [ KP_7          , KP_7            ] };
    key  { [ KP_8          , KP_8            ] };
    key  { [ KP_9          , KP_9            ] };
    key  { [ F2            , F2              ] };
    key  { [ XF86Calculator, XF86Calculator  ] };
    key  { [ period        , period          ] };
};

我添加到MATE桌面环境启动的脚本~/bin/mouse_config.sh包含以下内容:

代码语言:javascript
复制
#!/bin/sh

venus_keyboard=$(xinput list | sed -n 's/.*USB Gaming Mouse[[:space:]]*id=\([0-9]*\).*keyboard.*/\1/p')
[ "$venus_keyboard" ] || exit

setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > ~/.venus_keymap
xkbcomp ~/.venus_keymap -i $venus_keyboard -synch $DISPLAY

您会注意到,我需要稍微修改一下USB Gaming Mouse的名称,除此之外,这一切都很完美。

她用这个做搅拌机。

啊,但也许有人知道怎么关掉这只老鼠的led灯?

票数 1
EN

Ask Ubuntu用户

发布于 2019-05-31 10:46:36

大家都有好消息!

我终于能让这件事起作用了。我很久以前就放弃了这个问题,只做了一些事情。从那时起,我学习了更多关于编程和unix环境的知识,包括了解如何使用这个脚本中使用的sed。为了给出一些观点,当我提出这个问题时,我甚至不知道手册页。。。不用说,当我写这篇文章时,很容易看出我的一些错误是什么。

然而,修复这些错误并不足以解决这个问题。无论出于什么原因(我仍然不知道),将键映射连接到xkbcomp将不会编译我想要在上面的符号文件中进行的更改。

但是,如果我简单地运行:

代码语言:javascript
复制
setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > keymap
xkbcomp keymap -i $venus_keyboard -synch $DISPLAY

钥匙编译得很好。老实说,我仍然不明白为什么我不能将sed的输出输送到xkbcomp,但是这确实映射了我的鼠标上的键,而键盘上的键却完全不受影响。

希望这能帮助那些和我有类似问题的人。

下面是我编写的整个shell脚本(除了符号文件,在我提供的链接的帖子中已经解释过了)。

如果有人解释了为什么sed的输出不能工作(或者有兴趣帮助我解决这个问题),请在这里给我一个回复。我还是有点不舒服。

代码语言:javascript
复制
#!/bin/sh

venus_keyboard=$(xinput list | sed -n 's/.*USB Laser Game Mouse[[:space:]]*id=\([0-9]*\).*keyboard.*/\1/p')
[ "$venus_keyboard" ] || exit

setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > ~/xkb/keymap
xkbcomp ~/xkb/keymap -i $venus_keyboard -synch $DISPLAY 2>/dev/null
票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1095437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档