Существует ли в Ubuntu среда рабочего стола с поддержкой нескольких динамических мониторов?

14

Я использую ноутбук и люблю мигрировать в течение дня с одного (физического) рабочего места на другое и подключаться к внешнему монитору, если таковой имеется.

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

Но каждый раз, когда я подключаю / отключаю внешний монитор, все мои тщательные меры исчезают. Это сводит меня с ума .

Существует ли среда рабочего стола, которая просто оставляет окна в покое, когда вы подключаете / отключаете второй монитор? Или даже лучше, что помнит расположение окон на расположение монитора? Так что, когда я шел из моего домашнего офиса (17-дюймовый монитор сверху экрана ноутбука) на мое обычное рабочее место (21-дюймовый монитор слева от экрана ноутбука) или на стол моего коллеги (19-дюймовый монитор справа от экрана latop), окна оказываются там, где они были в последний раз, когда был подключен монитор - или оставайтесь на месте, если они никогда не видели этот монитор.

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

ARTM
источник
Это происходит с любым оконным менеджером? GNOME 3, KDE, LXDE, XFCE?
Брайам
Я не знаю. Это происходит с единством.
artm
Вы нашли хорошее решение для этого? Я был вынужден использовать ноутбук Dell, на котором я установил Ubuntu, но я привык к своему MacBook Pro. На Mac есть программа Stay, которая необходима, поскольку она запоминает расположение окон для каждой конфигурации монитора. Подключите монитор, все окна переместятся туда, где они были. Подключите второй монитор, все они снова начнут двигаться. Отключите все они возвращаются туда, где они были. Кроме того, Mac достаточно умен, даже без Stay, чтобы убедиться, что все окна видны. На этом ноутбуке с Ubuntu мне постоянно приходится искать окна, которые находятся за пределами экрана.
Greywire
Я не могу найти ничего, как остаться на Linux. Похоже, что вы можете получить всю информацию и контроль от отдельных команд, и сценарии ниже подходят близко. Я работаю над их улучшением, чтобы получить необходимую мне функциональность ...
Greywire
Оставайся звучит так, как мне не хватает. Нет, я не нашел решения.
artm

Ответы:

10

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

Вам нужно установить, wmctrlесли у вас его еще нет. Установить через терминал,

sudo apt-get install wmctrl

Скрипт для сохранения конфигурации windows

# Script_Name: save_window_conf.sh
#!/bin/bash
if [ -f $HOME/.my_windows_config.txt ]; then
    echo -e "Information: Previous configuration file \"$HOME/.my_windows_config.txt\" already exists.\nTo save a new configuration remove it manually using the following command,\n\n\trm $HOME/.my_windows_config.txt"
    exit 1
else
    wmctrl -p -G -l | awk '($2 != -1)&&($3 != 0)&&($NF != "Desktop")' | awk '{print $1}' | while read mywinid
    do
        xwininfo -id "$mywinid" >> $HOME/.my_windows_config.txt
    done
fi

При выполнении вышеупомянутый скрипт сохранит ваши положение и размер окон для всех ваших открытых окон в файл с именем .my_windows_config.txtв вашем домашнем каталоге. Это скрытый текстовый файл.

Скрипт для перезагрузки конфигурации Windows

# Script_Name: load_window_conf.sh
#!/bin/bash

file=$HOME/.my_windows_config.txt
declare -a mywinid
declare -a x
declare -a y
declare -a width
declare -a height

nl=$(cat "$file" | grep xwininfo |wc -l)

for i in $(seq 1 $nl)
do
    mywinid[i]=$(cat "$file" | grep "xwininfo" | awk -v p="$i" '{if(NR==p) print $4}')
    x[i]=$(cat "$file" | grep "Absolute upper-left X" | awk -v p="$i" '{if(NR==p) print $NF}')
    y[i]=$(cat "$file" | grep "Absolute upper-left Y" | awk -v p="$i" '{if(NR==p) print $NF}')
    width[i]=$(cat "$file" | grep "Width" | awk -v p="$i" '{if(NR==p) print $NF}')
    height[i]=$(cat "$file" | grep "Height" | awk -v p="$i" '{if(NR==p) print $NF}')
done

for it in $(seq 1 $nl)
do
    wmctrl -i -r "${mywinid[$it]}" -e 0,"${x[$it]}","${y[$it]}","${width[it]}","${height[it]}"
done

Когда вы выполните второй скрипт, он восстановит положение ваших окон с точным размером для всех ваших окон.

использование

Сохраните эти скрипты в вашем $HOME/bin/каталоге. Добавьте $HOME/bin/в свой PATH. Для этого добавьте эти строки в конце вашего$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

Это позволит вам выполнять эти сценарии только с их именем. Дать разрешение на выполнение скриптов,

chmod +x $HOME/bin/save_window_conf.sh
chmod +x $HOME/bin/load_window_conf.sh

Чтобы сохранить конфигурацию в вашем $HOME/.my_windows_config.txt

После того, как вы откроете и настроите все ваши окна, запустите в терминале,

save_window_conf.sh

Чтобы перезагрузить конфигурацию с вашего $HOME/.my_windows_config.txt

load_window_conf.sh

Надеюсь, это решит вашу проблему. Вот снимок экрана,

введите описание изображения здесь

souravc
источник
Вау, спасибо, это выглядит многообещающе. Я попробую сценарии.
artm
@artm Я отредактировал небольшой глюк и опечатку, теперь все в порядке. Я тестировал его на Unity и Gnome-fallback-session, должен работать на gnome3. Дайте мне знать, если у вас возникнут какие-либо проблемы.
souravc
@artm это должно быть ваше решение, когда вы хотите удалить .my_windows_config.txt. Если вы хотите загрузить одну и ту же конфигурацию Windows несколько раз для существующих окон, вы можете сохранить ее. Но если вы начнете совершенно новый сеанс, эти идентификаторы Windows будут другими, и в этом случае лучше удалить старый файл конфигурации по адресу $HOME/.my_windows_config.txt. Вам необходимо удалить сохраненный файл конфигурации вручную перед сохранением новой конфигурации.
souravc
На XFCE4 в Ubuntu 18.04 мне пришлось изменить гравитацию (сначала «0» в параметре -e) на 31, в противном случае окна были восстановлены примерно на 31px справа и вниз от того места, где они были. Я думаю, что это может быть размер панели XFCE по умолчанию. Спасибо за код!
АКОМ
-1

Общее руководство здесь: разрешение

Ваши решения о динамическом разрешении близки к Xorg & XrandR или Xinerama

У вас есть:
четыре способа настройки

  1. По сеансу с .xprofile.

  2. Динамически с помощью инструмента xrandr

  3. Статически, установив в xorg.conf.

  4. Графический интерфейс Xrandr.

Хороший ответ: настройки для нескольких мониторов не сохраняются

Для обхода вашего Window Management в ваших рабочих пространствах вы можете использовать систему профилирования, предоставленную Compiz Config Manager.

быстрый
источник
2
У меня нет проблем с разрешениями или схемами отображения - они работают как положено.
artm
Так что ЛЮБОЕ окружение рабочего стола ДРУЖЕСТВЕННО для вас. Не обвиняйте публику, пожалуйста.
быстрое
Я никого не виню. Я просто хочу, чтобы открытые окна оставались там, где я их ставил при подключении / отключении мониторов.
artm
Итак, у вас есть четыре решения с официальной ссылкой. Мой ответ адекватно прикрывает ваше «безумие»;)
swift
2
О, просто попробуйте сами: откройте окно в каждой рабочей области, затем подключите монитор, который отображается в верхней части исходного экрана, и посмотрите, где в конечном итоге находятся ваши окна. Тогда скажите мне, как xrandr имеет отношение к предотвращению случайного перехода окон при подключении монитора.
artm