Gibt es eine dynamische Desktop-Umgebung mit mehreren Monitoren für Ubuntu?

14

Ich benutze einen Laptop und möchte tagsüber von einem (physischen) Arbeitsplatz zu einem anderen migrieren und eine Verbindung zu einem externen Monitor herstellen, falls verfügbar.

Ich muss auch viele Multitasks ausführen, damit zu jeder Zeit viele Fenster geöffnet sind und viele (virtuelle) Arbeitsbereiche, in denen ich sie organisieren kann.

Aber jedes Mal, wenn ich den externen Monitor anschließe oder abtrenne, ist meine vorsichtige Anordnung hinfällig. Das macht mich wirklich wütend .

Gibt es eine Desktop-Umgebung, in der die Fenster beim Anschließen / Trennen eines zweiten Monitors nur in Ruhe gelassen werden? Oder noch besser, das erinnert an die Fensteranordnung pro Monitoranordnung? Wenn ich von meinem Heimbüro (17-Zoll-Monitor auf dem Laptopbildschirm) zu meinem normalen Arbeitsplatz (21-Zoll-Monitor links vom Laptopbildschirm) oder zum Schreibtisch meines Kollegen (19-Zoll-Monitor rechts vom Latop-Bildschirm) ging, Fenster landen dort, wo sie das letzte Mal angeschlossen waren - oder bleiben stehen, wenn sie diesen Monitor nie gesehen haben.

Die Art und Weise, wie Unity externe Monitore "handhabt", macht mich traurig und wünscht, ich hätte nicht all diese zusätzlichen Monitore anzuschließen. Sobald ich sie anschließt, bin ich an diese Anordnung angekettet, als hätte ich eine Desktop-Maschine am Boden festgenagelt.

artm
quelle
Passiert das bei irgendeinem Fenstermanager? GNOME 3, KDE, LXDE, XFCE?
Braiam
Ich weiß es nicht. Es passiert mit der Einheit.
Artm
Haben Sie eine gute Lösung dafür gefunden? Ich musste einen Dell-Laptop verwenden, auf dem ich Ubuntu installiert habe, bin aber an mein MacBook Pro gewöhnt. Auf dem Mac gibt es ein Programm namens Stay, das unverzichtbar ist, da es die Fensterpositionen für jede Monitorkonfiguration speichert. Schließen Sie einen Monitor an, alle Fenster bewegen sich dorthin, wo sie waren. Schließen Sie einen zweiten Monitor an, alle bewegen sich wieder. Ziehen Sie den Stecker aus der Steckdose, sie gehen alle dorthin zurück, wo sie waren. Darüber hinaus ist der Mac auch ohne Stay intelligent genug, um sicherzustellen, dass alle Fenster sichtbar sind. Auf diesem Ubuntu-Laptop muss ich immer wieder die Fenster finden, die nicht auf dem Bildschirm zu sehen sind.
Greywire
Ich kann nichts wie Stay on Linux finden. Es sieht so aus, als könnten Sie alle Informationen und Steuerelemente von einzelnen Befehlen abrufen, und die folgenden Skripte kommen dem nahe. Ich arbeite daran, diese zu verbessern, um die Funktionalität zu erhalten, die ich brauche ...
Greywire
Bleib klingt nach dem, was ich vermisse. Nein, ich habe keine Lösung gefunden.
18.

Antworten:

10

Ich stelle Ihnen zwei Shell-Skripte zur Verfügung. Es hilft Ihnen, die Anordnung der Fensterpositionen und -größen zu speichern . Wenn Ihre gewünschten Fenster-Arrangements gestört werden, können Sie diese Arrangements mithilfe dieses Skripts mit exakter Fenstergröße und -position für alle Fenster wiederherstellen .

Sie müssen installieren, es wmctrlsei denn, Sie haben es bereits. Installieren Sie über Terminal,

sudo apt-get install wmctrl

Skript zum Speichern der Windows-Konfiguration

# 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

Bei der Ausführung speichert das obige Skript Ihre Fensterposition und -größe für alle Ihre geöffneten Fenster in einer Datei, die .my_windows_config.txtin Ihrem Ausgangsverzeichnis benannt ist . Es ist eine versteckte Textdatei.

Skript zum erneuten Laden der Windows-Konfiguration

# 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

Wenn Sie das zweite Skript ausführen, wird Ihre Fensterposition mit der genauen Größe für alle Ihre Fenster wiederhergestellt.

Verwendung

Speichern Sie diese Skripte in Ihrem $HOME/bin/Verzeichnis. Fügen Sie $HOME/bin/in Ihrem PATH. Fügen Sie dazu diese Zeilen am Ende Ihres$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

Damit können Sie diese Skripte nur mit ihrem Namen ausführen. Erteilen Sie den Skripten die Ausführungserlaubnis,

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

Speichern Sie die Konfiguration in Ihrem $HOME/.my_windows_config.txt

Nachdem Sie alle Fenster geöffnet und angepasst haben, werden sie im Terminal ausgeführt.

save_window_conf.sh

Zum erneuten Laden der Konfiguration von Ihrem $HOME/.my_windows_config.txt

load_window_conf.sh

Hoffe, es wird Ihr Problem lösen. Hier ist ein Screenshot,

Bildbeschreibung hier eingeben

souravc
quelle
Wow, danke, das sieht vielversprechend aus. Ich werde die Skripte ausprobieren.
Artm
@artm Ich habe einen kleinen Fehler und einen Tippfehler bearbeitet, jetzt scheint es in Ordnung zu sein. Ich habe es auf Unity und Gnome-Fallback-Session getestet, sollte auf gnome3 funktionieren. Lassen Sie mich wissen, wenn Sie auf ein Problem stoßen.
souravc
@artm es sollte Ihre Entscheidung sein, wann Sie entfernen möchten .my_windows_config.txt. Wenn Sie dieselbe Fensterkonfiguration für vorhandene Fenster mehrmals laden möchten, möchten Sie sie möglicherweise beibehalten. Wenn Sie jedoch eine neue Sitzung starten, unterscheidet sich die Windows-ID. In diesem Fall ist es besser, die alte Konfigurationsdatei unter zu entfernen $HOME/.my_windows_config.txt. Sie müssen die gespeicherte Konfigurationsdatei manuell entfernen, bevor Sie eine neue Konfiguration speichern.
Souravc
Auf XFCE4 in Ubuntu 18.04 musste ich die Schwerkraft (erste "0" im -e-Parameter) auf 31 ändern, ansonsten wurden die Fenster ungefähr 31px genau dort wiederhergestellt, wo sie waren. Ich denke, das kann die Größe des Standard-XFCE-Panels sein. Danke für den Code!
Akom
-1

Ein allgemeiner Leitfaden ist hier: Lösung

Ihre Lösungen zur dynamischen Auflösung befinden sich in der Nähe von Xorg & XrandR oder Xinerama

Sie haben:
Vier Methoden zum Einrichten

  1. Durch die Sitzung mit .xprofile.

  2. Dynamisch mit dem Tool xrandr

  3. Statisch durch Setzen in xorg.conf.

  4. Xrandr Graphical Front End GUI.

Gute Antwort ist Einstellungen für mehrere Monitore werden nicht gespeichert

Zur Umgehung Ihre Fensterverwaltung über Ihren Arbeitsbereich können Sie verwenden Profilierungssystem gegeben Compiz Config Manager

schnell
quelle
2
Ich habe kein Problem mit Auflösungen oder Anzeigearrangements - diese funktionieren wie erwartet.
Artm
JEDE Desktop-Umgebung ist also FREUNDLICH für Sie. Beschuldige bitte nicht die Öffentlichkeit.
Swift
Ich beschuldige niemanden. Ich möchte nur, dass geöffnete Fenster dort bleiben, wo ich sie beim Anschließen / Trennen von Monitoren platziert habe.
Artm
Sie haben also vier Lösungen mit offiziellem Bezug. Meine Antwort deckt Ihren "Wahnsinn" angemessen ab;)
schnell
2
Probieren Sie es einfach selbst aus: Öffnen Sie in jedem Arbeitsbereich ein Fenster und schließen Sie dann einen Monitor an, der am oberen Rand des ursprünglichen Bildschirms angezeigt wird. Sagen Sie mir dann, wie wichtig xrandr ist, um zu verhindern, dass Fenster zufällig springen, wenn ein Monitor angeschlossen ist.
Artm