Сочетание клавиш Unity для перемещения мыши (и фокуса) с одного экрана на другой

Наслаждаясь настройкой нескольких мониторов дома и на работе, но не знаете, как перемещать фокус между отдельными мониторами (например, «экранами») без мыши?

Сочетания клавиш отлично подходят для переключения виртуальных рабочих столов, и я посмотрел на различные варианты в ccsm, но ничего не пришло в голову.

Я также смотрю на другие вопросы, такие как переключение фокуса между отдельными экранами X или ссылки на dualscreenmouseutils и switchscreen , но все они, кажется, касаются отдельные экраны в соответствии с xorg.conf. В наши дни Unity «просто работает» с несколькими мониторами (через порт дисплея), поэтому это немного смущает богатство.

Но любые советы о том, как перемещаться по нескольким (физическим) экранам в пределах одного (виртуального) дисплея Unity, были бы очень кстати.

6
задан 13 April 2017 в 15:24

3 ответа

Переключитесь между экранами и (дополнительно) установите внимание на (полный экран) окно

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

Сценарий

#!/usr/bin/env python3
import subprocess
# just a helper function
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
# get the current mouse position
current = [int(n) for n in [it.split(":")[1] for it in get(["xdotool", "getmouselocation"]).split()[:2]]]
# get the x/y size of the left screen
screendata = [(s.split("x")[0], s.split("x")[1].split("+")[0]) for s in get(["xrandr"]).split() if "+0+0" in s ][0]
xy = [int(n) for n in screendata]
# see if the mouse is on the left- or right screen
if current[0] < xy[0]:
    # if the mouse currently is on the left screen, move it to the right (from the middle of the left screen)
    command = ["xdotool", "mousemove", "--sync", str(current[0]+xy[0]), str(xy[1]/2)]
else:
    # if the mouse currently is on the left screen, move it to the right (from the middle of the left screen)
    command = ["xdotool", "mousemove", "--sync", str(current[0]-xy[0]), str(xy[1]/2)]

subprocess.Popen(command)
# optional: click after the mouse move: comment out if not needed / wanted
subprocess.Popen(["xdotool", "click", "1"])

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

  1. Потребность сценария xdotool быть установленным (!)

    sudo apt-get install xdotool
    
  2. Скопируйте сценарий в пустой файл, сохраните его как toggle_screenloc.py

  3. Тестовый прогон это командой:

    python3 /path/to/toggle_screenloc.py
    
  4. Если все хорошо работает, добавьте его к сочетанию клавиш: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

    python3 /path/to/toggle_screenloc.py
    

Что это делает точно

Если скрипт запущен, это:

  1. получает размер (слева) экрана (x/y) из вывода xrandr команда.
  2. это видит, находится ли мышь на лево-или правильном экране путем проверки (xdotool) команда:

    xdotool getmouselocation
    

Если указатель мыши расположен на левом экране:

  • это перемещено в середину (вертикально) левого экрана и горизонтально перемещено в положение, равное текущей позиции + ширина левого экрана.

Если указатель мыши находится на правильном экране:

  • действия являются противоположным.

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

5
ответ дан 14 April 2017 в 01:24
  • 1
    Возможно, это работает, но перекомпиляция каждого обновления ядра утомительна. Я наконец купил хорошо поддерживаемого PCI Ethernet. Спасибо за усилие Mark – David 21 June 2017 в 09:34

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

#!/bin/bash

eval $(xdotool getmouselocation --shell)

if [ $Y -gt 1080 ]
then
    theta=0
else
    theta=180
fi

xdotool mousemove_relative --polar $theta 1080

eval $(xdotool getmouselocation --shell)

xdotool windowfocus $WINDOW

упрощение прибывает из использования xdotool getmouselocation --shell, который удобно сваливает переменные в бегущий сценарий. Это также позволяет нам сосредоточить окно без нажатия, у которого могли быть побочные эффекты, которые мы не хотим.

Примечание, что в моем случае, мои показы сложены вертикально, таким образом, я перемещаю мышь вверх (тета = 0) или вниз (тета = 180). Я также выбираю 1080 пкс в качестве разделительной линии.

4
ответ дан 14 April 2017 в 01:24
  • 1
    Спасибо за Ваш полный отчет! Я вижу различные изменения в таблице маршрутизации, чем Вы, †“моя VPN, кажется, добавляют много маршрутов, динамично поскольку они используются, я подозреваю. Однако отключение systemd-разрешенного работало очень хорошо на мою проблему также! – aweibell 20 December 2016 в 04:35

этот репозиторий может помочь Вам

https://github.com/Eitol/screen_focus_changer

, который Вы помещаете, focus_changer.py, оставленный сценарий в фиксированном месте (/, выбирают, например), И затем добавьте привязку клавиш / ярлык / горячая клавиша в Ваших настройках

python3/opt/focus_changer.py, оставленный Фокус # левому

право python3/opt/focus_changer.py # Фокус к праву

1
ответ дан 1 October 2019 в 16:21

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

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