Чи є для Ubuntu зручне робоче середовище для динамічного багатокористувацького робочого столу?


14

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

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

Але щоразу, коли я підключаю / відключаю зовнішній монітор, все моє ретельне розташування пропадає. Це мене справді божеволіє .

Чи існує середовище робочого столу, яке просто залишає вікна в спокої, коли ви підключаєте / відключаєте другий монітор? Або ще краще, що пам’ятає розташування вікон за розташуванням монітора? Так що, коли я перейшов із свого домашнього офісу (17-дюймовий монітор на екрані ноутбука) на своє звичайне робоче місце (21-дюймовий монітор зліва від екрану ноутбука) або на робочий стіл мого колеги (19-дюймовий монітор праворуч від екрана ноутбука), Windows опиняється там, де вони востаннє були підключені до монітора, або залишаються поміщеними, якщо вони ніколи не бачили цього монітора.

Те, як єдність "обробляє" зовнішні монітори, просто засмучує мене, і хотілося б, щоб я не мав усіх цих додаткових моніторів для підключення, і як тільки я підключаю, це змушує мене прикуватися до цього розташування, як ніби у мене на робочому столі прибита машина.


Це трапляється з будь-яким менеджером вікон? GNOME 3, KDE, LXDE, XFCE?
Брайам

Не знаю. Це відбувається з єдністю.
artm

Ви знайшли хороше рішення для цього? Мене змусили використовувати ноутбук Dell, на який я поставив ubuntu, але я звик до свого MacBook Pro. На Mac існує програма під назвою «Перебування», яка є незамінною, оскільки вона запам'ятовує місця розташування вікон для кожної конфігурації монітора. Підключіть монітор, усі вікна переміщуються туди, де вони були. Підключіть другий монітор, вони знову рухаються. Від'єднавшись від мережі, усі вони повертаються туди, де були. Крім того, Mac достатньо розумний навіть без перебування, щоб переконатися, що всі вікна видно. На цьому ноутбуці 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

Коли ви виконаєте другий сценарій, він відновить ваше місце розташування Windows з точним розміром для всіх ваших Windows.

Використання

Збережіть ці сценарії у своєму $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

Сподіваюся, це вирішить вашу проблему. Ось знімок екрана,

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


Нічого, дякую, це виглядає перспективно. Я спробую сценарії спробувати.
artm

@artm Я відредагував невеликий глюк і помилку, тепер, здається, добре. Я тестував його на Unity та Gnome-backback-session, повинен працювати на gnome3. Повідомте мене, якщо ви зіткнулися з будь-яким питанням.
souravc

@artm, це має бути вашим рішенням, коли ви бажаєте видалити .my_windows_config.txt. Якщо ви хочете кілька разів завантажити ту саму конфігурацію Windows, ви можете зберегти її. Але якщо ви запускаєте цілком новий сеанс, ідентифікатор Windows буде іншим, і в цьому випадку краще видалити старий файл конфігурації на $HOME/.my_windows_config.txt. Перед збереженням нової конфігурації потрібно видалити збережений файл конфігурації вручну.
souravc

На XFCE4 в Ubuntu 18.04 мені довелося змінити гравітацію (спочатку "0" в параметрі -e) на 31, інакше вікна відновили приблизно на 31 піксель вправо і вниз там, де вони були. Я думаю, що це може бути розмір панелі XFCE за замовчуванням. Дякуємо за код!
аком

-1

Тут поширений посібник: Резолюція

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

У вас є:
чотири способи налаштування

  1. За сеансом з .xprofile.

  2. Динамічно за допомогою інструмента xrandr

  3. Статично, встановивши в xorg.conf.

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

Хороша відповідь - Параметри для кількох моніторів не зберігаються

Щоб обійти управління вікнами у своїх робочих просторах, ви можете використовувати систему профілювання, надану Compiz Config Manager


2
У мене немає проблем з роздільною здатністю або режимом відображення - вони працюють як слід.
artm

Тож будь-яке середовище робочого столу для вас ДРУЖЕ. Не звинувачуйте публіку, будь ласка.
стрімкий

Я нікого не звинувачую. Я просто хочу, щоб відкриті вікна залишалися там, де я їх розміщував під час підключення / відключення моніторів.
artm

Отже, у вас є чотири рішення з офіційним посиланням. Моя відповідь адекватно висвітлює ваше «божевілля»;)
стрімко

2
О, просто спробуйте самі: відкрийте вікно на кожній робочій області, а потім підключіть монітор, який з’являється у верхній частині початкового екрана, і подивіться, куди потрапляють вікна. Потім скажіть, наскільки xrandr має відношення до того, щоб зупинити вікна від випадкових стрибків, коли підключено монітор.
artm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.