将鼠标放在圆圈内


4

这是一个随机的问题。我希望能够将鼠标保持在一个圆圈(或正方形)内一段时间。

为了澄清,我希望鼠标能够像在边框屏幕中的较小屏幕中一样进行操作。它仍将由用户操作,但不会移动到较小的区域之外。它仍将能够与其下方的已激活应用程序进行交互。它将无法越过小区域。

例如:

  1. 使用命令设置终端以运行脚本或其他内容
  2. 将鼠标移到特定位置
  3. 通过按回车运行终端命令
  4. 现在,鼠标将仅在其所在点的特定半径内移动
  5. 为了停止这种行为,我想我将不得不右键单击鼠标或双击鼠标,或者在终端上运行键盘,然后再执行其他操作。

这是可以用xdotool或类似工具完成的吗?


可以使用Python或类似工具将其自动化-尽管您的要求有些含糊。我假设您希望鼠标在形状内随机移动(而不是跳动)?
卡兹·沃尔夫

我试图澄清
Xorile博士17年

3
看一下pfanne在LinuxQuestions.org上发布的脚本 -限制鼠标移动。它基本上是一组if then使用xdotool来将鼠标保持在边界矩形中。
J. Starnes

那正是我想要的!完善。谢谢
Xorile博士17/09/25

@ J.Starnes我建议您根据自己的评论
年长者怪胎

Answers:


4

对于使用Wayland的用户,这种类型的虚假输入已从Wayland的安全性设计中明确排除。见@ grawity的回答韦兰替代为Xorg的xdotool对相关问题的讨论。

下面的脚本演示了如何将鼠标约束到启动脚本时所经过的窗口。在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.