Wie starte ich einen eingefrorenen Bildschirm in Ubuntu neu, ohne geöffnete Fenster zu verlieren?

12

Ich hatte ein Gerät mit Ubuntu 12.04 LTS, dessen Bildschirm einfriert. Im Allgemeinen bin ich einfach auf ein verfügbares tty gesprungen, dh Ctrl- Alt- F1und habe den Befehl /etc/init.d/lightdm restartoder ausgeführt service lightdm restart. Dies tötet jedoch alles, was ich offen habe. Wie vermeide ich das?

PeanutsMonkey
quelle
1
Das kannst du nicht erreichen. Es ist lightdm, das Fenster im x-System anzeigt / verwaltet.
Apple II
Dies wird auch alles töten, was Sie geöffnet haben, aber es war einmal, wenn Strg-Alt-Rücktaste X neu gestartet hat. Das ist einfacher, als zu einem TTY zu wechseln, sich anzumelden und X zu bitten, sich selbst neu zu starten. Ich bin mir nicht sicher, ob es noch funktioniert.
@Douglas B. Staple - Es funktioniert nicht mit Ubuntu 12.04 LTS. Ich bin mir nicht sicher, ob es noch mit anderen Distributionen funktioniert oder ob dies für Unity spezifisch ist.
PeanutsMonkey
Möglicherweise gibt es eine Möglichkeit, den Fenstermanager während der Ausführung zu ersetzen. (Zumindest mit der GNOME-Shell oder mit dem i3-Fenstermanager ist dies möglich.
FSMaxB
@FSMaxB - Könnten Sie bitte erläutern, wie dies mit der Gnome-Shell oder dem i3 Window Manager erreicht werden kann?
PeanutsMonkey

Antworten:

12

HAFTUNGSAUSSCHLUSS: Laut Brendens Kommentar ist dies möglicherweise veraltet und funktioniert mit neueren Versionen von Ubuntu nicht mehr. Seien Sie auch darauf vorbereitet, dass Sie Ihre geöffneten Fenster verlieren könnten.

Jetzt habe ich es für Unity bekommen (ich habe gerade meine GNOME-Shell durch Unity ersetzt, ohne mich abzumelden oder Fenster zu schließen):

  1. Gehe zu tty1 [Strg] + [Alt] + [F1]
  2. Geben Sie ein, DISPLAY=:0damit Programme wissen, an welchem ​​Port sich der X-Server befindet
  3. export DISPLAY
  4. unity --replaceoder gnome-shell --replace(Sie können GNOME-Shell auch durch Unity oder Unity durch GNOME-Shell ersetzen)

Dies funktioniert nur, wenn nicht der X-Server oder GNOME eingefroren ist, sondern nur Unity oder die GNOME-Shell.

So funktioniert es: Die Kommunikation zwischen Programmen und dem X-Server zur Anzeige ihrer Benutzeroberfläche funktioniert über einen Netzwerk-Socket. Dies ist normalerweise bei "localhost: 0" short ": 0". Durch Setzen der Variablen DISPLAY wissen die Programme, wo sich der X-Server befindet, mit dem sie kommunizieren können. Daher werden Programme auf dem X-Server auf tty7 angezeigt, auch wenn das Programm auf tty1 ausgeführt wird.

Der Inhalt von Fenstern wird vom X-Server verwaltet, während die Position und die Ränder der Fenster vom in Unity oder der GNOM-Shell integrierten Fenstermanager verwaltet werden. Es gibt also eine Möglichkeit, nur diese zu ersetzen, ohne die Anwendungen auf dem X-Server neu zu starten. Server.

PS: Ich beschreibe nur, was ich verstehe. Bitte bearbeiten und korrigieren Sie mich, wenn ich in einigen Punkten falsch liege.

BEARBEITEN: Für die GNOME-Shell gibt es eine andere Möglichkeit, sie neu zu starten. Nachdem pkill -HUP gnome-shellich zu tty gewechselt habe, tippe einfach ein und weiß nicht, ob es etwas Ähnliches für Unity gibt.

FSMaxB
quelle
Das hat wie ein Wunder funktioniert. Tatsächlich hat es mich heute gerettet. Vielen Dank. Ich wäre Ihnen sehr dankbar, wenn Sie näher erläutern könnten, was die einzelnen Schritte bis auf Schritt 1 bewirken. Ich verstehe nicht ganz, was unter der Haube geschieht.
PeanutsMonkey
Danke für die Antwort! Beachten Sie Unity --help sagt: "--replace Run Unity /! \ Dies dient der Kompatibilität mit anderen Desktop-Schnittstellen und verhält sich genauso wie das Ausführen von Unity ohne --replace"
Tom
Außerdem musste ich Unity über Sudo ausführen, um meine Fenster zu retten.
Tom
2
--replace ist veraltet und tut nichts und diese Lösung startet Ihre Sitzung neu, was bedeutet, dass Sie alle Ihre Fenster verlieren :(
Brenden
Funktioniert noch im Jahr 2018
user000001