Вопрос Как перейти с экрана 1 на экран 3, перемещая курсор влево и наоборот?


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

Есть ли способ практически соединить стороны экрана, как если бы они были расположены по кругу? Затем я мог перемещаться с левого экрана на правый экран, просто перемещая курсор влево.


6
2017-11-02 09:02


происхождения




ответы:


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

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

Встроенные меры предосторожности

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


enter image description here

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


Сценарий

#!/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-get install xdotool
    
  2. Скопируйте сценарий в пустой файл, сохраните его как circular_mouse.py
  3. Проверить запуск сценария, выполнив в терминале:

    python3 /path/to/circular_mouse.py
    

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

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

    /bin/bash -c "sleep 15 &&  python3 /path/to/circular_mouse.py" 
    

4
2017-11-02 16:14



Таким образом, нет встроенного метода. благодаря - ubuntico
@ubuntico Я совершенно уверен, что нет. - Jacob Vlijm


Вы можете попробовать использовать Taralli, Вам нужно будет отредактировать map_beef.c для настройки собственного монитора.

Кроме того, @ohayden опубликовал скрипт bash Вот которые могут быть настроены для того, чтобы делать то, что вы хотите. Чтобы использовать его, вам необходимо установить xdotool запустив

sudo apt-get install xdotool

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


0
2017-11-27 18:57



Я скоро испытаю это. Просто общее правило, если цитирование внешних источников всегда добавляет соответствующие части ссылки к вашему собственному ответу в случае, если ссылка не работает. - k0pernikus
Привет Gsxr1k, оба сценария повышают использование процессора с 5% до 65% в моей системе. Слишком много для фонового скрипта. - Jacob Vlijm