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?
Détection de la souris mouvement, peut être fait avec plusieurs outils. Deux exemples:
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
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()
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:
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.
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.