Размещение окон при переключении на несколько мониторов

Размещение окон при переключении на несколько мониторов

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

Затем вы переключаетесь обратно на конфигурацию с несколькими мониторами. Теперь у вас больше места на экране, но изначально все ваши окна свалены в кучу на одном мониторе. Было бы неплохо, если бы ваши окна вернулись на тот монитор, на котором они были изначально.

Есть идеи, как это осуществить?

решение1

xdotool

Грубая идея, но вы можете добиться желаемого, создав пару команд, используяxdotool. Затем вы можете запускать их соответствующим образом, когда у вас подключены 1 или 2 монитора.

В этой статье под названием есть довольно хороший пример того, как это можно сделать:Xubuntu – перемещение окон между мониторами.

выдержка из раздела: Перемещение активного окна на другой монитор (наконец-то!)

Вот что нам нужно сделать:

  • Найдите активное окно
  • Получите его развернутое состояние и запомните его.
  • Удалить максимизацию
  • Получите его геометрию
  • Рассчитайте новую позицию
  • Подвинь это
  • Максимизировать на основе предыдущего состояния
  • Поднять его

Вот скрипт, который это делает:

wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`

wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --shell $wid`

new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
  new_x=0
fi

xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
  wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi

xdotool windowraise $wid

Более интерактивный метод

Я также нашел другой подход, который также использовал, xdotoolно обернул его в скрипт оболочки, который затем можно было связать с сочетанием клавиш. Используя этот метод, можно было выбрать окно, чтобы оно было поднято и имело фокус, и, нажав сочетание клавиш, можно было отправить приложение в другое окно. Статья называется:Перемещение окон между мониторами.

Метод предоставляет следующий сценарий windowmove.sh:

#!/bin/bash
if [ $1 -eq 2 ]
then
POS1=`xrandr --current | head -2 | tail -1 | cut -d 'x' -f1 | cut -d ' ' -f3`
POS2=0
else
POS1=0
POS2=0
fi
/usr/bin/xdotool windowmove `/usr/bin/xdotool getwindowfocus` $POS1 $POS2
exit 0

POS1 вычисляет ширину вашего основного экрана, используя вывод xrandr. Если вы обнаружите, что скрипт не может перемещать окна вправо, но может перемещать их влево, попробуйте заменить эту строку на POS1=1920, а 1920 — на ширину в пикселях вашего основного монитора.

Затем запустите апплет «Привязки клавиатуры»:

$ gnome-keybinding-properties

ПРИМЕЧАНИЕ:Его можно запустить из разных мест на разных дистрибутивах через графический интерфейс.

Создайте 2 сочетания клавиш, используя эти 2 запуска приложений:

  • Команда привязки №1:./Scripts/windowmove.sh 1
  • Команда привязки №2:./Scripts/windowmove.sh 2

решение2

Нет необходимости в xdotool. Вы можете записать все местоположения окон, а затем восстановить их с помощью всего лишь wmctrl:

Записывать:wmctrl -lG > ${rcfile}

Место:

while read row; do
  IFS=" " read id g x y w h _ <<< ${row}
  wmctrl -ir ${id} -e 0,${x},${y},${w},${h}
done < ${rcfile}

Связанный контент