A questão literalmente
Detectar o movimento do mouse , pode ser feito com várias ferramentas. Dois exemplos:
-
Usando
xdotool
em um script:
[você precisaria que oxdotool
fosse instalado]:sudo apt-get install xdotool
-
Compare (em um loop) duas posições do mouse, com um intervalo de tempo:
O comando para obter a posição do mouse dexdotool
:$ xdotool getmouselocation x:1449 y:137 screen:0 window:79691788
-
Se analisarmos essa saída em um script (python), podemos deixar que ele execute um comando se o mouse se mover (se position1 não for igual a position2):
#!/usr/bin/env python3 import subprocess import time def get_mousepos(): curr = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8") return [int(it.split(":")[1]) for it in curr.split()[:2]] current1 = get_mousepos() while True: time.sleep(0.5) current2 = get_mousepos() if not current1 == current2: # run a command: print("action") current1 = current2
-
-
Usando (python's)
tkinter
O mesmo processo exato também pode ser feito com o própriopython
:tkinter
:
[você precisaria que o
tkinter3
fosse instalado]:sudo apt-get install python3-tk
-
O script, usando
tkinter
:#!/usr/bin/env python3 from tkinter import* import time root = Tk() def current_position(): return [root.winfo_pointerx(), root.winfo_pointery()] pos1 = current_position() while True: time.sleep(0.5) pos2 = current_position() if not pos1 == pos2: # run a command: print("action!") pos1 = pos2 root.mainloop()
-
Um exemplo relacionado ao que você está procurando
Um exemplo do que pode ser feito para controlar o comando a ser executado quando o mouse ultrapassa uma determinada posição (linha) abaixo.
#!/usr/bin/env python3
import subprocess
def get_mousepos():
curr = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
return [int(it.split(":")[1]) for it in curr.split()[:2]]
current1 = get_mousepos()
while True:
current2 = get_mousepos()
# make the jump depend on the position and direction:
jump = 100 if current2[1] < 525 else -100
if current2[0] < 1000 and current1[0] >= 1000:
print("gone left") # you can run any other command here, like:
subprocess.Popen(["xdotool", "mousemove", str(current2[0]), str(current2[1]+jump)])
elif current2[0] > 1000 and current1[0] <= 1000:
print("gone right") # you can run any other command here
subprocess.Popen(["xdotool", "mousemove", str(current2[0]), str(current2[1]-jump)])
current1 = current2
Neste exemplo, o mouse faz um pulo quando você o move da esquerda para a direita ou vice-versa:
Neste caso, o mouse salta um salto fixo . No entanto, jogando matemática e movendo a linha de salto para o lado direito da tela (+ um "arranjo" separado para o canto superior esquerdo da segunda tela), você pode fazer o salto proporcionalmente , para criar a configuração que você deseja em sua primeira pergunta: faça (em uma configuração de tela dupla) as duas telas parecem da mesma resolução vertical ao mover o mouse de uma tela para outra.
O "canto morto", onde você não pode mover o mouse de uma tela para outra, não existiria. (Eu tenho uma situação de trabalho em minhas duas telas)
No entanto, ainda teria um efeito estranho com o windows se eles estiverem distribuídos nas duas telas, mas isso pode ser feito.