我正在尝试使鼠标按钮的功能与 Control_L 或 Super_L 键完全相同。
在许多应用程序(firefox、konsole 等)中,Ctrl+Scroll 具有缩放等特殊操作,因此将鼠标按钮分配给修饰键看起来非常有用。
我还希望使用分配给 Super 的鼠标按钮作为在 awesome wm 中操作窗口的键。
因此我尝试使用 xbindkeys 和 xdotool:
"xdotool keydown control"
b:8
"xdotool keyup control"
release + control + b:8
但是当我按下鼠标按钮#8时,xev 说:
LeaveNotify event, serial 30, synthetic NO, window 0x1800001,
root 0x33f, subw 0x0, time 52846491, (-1,166), root:(0,186),
mode NotifyGrab, detail NotifyAncestor, same_screen YES,
focus YES, state 0
当我松开按钮时:
EnterNotify event, serial 30, synthetic NO, window 0x1800001,
root 0x33f, subw 0x0, time 52846655, (-1,166), root:(0,186),
mode NotifyUngrab, detail NotifyAncestor, same_screen YES,
focus YES, state 0
KeymapNotify event, serial 30, synthetic NO, window 0x0,
keys: 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
因此应用程序没有收到任何键/按钮通知(KeyPress 和其他)。
我尝试使用 xmodmap,使用 xte 或 xvkbd 代替 xdotool。
当我尝试将鼠标键分配给普通键(不是修饰键)时 - 一切正常。
另外,我尝试通过 ssh 从另一台机器调用 xdotool/xte/xvkbd,并且成功了!
所以我完全不知道还能尝试什么。有什么想法吗?
更新:据我所知 LeaveNotify 和 EnterNotify 是由 xbindkeys 调用的 XGrabButton 生成的,但我仍然不知道该怎么做 :(
答案1
尝试:
"xdotool keyup control"
Control + b:8 + release
请注意,Control 以及所有其他修饰符都是大写的,修饰符列在最前面,release 列在最后。