按下按键时模拟鼠标点击

按下按键时模拟鼠标点击

我试图在 Home 键按下时模拟鼠标左键按下,并在 Home 键释放时模拟鼠标左键释放。

背后的原因是我的触摸板按钮太糟糕了,我喜欢使用鼠标左键单击轨迹点(红色乳头)来突出显示(复制)文本。我不想使用触摸板按钮,而是想使用“Home”键。我可以模拟鼠标按下部分,但我不知道如何在释放“Home”键时释放单击。

这是我所要做的。首先,我使用 xbindkeys 工具。我将此条目添加到 .xbindkeysrc:

"~/bin/mouse-click"
  m:0x0 + c:110

鼠标单击是这个 bash 脚本:

#!/bin/bash
xdotool mousedown 1

问题是点击从未被释放,所以我需要找到一种方法来检测“Home”的释放。这是我试图编写的脚本。注释描述了我正在尝试做的事情:

#!/bin/bash

# not sure how to do that:
exit if Home key is in a pressed state (to avoid more mousedown actions)

xdotool mousedown 1

# not sure how to do that: (if Home key is released, release the mouse click)
while xinput query-state <device name> | grep -Flq 'key[9]=up'
xdotool mouseup 1

所以这就是我想弄清楚的:

  1. 查询‘Home’键的状态(是否按下)。
  2. 监听键盘事件并检测“Home”键的释放。

如果有更好的方法来实现这一点,我很乐意听听。谢谢!

编辑:解决方案只有一行: xmodmap -e "键码 115 = Pointer_Button2"
所以现在我的 Home 键正在执行左键单击,并且行为就像我按下鼠标单击一样,我可以按住该键并按预期突出显示(复制)。

我还将 End 键映射为中键单击,因此我可以使用它来粘贴:xmodmap -e "keycode 110 = Pointer_Button1"

答案1

解决方案是

xmodmap -e "keycode 115 = Pointer_Button2"

现在我的 Home 键正在执行左键单击,其行为就像我按下鼠标单击一样,我可以按住该键并按预期突出显示(复制)。

我还将 End 键映射为鼠标中键,这样我就可以用它来粘贴:

xmodmap -e "keycode 110 = Pointer_Button1"

请注意,要使此功能正常工作,必须启用“鼠标键”(使用数字键盘的鼠标模拟)。可以通过按Shift+来切换“鼠标键” NumLock,或通过运行以下命令明确设置:

dconf write /org/gnome/desktop/a11y/keyboard/mousekeys-enable true
dconf write /org/gnome/desktop/a11y/keyboard/mousekeys-enable false

答案2

大多数桌面都有一些辅助功能设置,可以通过内置键盘来控制鼠标,例如 XFCE 在其“所有设置”->“辅助功能”->“鼠标”->“鼠标模拟”中都有这些设置,它使用键盘数字键盘,因此 5 键可以完全按照您的要求执行操作。

如果我没记错的话,gnome、cinnamon 和 mate 在“辅助功能”或辅助技术等下具有类似的功能。或者可安装的程序/包,如 mousetweaks(“GNOME 桌面的鼠标辅助功能增强功能”)或 keynav(但我无法让它在 xfce 上运行)。

或者,如果你的触摸板仍然正常工作(只是按钮不工作),你可以点击一次进行单击,点击然后按住进行单击并拖动,双击 = 双击... 如果它们不起作用,终端中应该有一两行代码可以让它们工作(现在记不清了)。当还有其他一些应该有效的选项时,我不想编写自己的脚本

答案3

你应该使用自动点击器模拟并自动化鼠标点击(在您的情况下为鼠标左键)的程序。

我建议你使用最大自动点击器适用于Ubuntu Linux以及其他类似 Debian 的发行版。

可用的软件包格式:.deb、.AppImage、.zip

相关内容