这是一个有点随机的问题。我希望能够让鼠标在一段时间内保持在一个圆圈(或正方形)内。
澄清一下,我希望鼠标能够像在边框屏幕内较小的屏幕中一样操作。它仍将由用户操作,但不会移出较小的区域。它仍将能够与其下方的激活应用程序进行交互。它只是无法移出小区域。
例如:
- 使用命令设置终端来运行脚本或其他东西
- 将鼠标移动到特定位置
- 按 Enter 键运行终端命令
- 现在鼠标只能在它所在点的特定半径内移动
- 为了停止这种行为,我想我必须右键单击鼠标或双击,或者键盘移动到终端并运行其他程序。
这可以用 xdotool 或者类似的东西来完成吗?
答案1
对于使用 Wayland 的用户,出于安全考虑,Wayland 的设计明确排除了这种虚假输入。请参阅@grawity 的回答到xorg 的 xdotool 的 Wayland 替代品进行相关问题的讨论。
下面的脚本演示了如何将鼠标限制在脚本启动时所在的窗口。更改命令中的测试while
以测试任务是否已完成将显著改善脚本。取消注释 sleep 命令将允许任务作为技能测试/谜题位于原始窗口之外。
#!/bin/bash
###
#a script to demonstrate using xdotool to restrict mouse movement to a single window. Inspired by a script posted by pfanne on LinuxQuestions.org
###
#original mouselocation
POS=$(xdotool getmouselocation | sed 's/:/ /g')
WINDOW=$(echo $POS | cut -d' ' -f8)
XPOS=$(echo $POS | cut -d' ' -f2)
YPOS=$(echo $POS | cut -d' ' -f4)
while [ true ]
do
if [ $WINDOW != $(xdotool getmouselocation | sed 's/:/ /g' | cut -d' ' -f8 ) ];
then
xdotool mousemove $XPOS $YPOS;
#sleep 1
fi
done
pfanne 编写的这个脚本演示了如何使用任意矩形来约束鼠标的位置。
#!/bin/bash
borderxl=$1
borderyu=$2
borderxr=$3
borderyd=$4
check=0
if [ $borderxl -gt $borderxr ]
then
check=1
fi
if [ $borderyu -gt $borderyd ]
then
check=1
fi
if [ $check -ge "1" ]
then
echo "Make sure the first coordinate pair refers to the upper left corner"
echo "and the second pair refers to the lower right one."
fi
if [ $check -lt "1" ]
then
while [ true ]
do
check=0
declare -a pos
pos=$(xdotool getmouselocation)
#xpos=`xdotool getmouselocation | awk '{ print $1}'`
#xpos=${xpos:2}
#xpos=`getcurpos | awk '{ print $1}'`
#ypos=`xdotool getmouselocation | awk '{ print $2}'`
#ypos=${ypos:2}
#ypos=`getcurpos | awk '{ print $2}'`
if [ $xpos -gt $borderxr ]
then
check=1
xpos=$borderxr
fi
if [ $ypos -gt $borderyd ]
then
check=1
ypos=$borderyd
fi
if [ $xpos -lt $borderxl ]
then
check=1
xpos=$borderxl
fi
if [ $ypos -lt $borderyu ]
then
check=1
ypos=$borderyu
fi
if [ $check -ge "1" ]
then
xdotool mousemove $xpos $ypos
fi
done
fi