web-dev-qa-db-fra.com

Est-il possible d'exécuter une commande chaque fois que la souris se déplace?

Je voudrais exécuter un script chaque fois que je déplace ma souris.

C’est la première étape dans la création d’une solution de contournement afin que je puisse utiliser 100% des bords de mon moniteur doivent être placés entre eux .

Est-ce possible?

3
Jack

La question littéralement

Détection de la souris mouvement, peut être fait avec plusieurs outils. Deux exemples:

  1. Utilisation de xdotool dans un script:
    [vous auriez besoin de xdotool pour être installé]:

    Sudo apt-get install xdotool
    
    • Comparez (en boucle) deux positions de souris, avec un intervalle de temps:
      La commande permettant d’obtenir la position de souris à partir de xdotool:

      $ xdotool getmouselocation
      x:1449 y:137 screen:0 window:79691788
      
    • Si nous analysons cette sortie dans un script (python), nous pouvons le laisser exécuter une commande si la souris se déplace (si position1 n'est pas égal à 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
      
  2. Utilisation de (python) tkinter Le même processus peut également être effectué avec python's __ propre sname tkinter:

    [vous auriez besoin de tkinter3 pour être installé]:

    Sudo apt-get install python3-tk
    
    • Le script, en utilisant 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()
      

Un exemple lié à ce que vous visez

Voici un exemple de ce qui peut être fait pour contrôler la commande à exécuter lorsque la souris viole ne certaine position (ligne) ci-dessous.

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

Dans cet exemple, la souris fait un saut lorsque vous la déplacez de gauche à droite ou inversement:

enter image description here

Dans ce cas, la souris saute n saut fixe. Cependant, en incorporant quelques mathématiques et en déplaçant la ligne de saut vers la droite de votre écran (+ un "arrangement" séparé pour le haut à gauche du deuxième écran), vous pouvez faire le saut proportionnellement, pour créer la configuration que vous vouliez dans votre première question: créez (dans une configuration à double écran) les deux écrans semblez de la même résolution verticale lorsque vous déplacez la souris d’un écran à un autre.

Le "coin mort" où vous ne pouvez pas déplacer la souris d'un écran à un autre n'existerait pas alors. (J'ai une situation de travail sur mes deux écrans)

Cela aurait toujours un effet étrange avec les fenêtres si elles sont réparties sur les deux écrans, mais cela peut être fait.

enter image description here

5
Jacob Vlijm

Non, ce n'est pas possible sans personnaliser les pilotes de votre environnement X. Il devrait y avoir des méthodes de changement de configuration pour faire ce que vous voulez.

0
Asaf Bartov