我最近购买了Utechsmart智能金星鼠标:http://www.utechsmart.com/product/show/id/477/US-D16400-GM
我无法将这些侧键(以及“鼠标左键附近的快速射击按钮”)绑定到不同的键上,而不改变侧键和快速射击按钮所指向的键。
造成这种情况的原因是,我一直无法让xev真正认识到侧键和快速按钮是它们自己的事件。相反,当我按侧按钮或快速射击按钮时,xev事件测试器会立即报告该按钮被映射到的绑定。
例如,我按侧按钮"1",事件映射器报告:
KeyPress event, serial 74, . . .
KeyRelease event, serial 74 . . .当我按下鼠标左键时,映射器报告:
ButtonPress event, serial 37, . . .
Button Release event, serial 37, . . . 显然,我无法从鼠标映射按钮,如果它不告诉我按钮的“地址”是什么,在这两个相关的帖子中:
有谁有任何建议来进一步尝试找出鼠标上的这些按钮吗?
很明显,鼠标在工作,只是没有按我喜欢的方式映射到按钮上。因此,在我看来,必须才能解决这个问题,我非常乐意深入解决这个问题。我一直在查看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目录),并包括以下内容:
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列表,其中包括:
⎡ 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,所以我运行了以下命令:
setxkbmap -device 16 -print | sed's/\(xkb_symbols.*\)"/\1+custom(venus)"/' | xkbcomp -I /usr/share/X11/xkb -i 16 -synch $DISPLAY我没有将输出输入到/dev/null中,因为我想知道输出是什么(很明显,当我制作脚本时,我会这样做,但我正在尝试理解我目前正在做什么)。我的产出如下:
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.我不太确定从这里往哪里走。。。
发布于 2020-05-19 16:14:59
我妻子有一只非常相似的老鼠。我对你的解决方案做了几次调整。文件/usr/share/X11/xkb/symbols/venus有以下内容:
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包含以下内容:
#!/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灯?
发布于 2019-05-31 10:46:36
大家都有好消息!
我终于能让这件事起作用了。我很久以前就放弃了这个问题,只做了一些事情。从那时起,我学习了更多关于编程和unix环境的知识,包括了解如何使用这个脚本中使用的sed。为了给出一些观点,当我提出这个问题时,我甚至不知道手册页。。。不用说,当我写这篇文章时,很容易看出我的一些错误是什么。
然而,修复这些错误并不足以解决这个问题。无论出于什么原因(我仍然不知道),将键映射连接到xkbcomp将不会编译我想要在上面的符号文件中进行的更改。
但是,如果我简单地运行:
setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > keymap
xkbcomp keymap -i $venus_keyboard -synch $DISPLAY钥匙编译得很好。老实说,我仍然不明白为什么我不能将sed的输出输送到xkbcomp,但是这确实映射了我的鼠标上的键,而键盘上的键却完全不受影响。
希望这能帮助那些和我有类似问题的人。
下面是我编写的整个shell脚本(除了符号文件,在我提供的链接的帖子中已经解释过了)。
如果有人解释了为什么sed的输出不能工作(或者有兴趣帮助我解决这个问题),请在这里给我一个回复。我还是有点不舒服。
#!/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/nullhttps://askubuntu.com/questions/1095437
复制相似问题