Существует ли способ выполнить команду каждый раз перемещения мыши?

Я хотел бы запустить скрипт каждый раз, когда я перемещаю свою мышь.

Это - первый шаг в создании обходного решения так, чтобы я мог использовать 100% своих краев монитора для движения между ними.

Действительно ли это возможно?

3
задан 13 April 2017 в 15:23

2 ответа

Нет, это не возможно, не настраивая драйверы Ваших X сред. Должны быть методы изменения конфигурации, чтобы сделать то, что Вы хотите.

0
ответ дан 1 December 2019 в 15:38

Вопрос буквально

Обнаружение движения мыши, может быть сделан с несколькими инструментами. Два примера:

  1. Используя xdotool в сценарии:
    [Вам было бы нужно xdotool быть установленным]:

    sudo apt-get install xdotool
    
    • Сравните (в цикле) два положения мыши с временным интервалом:
      Команда для получения mouseposition от 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
      
  2. Используя (Python) 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

В этом примере мышь делает переход при перемещении его слева направо или наоборот:

enter image description here

В этом случае мышь переходит фиксированный переход. Однако добавляя некоторую математику и перемещение строка перехода к правой стороне Вашего экрана (+ отдельное "расположение" относительно верхнего левого из второго экрана), можно сделать переход пропорционально, для создания установки что Вы где, стремясь в Вашем первом вопросе: сделайте (в двойной экранной установке), оба экрана кажутся того же вертикального разрешения при перемещении мыши от одного экрана до другого.

"Мертвый угол", куда Вы не можете переместить мышь от одного экрана до другого, не существовал бы затем. (У меня есть рабочая ситуация на моих двух экранах),

Это все еще имело бы странный эффект с окнами, если они, распространены по двум экранам однако, но это может быть сделано.

enter image description here

5
ответ дан 1 December 2019 в 15:38

Другие вопросы по тегам:

Похожие вопросы: