我知道如何映射鼠标单击F1、F2和F3(分别为左键单击、中键单击、右键单击):
xkbset m # required, but disable keypad
xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"
xmodmap -e "keycode 68 = Pointer_Button2"
xmodmap -e "keycode 69 = Pointer_Button3"
但这需要我xkbset m
使用慢键模式 :
如果我按4键盘,光标将向左移动。我不需要这个功能,只需要上面的映射。
我试图用 来解决这个问题xdotool
,但我不知道如何处理按下的键/释放的键(用于拖放)
xdotool mousedown 1
xdotool mouseup 1
我怎么能够不是使用此模式或者如何重新映射所有键盘按键?
请问键盘上的数字和算术符号怎么样?
还有其他解决方案吗?
有关 Debian (cinnamon) 和 Archlinux (xfce) 所需的信息,如果可能的话,我想要一个不基于窗口管理器的解决方案。
编辑:
尝试过这个解决方案但我无法拖放F1.
在~/.xbindkeysrc
:
"xdotool mousedown 1"
F1
"xdotool mouseup 1"
F1 + Release
或者 :
"xdotool mousedown 1"
m:0x10 + c:67
"xdotool mouseup 1"
m:0x10 + c:67 + Release
然后 :
xset -r 67
编辑2
尝试过行动知识库
# actkbd configuration file
<keycode ("67")> :key : :xdotool mousedown 1
<keycode ("67")> :rel : :xdotool mouseup 1
没有雪茄:/
改编自这里
答案1
W00T!
首先:创建一个脚本click
:
#!/bin/bash
id=$(
xinput list |
awk '/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\1", "1")}'
)
xdotool mousedown $1
while IFS= read -r event; do
if [[ $event == *release* ]]; then
xdotool mouseup $1
exit
fi
done < <(xinput test $id)
然后在窗口管理器中添加一个新的键盘快捷键并映射F1到运行/path/to/mouse <1|3>
(左或者右键点击)。
瞧;)
这可以与xbindkeys
WM 无关地运行
编辑:
不知道为什么这不适用于 archlinux + xfce 4.12 但不适用于 Debian9 + Cinnamon
编辑 :
这个解决方案效果更好:
在.bashrc
:
xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"
xmodmap -e "keycode 68 = Pointer_Button2"
xmodmap -e "keycode 69 = Pointer_Button3"
作为键盘快捷键:
#!/bin/bash
id=$(
xinput list |
awk '/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\1", "1")}'
)
(
while read event; do
if [[ $event == *release* ]]; then
xkbset -m
exit
fi
done < <(xinput test $id)
) &
xkbset m
答案2
您可以使用以下命令实现“鼠标切换”操作.xbindkeysrc
(您的第一次编辑中有一个拼写错误,但不是.xbindkeys
):
"if [ ! -e /tmp/mouse_token ] ; then touch /tmp/mouse_token ; xdotool mousedown 1 ; else rm -f /tmp/mouse_token ; xdotool mouseup 1 ; fi"
some_key
它将创建一个空文件/tmp/mouse_token
来跟踪鼠标按钮的状态。因为some_key
您可以使用F1
,这意味着您必须按两次才能获得单击,或使用另一个键(例如F4
)。
注意:在我的系统上,由于未知原因,F 键的按下事件不会触发 xbindkeys 绑定,只有释放事件才会触发。如果您也发生同样的情况,请使用release+F1
for some_key
。
注意2:默认情况下xbindkeys
不检查,因此如果您没有在rc文件中设置NumLock
,则可以删除修饰符。m:0x10
keystate_numlock = enable