Como definir a posição do cursor com o comando / script?

3

Eu tenho um script que redefine algumas coisas, e no final eu preciso definir o cursor para certas coordenadas, seja para um conjunto personalizado ou para o centro da tela (onde é redefinido por padrão quando reiniciando gnome-shell por exemplo).

Como isso pode ser alcançado? A solução teria que funcionar para todos os tamanhos de exibição e ser capaz de obter automaticamente os dados e fazer todos os cálculos matemáticos envolvidos.

Estou executando o Ubuntu GNOME 16.04 com o GNOME 3.20.

    
por Jacob Vlijm 29.06.2016 / 23:00

1 resposta

4

Mover o mouse para uma posição definida (absoluta)

.. é feito simplesmente pelo comando (por exemplo):

xdotool mousemove 200 200

Para mover o mouse para o centro da tela, porém, é um comando relativo , para o qual precisamos ler as informações da tela e fazer alguns cálculos. Isso é feito nos dois pequenos scripts abaixo.

Versão simples (mova o cursor para o centro da tela esquerda)

Para mover o mouse para o centro da tela (mais à esquerda), use o script abaixo:

#!/usr/bin/env python3
import subprocess

xr = [s for s in subprocess.check_output("xrandr").decode("utf-8").split() if "+0+" in s]
scr = [int(n)/2 for n in xr[0].split("+")[0].split("x")]
subprocess.Popen(["xdotool", "mousemove", str(scr[0]), str(scr[1])])
  • instale o xdotool

    sudo apt-get install xdotool
    
  • Copie o script em um arquivo vazio, salve-o como center_screen.py

  • Execute:

    python3 /path/to/center_screen.py
    

Versão estendida (argumentos opcionais x, y)

Se as coordenadas arbitrárias forem opcionais , use:

#!/usr/bin/env python3
import subprocess
import sys

if sys.argv[1:]:
    scr = [sys.argv[1], sys.argv[2]]
else:
    xr = [s for s in subprocess.check_output("xrandr").decode("utf-8").split() if "+0+" in s]
    scr = [str(int(n)/2) for n in xr[0].split("+")[0].split("x")]

subprocess.Popen(["xdotool", "mousemove", scr[0], scr[1]])

Esta versão moverá o cursor para o centro da tela, quando executado sem argumentos, ou para uma posição arbitrária, quando executado com argumentos , por exemplo:

python3 /path/to/center_screen.py 200 200

Explicação

Na saída do comando: xrandr , tudo que precisamos encontrar é a string como:

1680x1050+0+0

... que contém os dados na tela mais à esquerda ( +0+ ). ambas as figuras em 1680x1050 são então divididas por duas, para serem usadas em:

xdotool mousemove <x> <y>

A linha:

if sys.argv[1:]:

decide então se os argumentos dados devem ser usados ou calculados.

    
por Jacob Vlijm 29.06.2016 / 23:14