我试图在 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
所以这就是我想弄清楚的:
- 查询‘Home’键的状态(是否按下)。
- 监听键盘事件并检测“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