Есть ли способ выполнить команду каждый раз, когда мышь движется?
Я хотел бы запускать сценарий каждый раз, когда я двигаю мышью.
Это первый шаг к обходному пути, чтобы я мог использовать 100% краев монитора для перехода между ними.
Это возможно?
2 ответа
Вопрос буквально
Обнаружение движения мыши, может быть сделано с помощью нескольких инструментов. Два примера:
С помощью
xdotool
в скрипте:
[тебе нужноxdotool
быть установленным]:sudo apt-get install xdotool
Сравните (в цикле) две позиции мыши с интервалом времени:
Команда для получения положения мышиxdotool
:$ xdotool getmouselocation x:1449 y:137 screen:0 window:79691788
Если мы проанализируем этот вывод в скрипте (python), мы можем позволить ему выполнить команду, если мышь двигается (если position1 не равна 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
Использование (питона)
tkinter
Точно такой же процесс можно сделать сpython
собственныйtkinter
:[тебе нужно
tkinter3
быть установленным]:sudo apt-get install python3-tk
Сценарий, используя
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()
Пример, связанный с тем, к чему вы стремитесь
Пример того, что можно сделать, чтобы контролировать, какую команду запускать, когда мышь нарушает определенную позицию (линию) ниже.
#!/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
В этом примере мышь делает прыжок, когда вы перемещаете его слева направо или наоборот:
В этом случае мышь прыгает с фиксированным прыжком. Однако, добавив немного математики и переместив линию перехода в правую часть экрана (+ отдельное "расположение" в верхнем левом углу второго экрана), вы можете выполнить переход пропорционально, чтобы создать настройку, в которой вы находитесь. Цель первого вопроса: сделать так, чтобы (при настройке двух экранов) оба экрана выглядели одинаково по вертикали при перемещении мыши с одного экрана на другой.
"Мертвого угла", где вы не можете перемещать мышь с одного экрана на другой, тогда бы не было. (У меня на двух экранах рабочая ситуация)
Однако это все равно будет иметь странный эффект для окон, если они распределены по двум экранам, но это можно сделать.
Нет, это невозможно без настройки драйверов вашей X-среды. Должны быть методы изменения конфигурации, чтобы делать то, что вы хотите.