Mantenha o mouse dentro do círculo

4

Esta é uma pergunta aleatória. Eu gostaria de poder manter meu mouse dentro de um círculo (ou quadrado) por um período de tempo.

Para esclarecer, eu gostaria que o mouse operasse como se estivesse dentro de uma tela menor dentro da tela de borda. Ele ainda será operado pelo usuário, mas simplesmente não será movido além da área menor. Ele ainda poderá interagir com o aplicativo ativado abaixo dele. Não será capaz de passar pela pequena área.

Por exemplo:

  1. Configurar terminal com um comando para executar um script ou algo
  2. Mova o mouse para um ponto específico
  3. Executar o comando do terminal, pressionando enter
  4. Agora o mouse só se moverá dentro de um determinado raio do ponto em que estava
  5. Para interromper o comportamento, acho que teria de clicar com o botão direito do mouse ou clicar duas vezes ou passar o teclado no terminal e executar outra coisa.

Isso é algo que pode ser feito com xdotool ou algo assim?

    
por Dr Xorile 23.09.2017 / 02:39

1 resposta

3

Para aqueles que usam o Wayland, esse tipo de entrada falsa foi explicitamente excluída do design do Wayland por segurança. Veja @ resposta do grawity para Alternativa de Wayland para o xdotool do xorg para uma discussão de um problema relacionado.

O script abaixo demonstra a restrição do mouse para a janela quando o script foi iniciado. Alterar o teste no comando while para testar se uma tarefa foi concluída melhoraria significativamente o script. Descomentar o comando sleep permitiria que a tarefa estivesse fora da janela original como um teste de habilidade / quebra-cabeça.

 
#!/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

Este script de pfanne demonstra o uso de um retângulo arbitrário para restringir a localização dos mouses.

#!/bin/bash

borderxl=
borderyu=

borderxr=
borderyd=

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 }''
            #xpos=${xpos:2}
            #xpos='getcurpos | awk '{ print }''
            #ypos='xdotool getmouselocation | awk '{ print }''
            #ypos=${ypos:2}
            #ypos='getcurpos | awk '{ print }''

            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
    
por J. Starnes 30.09.2017 / 20:28

Tags