Ich möchte folgendes Verhalten erreichen: Wenn ich meinen Laptop-Bildschirm benutze, wird mein erster Arbeitsbereich verwendet. Wenn ich einen zweiten Bildschirm (über HDMI) anschließe, wird ein zweiter Arbeitsbereich verwendet und alle neu geöffneten Fenster auf diesem zweiten Bildschirm landen im zweiten Bereich, mit der Ausnahme, dass ich den Arbeitsbereich auf dem zweiten Bildschirm auf einen anderen Arbeitsbereich umstelle.
Wenn ich meinen zweiten Bildschirm ausstecke, bleiben alle Fenster in den Arbeitsbereichen, in denen sie erstellt wurden, und ich kann die Arbeitsbereiche auf meinem Laptop wechseln, um sie anzuzeigen.
Ist dieses Verhalten schon möglich?
Antworten:
Unter Linux ist alles möglich. Sie benötigen einige Grundkenntnisse über den Xserver , einige Zeit und ein System zum Testen, da Sie mit Ihrem X herumspielen und auf jeden Fall den Browser zum Laufen brauchen, wenn Sie Hilfe benötigen :-)
Meiner Meinung nach gibt es drei mögliche Lösungen:
Multimonitor-Setups verwenden Xinerama . Die einfachste Lösung, die ich mir vorstellen kann, besteht darin, Ihrer Konfiguration einen dritten virtuellen Bildschirm hinzuzufügen und die Fenster einfach mit xdotool dorthin zu verschieben. Diese Lösung hat einige Nachteile, erfordert jedoch nicht den Aufwand, Fenster zwischen verschiedenen Xservern verschieben zu müssen, was im Allgemeinen nicht möglich ist.
Da es nicht möglich ist, Fenster zwischen verschiedenen Xservern zu verschieben , benötigen wir dafür eine Art Proxy wie xmove oder Xpra . Ich denke, die Fenster leben dann in einer separaten Xfvb- Sitzung, um die Fenster auszublenden. Sie können eine Verbindung zur Sitzung herstellen und trennen.
Unabhängig davon, welche Methode Sie verwenden, benötigen Sie ein Ereignis, wenn der Monitor vom Stromnetz getrennt wird. Das Ereignis sollte ausgelöst werden, wenn die Verbindung zum Bildschirm getrennt wird und auch, wenn die Verbindung wiederhergestellt wird. Sie können das Skript dämonisieren, um auf das Ereignis zu achten.
Ich würde die Lösung aus verschiedenen Gründen mit Xpra bevorzugen. Ich kann Ihnen nur einige Hinweise geben, wie es geht. Die Lösungen sind noch nicht vollständig, sollten Sie jedoch in den Griff bekommen.
Xinerama-Lösung
Installieren
Das Xinerama-Setup muss erweitert werden, um eine statische Konfiguration zu erhalten: Siehe https://help.ubuntu.com/community/XineramaHowTo
Siehe auch gefälschter dritter Bildschirm und Xdummy
Betroffene Fenster bekommen
Wir können xdotool verwenden , um nach Fenstern zu suchen. Danach können wir ihre Position überprüfen und sie bewegen. Ich gehe von zwei Monitoren mit
1920x1080
Konfiguration aus. Im Folgenden werden alle Fenster vom rechten zum linken xinerama-Bildschirm verschoben.Sie können jetzt alle Fenster von Ihrem Laptop-Bildschirm (screen0) auf einen dritten (virtuellen) Bildschirm verschieben, wenn ein Monitor angeschlossen wird. Gleichzeitig können Sie jedes auf dem dritten Bildschirm gespeicherte Fenster auf den ersten Bildschirm verschieben.
XPRA-Lösung
Um Xpra zum Verschieben der Fenster verwenden zu können, müssen alle Fenster zuvor von Xpra verwaltet werden. Sie müssen den gesamten Desktop mit Xpra beim Systemstart starten . Zweimal ist einer Ihr Hauptdesktop, auf dem Sie arbeiten, und der andere ist hauptsächlich ein virtueller Desktop.
Jetzt können Sie Windows für den nicht verbundenen Bildschirm in einer separaten xpra-Sitzung ausführen und ihn beim Umschalten des Monitors verbinden / trennen.
Es gibt auch eine nicht mehr unterstützte Gnome-Shell-Erweiterung , die nützlich sein kann, wenn Sie ein Fenster zwischen gestarteten xpra-Anzeigen manuell von der verborgenen
:99
zur normalen verschieben:0
möchten.Das Ereignis
Sie können auf das Trennen / Wiederherstellen einer bestimmten Anzeige achten
Achten Sie mithilfe von xwininfo auf geänderte Abmessungen Ihres Xinerama , um es unabhängig vom nicht angeschlossenen Monitor zu haben, wenn Sie Ihr Setup auf 3 Monitore erweitern und ein beliebiges Gerät vom Netz trennen möchten. Beachten Sie, dass dies nur für die xpra-Lösung funktioniert.
xwininfo -display :0 -root | grep -e "-geometry"
-geometry 5760x2160+0+0
quelle