如何将鼠标键映射为键盘键而不丢失 Linux 的“数字键盘”?

Mév*_*pek 5 linux xorg keyboard mouse xmodmap

我知道如何映射鼠标单击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"
Run Code Online (Sandbox Code Playgroud)

但这需要我使用xkbset m慢速按键模式:

如果我按4键盘,光标将向左移动。我不需要这个功能,只需要上面的映射。

我试图用 来解决这个问题xdotool,但我不知道如何处理按下的键/释放的键(用于拖放)

xdotool mousedown 1
xdotool mouseup 1
Run Code Online (Sandbox Code Playgroud)

我如何才能使用此模式或如何重新映射所有键盘按键?

请问键盘上的数字和算术符号怎么样?

还有其他解决方案吗?

有关 Debian (cinnamon) 和 Archlinux (xfce) 所需的信息,如果可能的话,我想要一个不基于窗口管理器的解决方案。

编辑:

尝试了这个解决方案,但我无法拖放F1

~/.xbindkeysrc

"xdotool mousedown 1"
    F1
"xdotool mouseup 1"
    F1 + Release
Run Code Online (Sandbox Code Playgroud)

或者 :

"xdotool mousedown 1"
    m:0x10 + c:67
"xdotool mouseup 1"
    m:0x10 + c:67 + Release
Run Code Online (Sandbox Code Playgroud)

然后 :

xset -r 67
Run Code Online (Sandbox Code Playgroud)

编辑2

尝试使用actkbd

# actkbd configuration file
<keycode ("67")> :key : :xdotool mousedown 1
<keycode ("67")> :rel : :xdotool mouseup 1
Run Code Online (Sandbox Code Playgroud)

没有雪茄:/

改编自这里

Mév*_*pek 4

W00T!

\n\n

首先:创建一个脚本click

\n\n
#!/bin/bash\n\nid=$(\n    xinput list |\n        awk \'/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\\\1", "1")}\'\n)\nxdotool mousedown $1\nwhile IFS= read -r event; do\n    if [[ $event == *release* ]]; then\n        xdotool mouseup $1\n        exit\n    fi\ndone < <(xinput test $id)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在窗口管理器中添加新的键盘快捷键并映射F1以运行/path/to/mouse <1|3>(左键右键单击)。

\n\n

等 voil\xc3\xa0 ;)

\n\n

xbindkeys这可以与WM 无关地运行

\n\n

编辑:

\n\n

不知道为什么这不适用于 archlinux + xfce 4.12 但不适用于 Debian9 + Cinnamon

\n\n

编辑 :

\n\n

这个解决方案效果更好:

\n\n

.bashrc

\n\n
xmodmap -e "keycode 67 = Pointer_Button1 Pointer_Button1"\nxmodmap -e "keycode 68 = Pointer_Button2"\nxmodmap -e "keycode 69 = Pointer_Button3"\n
Run Code Online (Sandbox Code Playgroud)\n\n

作为键盘快捷键:

\n\n
#!/bin/bash\n\nid=$(\n    xinput list |\n        awk \'/Dell USB Keyboard/{print gensub(/.*id=([0-9]+).*/, "\\\\1", "1")}\'\n)\n\n\n(\n    while read event; do\n        if [[ $event == *release* ]]; then\n            xkbset -m\n            exit\n        fi\n    done < <(xinput test $id)\n) &\nxkbset m\n
Run Code Online (Sandbox Code Playgroud)\n