Czy dla Ubuntu jest dostępne środowisko pulpitu dynamiczne z wieloma monitorami?

14

Używam laptopa i lubię migrować w ciągu dnia z jednego (fizycznego) miejsca pracy do drugiego i podłączam się do zewnętrznego monitora, jeśli jest dostępny.

Muszę też dużo wykonywać wiele zadań, więc mam wiele okien otwartych w danym momencie i wiele (wirtualnych) obszarów roboczych do ich organizacji.

Ale za każdym razem, gdy podłączam / odłączam monitor zewnętrzny, wszystkie moje staranne ustawienia znikają. To mnie naprawdę wścieka .

Czy istnieje środowisko pulpitu, które po prostu pozostawia okna w spokoju po podłączeniu / odłączeniu drugiego monitora? A może nawet lepiej, że pamięta układ okien na układ monitora? Kiedy więc przeszedłem z mojego domowego biura (monitor 17 "na górze ekranu laptopa) do mojego zwykłego miejsca pracy (monitor 21" z lewej strony ekranu laptopa) lub biurko mojego kolegi (monitor 19 "z prawej strony ekranu latop), okna kończą się tam, gdzie były ostatnim razem, gdy monitor był podłączony - lub pozostań na miejscu, jeśli nigdy nie widzieli tego monitora.

Sposób, w jaki jedność „radzi sobie” z zewnętrznymi monitorami, po prostu mnie zasmuca i żałuję, że nie mam wszystkich dodatkowych monitorów do podłączenia, a po podłączeniu jestem przykuty do tego układu, jakbym miał przybity komputer stacjonarny do podłogi.

artm
źródło
Czy dzieje się tak w przypadku dowolnego menedżera okien? GNOME 3, KDE, LXDE, XFCE?
Braiam
Nie wiem To się dzieje z jednością.
artm
Czy znalazłeś dobre rozwiązanie tego problemu? Zostałem zmuszony do korzystania z laptopa Dell, na którym założyłem ubuntu, ale jestem przyzwyczajony do mojego MacBooka Pro. Na komputerze Mac jest program o nazwie Stay, który jest niezbędny, ponieważ zapamiętuje położenia okien dla każdej konfiguracji monitora. Podłącz monitor, wszystkie okna zostaną przeniesione tam, gdzie były. Podłącz drugi monitor, wszystkie znów się ruszą. Po odłączeniu wszyscy wracają do miejsca, w którym byli. Co więcej, Mac jest wystarczająco inteligentny, nawet bez Stay, aby mieć pewność, że wszystkie okna są widoczne. Na tym laptopie Ubuntu wciąż muszę znajdować okna poza ekranem.
Greywire,
Nie mogę znaleźć czegoś takiego jak Stay on Linux. Wygląda na to, że możesz uzyskać wszystkie informacje i kontrolować z poszczególnych poleceń, a poniższe skrypty się zamykają. Pracuję nad ulepszeniem tych funkcji, aby uzyskać funkcjonalność, której potrzebuję ...
Greywire,
Stay brzmi jak to, czego mi brakuje. Nie, nie znalazłem rozwiązania.
artm

Odpowiedzi:

10

Dostarczam ci dwa skrypty powłoki. Pomoże Ci to zapisać układ pozycji i wielkości okien . Jeśli w jakiś sposób zakłócisz pożądane ustawienia okien, będziesz mógł przywrócić te ustawienia z dokładnym rozmiarem i położeniem okien dla wszystkich okien za pomocą tego skryptu.

Musisz zainstalować, wmctrlchyba że już go masz. Zainstaluj przez terminal,

sudo apt-get install wmctrl

Skrypt do zapisywania konfiguracji systemu 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

Po wykonaniu powyższy skrypt zapisze pozycję i rozmiar okna dla wszystkich otwartych okien w pliku o nazwie .my_windows_config.txtw katalogu domowym. To jest ukryty plik tekstowy.

Skrypt do przeładowania konfiguracji systemu 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

Po uruchomieniu drugiego skryptu przywróci on pozycję okna z dokładnym rozmiarem dla wszystkich okien.

Stosowanie

Zapisz te skrypty w swoim $HOME/bin/katalogu. Dodaj $HOME/bin/w swoim PATH. W tym celu dodaj te linie na końcu swojego$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

Umożliwi to wykonanie tych skryptów tylko z ich nazwami. Zezwól na wykonywanie skryptów,

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

Aby zapisać konfigurację w swoim $HOME/.my_windows_config.txt

Po otwarciu i dostosowaniu wszystkie okna działają w terminalu,

save_window_conf.sh

Aby ponownie załadować konfigurację z twojego $HOME/.my_windows_config.txt

load_window_conf.sh

Mam nadzieję, że rozwiąże Twój problem. Oto zrzut ekranu,

wprowadź opis zdjęcia tutaj

souravc
źródło
Wow, dzięki, to wygląda obiecująco. Spróbuję skryptów.
artm
@artm Zredagowałem trochę usterki i literówki, teraz wydaje się być w porządku. Przetestowałem to na sesji awaryjnej Unity i Gnome, powinien działać na gnome3. Daj mi znać, jeśli napotkasz jakiś problem.
souravc
@artm to Twoja decyzja powinna zostać usunięta .my_windows_config.txt. Jeśli chcesz załadować tę samą konfigurację systemu Windows kilka razy dla istniejących okien, możesz ją zachować. Ale jeśli rozpoczniesz nową sesję, identyfikator Windows będzie inny, w takim przypadku lepiej jest usunąć stary plik konfiguracyjny z $HOME/.my_windows_config.txt. Przed zapisaniem nowej konfiguracji należy ręcznie usunąć zapisany plik konfiguracji.
souravc
Na XFCE4 w Ubuntu 18.04 musiałem zmienić grawitację (pierwsze „0” w parametrze -e) na 31, w przeciwnym razie okna zostały przywrócone około 31px w prawo i w dół tam, gdzie były. Myślę, że może to być rozmiar domyślnego panelu XFCE. Dzięki za kod!
akom
-1

Wspólny przewodnik znajduje się tutaj: Rozwiązanie

Twoje rozwiązania dotyczące dynamicznej rozdzielczości są zbliżone do Xorg & XrandR lub Xinerama

Masz:
Cztery metody konfiguracji

  1. Według sesji z .xprofile.

  2. Dynamicznie za pomocą narzędzia xrandr

  3. Statycznie przez ustawienie w xorg.conf.

  4. Graficzny interfejs użytkownika Xrandr.

Dobra odpowiedź jest taka, że ustawienia wielu monitorów nie są zapisywane

Aby obejść zarządzanie oknami w różnych obszarach roboczych, można użyć systemu profilowania podanego przez Compiz Config Manager

szybki
źródło
2
Nie mam problemu z rozdzielczością ani ustawieniami wyświetlania - działają one zgodnie z oczekiwaniami.
artm
Więc DOWOLNE środowisko pulpitu jest dla Ciebie PRZYJAZNE. Proszę nie obwiniaj publicznie.
szybki
Nikogo nie obwiniam. Chcę tylko, aby otwarte okna pozostały tam, gdzie je umieszczam podczas podłączania / odłączania monitorów.
artm
Masz więc cztery rozwiązania z oficjalnym odniesieniem. Moja odpowiedź odpowiednio pokrywa twoje „szaleństwo”;)
szybki
2
Och, po prostu spróbuj sam: otwórz okno w każdym obszarze roboczym, a następnie podłącz monitor, który pojawia się na górze oryginalnego ekranu i zobacz, gdzie kończą się okna. Następnie powiedz mi, jak xrandr jest istotny dla zatrzymania losowego przeskakiwania okien po podłączeniu monitora.
artm