Наслаждаясь настройкой нескольких мониторов дома и на работе, но не знаете, как перемещать фокус между отдельными мониторами (например, «экранами») без мыши?
Сочетания клавиш отлично подходят для переключения виртуальных рабочих столов, и я посмотрел на различные варианты в ccsm
, но ничего не пришло в голову.
Я также смотрю на другие вопросы, такие как переключение фокуса между отдельными экранами X или ссылки на dualscreenmouseutils и switchscreen , но все они, кажется, касаются отдельные экраны в соответствии с xorg.conf
. В наши дни Unity «просто работает» с несколькими мониторами (через порт дисплея), поэтому это немного смущает богатство.
Но любые советы о том, как перемещаться по нескольким (физическим) экранам в пределах одного (виртуального) дисплея Unity, были бы очень кстати.
Сценарий ниже переключится (и "фокус") между левым и правым экраном, если оба экрана будут более или менее центром - или вершина, выровненная, и более или менее того же вертикального разрешения.
Я принимаю в практически всех ситуациях слева/справа экранная установка, она будет работать.
#!/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"])
Потребность сценария xdotool
быть установленным (!)
sudo apt-get install xdotool
Скопируйте сценарий в пустой файл, сохраните его как toggle_screenloc.py
Тестовый прогон это командой:
python3 /path/to/toggle_screenloc.py
Если все хорошо работает, добавьте его к сочетанию клавиш: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
python3 /path/to/toggle_screenloc.py
Если скрипт запущен, это:
xrandr
команда.это видит, находится ли мышь на лево-или правильном экране путем проверки (xdotool
) команда:
xdotool getmouselocation
Если указатель мыши расположен на левом экране:
Если указатель мыши находится на правильном экране:
Впоследствии, щелчки мышью единственное время для установки внимания на (возможное) полноэкранное приложение (дополнительно).
Ответ Джейкоба Влиджма имеет верное представление, но есть другие пути. Вот мое взятие:
#!/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 пкс в качестве разделительной линии.
этот репозиторий может помочь Вам
https://github.com/Eitol/screen_focus_changer
, который Вы помещаете, focus_changer.py, оставленный сценарий в фиксированном месте (/, выбирают, например), И затем добавьте привязку клавиш / ярлык / горячая клавиша в Ваших настройках
python3/opt/focus_changer.py, оставленный Фокус # левому
право python3/opt/focus_changer.py # Фокус к праву