Jak zrestartować zamrożony ekran w Ubuntu bez utraty otwartych okien?

12

Miałem urządzenie z systemem Ubuntu 12.04 LTS ma zawieszony ekran. Ogólnie po prostu wskoczyłem na dostępny tty, tj. Ctrl- Alt- F1i wykonałem polecenie /etc/init.d/lightdm restartlub service lightdm restart. To jednak zabija wszystko, co mam otwarte. Jak tego uniknąć?

PeanutsMonkey
źródło
1
Nie możesz tego osiągnąć. Jest to lightdm, który wyświetla / zarządza oknami w systemie x.
Apple II
To również zabije wszystko, co masz otwarte, ale dawno temu ctrl-alt-backspace zrestartowałby X. To łatwiejsze niż przejście na TTY, zalogowanie się i poproszenie X o ponowne uruchomienie. Nie jestem jednak pewien, czy nadal działa.
@Douglas B. Staple - nie działa z Ubuntu 12.04 LTS. Nie jestem pewien, czy nadal działa z innymi dystrybucjami, czy też jest to specyficzne dla Unity.
PeanutsMonkey
Może istnieć sposób na zastąpienie menedżera okien podczas działania. (Jest to możliwe przynajmniej z powłoką GNOME lub z menedżerem okien i3, więc może być jakiś sposób).
FSMaxB
@ FSMaxB - Czy możesz wyjaśnić, w jaki sposób można to osiągnąć za pomocą Gnome-Shell lub Menedżera okien i3?
PeanutsMonkey

Odpowiedzi:

12

ZASTRZEŻENIE: Zgodnie z komentarzem Brenden, może to być przestarzałe i nie działać już z nowszymi wersjami Ubuntu. Przygotuj się również na utratę otwartych okien.

Teraz mam go dla Unity (właśnie zastąpiłem moją powłokę GNOME jednością bez wylogowywania się i zamykania okien):

  1. Idź do tty1 [Ctrl] + [Alt] + [F1]
  2. Wpisz DISPLAY=:0, aby programy wiedziały, na jakim porcie znaleźć X-Server
  3. export DISPLAY
  4. unity --replacelub gnome-shell --replace(możesz także zastąpić GNOME-Shell jednością lub Unity przez GNOME-Shell)

Działa to tylko wtedy, gdy X-Server lub GNOME nie jest zamrożony, ale tylko Unity lub GNOME-Shell.

Jak to działa: Komunikacja między programami a X-Server do wyświetlania ich interfejsu użytkownika działa przez gniazdo sieciowe. Zwykle jest to „localhost: 0” short ”: 0”. Ustawiając zmienną DISPLAY, programy wiedzą, gdzie znaleźć X-Server do komunikacji z nim, więc programy są wyświetlane na X-serwerze na tty7, nawet jeśli program działa na tty1.

Treścią okien zarządza X-Server, natomiast pozycją i granicami okien zarządza menedżer okien zintegrowany w jedności lub powłoce GNOM, więc istnieje sposób na zastąpienie tylko ich bez ponownego uruchamiania aplikacji na X- Serwer.

PS: Po prostu opisuję to, co rozumiem, więc popraw mnie i popraw, jeśli się mylę.

EDYCJA: W przypadku GNOME-Shell istnieje inny sposób na jego ponowne uruchomienie. Po zmianie na tty po prostu wpisz pkill -HUP gnome-shell, nie wiem, czy jest coś podobnego do Unity.

FSMaxB
źródło
To działało jak cud. W rzeczywistości uratowało mnie to dzisiaj. Dzięki wielkie. Byłbym bardzo wdzięczny, gdybyś mógł opracować, co każdy krok robi poza krokiem 1. Nie bardzo rozumiem, co dzieje się pod maską.
PeanutsMonkey
Dziękuję za odpowiedź! Uwaga jedność - help mówi: „--replace Uruchom jedność /! \ To jest dla zgodności z innymi interfejsami pulpitu i działa tak samo, jak jedność bez --replace”
Tom
Odkryłem również, że muszę uruchomić jedność poprzez sudo, aby zapisać moje okna.
Tom
2
--replace jest przestarzałe i nic nie robi, a to rozwiązanie zrestartuje sesję, co oznacza, że ​​stracisz wszystkie okna :(
Brenden
Nadal działa w 2018 r.
000001