编辑:

编辑:

我知道如何映射鼠标单击F1F2F3(分别为左键单击、中键单击、右键单击):

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>(左或者右键点击)。

瞧;)

这可以与xbindkeysWM 无关地运行

编辑:

不知道为什么这不适用于 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+F1for some_key

注意2:默认情况下xbindkeys不检查,因此如果您没有在rc文件中设置NumLock,则可以删除修饰符。m:0x10keystate_numlock = enable

相关内容