已经问过这个问题,但从未得到正确回答。与@Seth许可后,我现在再次询问。这将使我能够做出响应,并且可能更容易地修改问题。原始问题可以在这里找到:
问题:
虽然这是非常简单的任何按键动作映射到使用鼠标按钮xbindkeys
会同xdotool
或xte
似乎多了很多问题映射一个修改键(如ALT,CTRL,SHIFT等)给它。
最后的解决方案应该允许仅用鼠标CTRL + 单击(例如,用于选择列表的多个条目)。
可以在Stack Exchange以及其他Linux相关论坛上找到解决此问题的两种可能方法。但是这些都不起作用,因为它们会导致其他问题和副作用。
笔记:
下面的一些示例涉及带有Scheme语法的Guile并依赖于文件,而其他示例则依赖于具有相应语法的文件。我知道他们不会一起工作。.xbindkeysrc.scm
.xbindkeysrc
此外,下面的代码片段xdotool
仅依靠,但是我也乐于使用涉及其他应用程序的方法,例如xte
-尽管看起来两者都能导致相同的结果,所以我在xdotool
这里仅使用动作。
方法A:
使用以下命令更新.xbindkeysrc
文件:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
那是我最初尝试的方法,但是它的副作用是修饰符被保留并且无法释放。
方法B:
使用以下命令更新.xbindkeysrc.scm
文件:
(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")
(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")
可以在http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html找到并尝试解决持有修饰符的问题(如方法中所述)一种)。
尽管它修复了它只能部分起作用的问题,但在按下拇指按钮时无法执行其他鼠标单击。
方法C:
使用以下命令更新.xbindkeysrc
文件:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
OP在此处的askubuntu中尝试了链接问题。更简单,更可靠,因为它不涉及修饰符状态。尽管如此,问题仍然存在,即CTRL + 单击无法。
这似乎xbindkeys
是问题所在,因为它可以识别单击,但无法执行。可以使用xev | grep button
和测试xbindkeys -v
:
记录的正常鼠标单击xev
应类似于:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
以及拇指按钮:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
但是xbindkeys
启用上述配置后,它不会记录任何内容。尽管对于拇指按钮来说,这是有意义的,因为它已映射到CTRL,因此不再是鼠标按钮,但是奇怪的是,按钮1也未记录。这可能是因为xbindkeys
不执行它,而是它本身正在识别它:
Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
m:0x0 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
Release + m:0x4 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
方法D:
使用以下命令更新.xbindkeysrc
文件:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
太简单了...但是会导致无限点击。
更新:
同时,我购买了Logitech G502,并注意到,通过Windows上的驱动程序进行配置后,不仅配置文件本身存储在设备内存中,而且实际的按键操作是由鼠标完成的。这实际上解决了我在Linux上的问题!
我记得唯一能做到这一点的鼠标是过去的Razer Copperhead。但是我想今天还有其他老鼠可以做到这一点。