击键时模拟鼠标点击

use*_*541 7 mouse touchpad bash keyboard shortcut-keys

我试图在 Home 键按下时模拟鼠标左键按下,当 Home 键松开时模拟鼠标左键按下。

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

这就是我所拥有的。首先我使用 xbindkeys 工具。我将此条目添加到 .xbindkeysrc 中:

"~/bin/mouse-click"
  m:0x0 + c:110
Run Code Online (Sandbox Code Playgroud)

鼠标单击是这个 bash 脚本:

#!/bin/bash
xdotool mousedown 1
Run Code Online (Sandbox Code Playgroud)

问题是点击永远不会被释放,所以我需要找到一种方法来检测“主页”的释放。这是我正在尝试编写的脚本。评论描述了我正在尝试做的事情:

#!/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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我还将我的结束键映射为中键,所以我可以用它来粘贴:xmodmap -e "keycode 110 = Pointer_Button1"

use*_*541 4

解决办法是

xmodmap -e "keycode 115 = Pointer_Button2"
Run Code Online (Sandbox Code Playgroud)

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

我还将我的 End 键映射为中键单击,因此我可以使用它来粘贴:

xmodmap -e "keycode 110 = Pointer_Button1"
Run Code Online (Sandbox Code Playgroud)

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

dconf write /org/gnome/desktop/a11y/keyboard/mousekeys-enable true
dconf write /org/gnome/desktop/a11y/keyboard/mousekeys-enable false
Run Code Online (Sandbox Code Playgroud)


Xen*_*050 3

大多数桌面都有一些辅助功能设置,可以使用内置键盘控制鼠标,例如 XFCE 在“所有设置”->“辅助功能”->“鼠标”->“鼠标模拟”中都有这些设置,它使用键盘数字键盘,因此 5 键可以准确地执行操作你想做什么。

如果我记得的话,gnome、cinnamon 和 mate 在“辅助功能”或辅助技术等方面具有类似的功能。或者像 mousetweaks(“GNOME 桌面的鼠标辅助功能增强”)或 keynav 这样的可安装程序/包(但我不能)不能让它在 xfce 上工作)。

或者,如果您的触摸板仍然可以正常工作(只是按钮不行),您只需轻按一下即可,轻按然后按住即可单击并拖动,双击=双击...如果他们不这样做不起作用,终端中应该有一两行可以让它们工作(现在不要立即记住它们)。当还有一些其他选项应该起作用时,我不想编写自己的脚本