Как переместиться от экрана 1 до экрана 3 движущимся курсором налево и наоборот?

Если я должен переместить мышь с левого экрана полностью на правильный экран, расстояние является довольно большим.

Существует ли способ фактически соединить стороны экрана, как будто они были расположены в кругу? Я мог затем переместиться от левого экрана до правильного экрана путем простого перемещения курсора налево.

6
задан 15 December 2015 в 17:24

2 ответа

Сценарий для подключения экранов "круговой"

Сценарий ниже будет делать то, что вы описываете; если мышь коснётся правого края правого (- крайнего) экрана, то мышь снова появится на левом (- крайнем) экране. Если она коснется левой стороны левого экрана, она снова появится в правой части правого экрана.

Built- in precaution

Script предполагает, что экраны расположены в конфигурации, не перекрывающейся x-wise, но имеет встроенную коррекцию в случае, если экраны не выровнены сверху, или имеют другое разрешение y-. Хотя в большинстве случаев вы не столкнетесь с проблемами, в ситуации, описанной ниже, вы столкнетесь с ними, если только скрипт не учтет возможные различия в y-разрешении и /или (un-) выравнивании экранов:


enter image description here

Если верхняя часть левого экрана находится ниже верхней части правого экрана, курсор перемещается из верхней части правого экрана в верхнюю часть левого экрана. Возможно, не-выровненный нижний idem ditto


Сценарий

#!/usr/bin/env python3
import subprocess
import time

def get_screendata():
    data = [s.split("+") for s in subprocess.check_output(["xrandr"]).decode("utf-8").split() \
            if s.count("+") == 2]
    # calculate total x-size of spanning screens
    x_span = sum([int(item[0].split("x")[0]) for item in data])
    # sort screens to find first/last screen (also for 2+ screens)
    data.sort(key=lambda x: x[1])
    # find (possible) screen offset of first/last screen and vertical area
    scr_first = data[0]; shiftl = int(scr_first[2])
    areal = [shiftl, shiftl+int(scr_first[0].split("x")[1])] 
    scr_last = data[-1]; shiftr = int(scr_last[2])
    arear = [shiftr, shiftr+int(scr_last[0].split("x")[1])]   
    return (x_span, areal, arear)

screendata = get_screendata()
x_span = screendata[0]; areal = screendata[1]; arear = screendata[2]
new_coords = []

while True:
    time.sleep(0.5)
    new_coords = []
    # read the current mouse position
    pos = [int(s.split(":")[-1]) for s in \
           subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()\
           if any(["x" in s, "y" in s])]
    # if the mouse is on the left of the first screen
    if pos[0] == 0:
        new_coords.append(x_span-2)
        if pos[1] <=  arear[0]:
            new_coords.append(arear[0]+2)
        elif pos[1] >= arear[1]:
            new_coords.append(arear[1]-2)
        else:
            new_coords.append(pos[1])
    # if the mouse is on the right of the last screen
    elif pos[0] > x_span-2:
        new_coords.append(2)
        if pos[1] <=  areal[0]:
            new_coords.append(areal[0]+2)
        elif pos[1] >= areal[1]:
            new_coords.append(areal[1]-2)
        else:
            new_coords.append(pos[1])
    # move the mouse
    if new_coords:
        subprocess.Popen(["xdotool", "mousemove", str(new_coords[0]), str(new_coords[1])])

Как использовать

  1. Сценарий нуждается xdotool

    sudo apt-получить установку xdotool
    
  2. Скопируйте скрипт в пустой файл, сохраните его как circular_mouse.py
  3. Test- запустите скрипт, запустив его в терминале:

    python3 /path/to/circular_mouse.py.
    

    Вы должны быть в состоянии сделать бесконечное движение мыши вправо или влево, циркулируя по экранам.

  4. Если все работает нормально, добавьте его для запуска приложений: Dash > Запуск приложений > Добавить команду:

    /bin/bash -c "sleep 15 && python3 /path/to/circular_mouse.py". 
    
5
ответ дан 23 November 2019 в 07:55

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

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