Comment redémarrer un écran figé dans Ubuntu sans perdre aucune fenêtre ouverte?

12

J'avais un appareil exécutant Ubuntu 12.04 LTS qui avait son écran gelé. En général, j'ai simplement sauté sur un tty disponible, c'est Ctrl-à- dire - Alt- F1et exécuté la commande /etc/init.d/lightdm restartou service lightdm restart. Cela tue cependant tout ce que j'ai ouvert. Comment éviter cela?

PeanutsMonkey
la source
1
Vous ne pouvez pas y parvenir. C'est lightdm qui affiche / gère les fenêtres dans le système x.
Apple II
Cela tuera également tout ce que vous avez ouvert, mais il était une fois ctrl-alt-backspace redémarrer X. C'est plus facile que de passer à un ATS, de se connecter et de demander à X de se redémarrer. Je ne sais pas si cela fonctionne toujours.
@Douglas B. Staple - Cela ne fonctionne pas avec Ubuntu 12.04 LTS. Je ne sais pas si cela fonctionne toujours avec d'autres distributions ou si cela est spécifique à Unity.
PeanutsMonkey
Il peut y avoir un moyen de remplacer le gestionnaire de fenêtres pendant l'exécution. (C'est possible avec le GNOME-Shell au moins, ou avec le gestionnaire de fenêtres i3 donc il pourrait y avoir un moyen).
FSMaxB
@FSMaxB - Pourriez-vous expliquer comment cela peut être réalisé en utilisant Gnome-Shell ou i3 Window Manager?
PeanutsMonkey

Réponses:

12

AVERTISSEMENT: Selon le commentaire de Brenden, cela pourrait être obsolète et ne plus fonctionner avec les nouvelles versions d'Ubuntu. Soyez également prêt à perdre vos fenêtres ouvertes.

Maintenant, je l'ai pour Unity (je viens de remplacer mon shell GNOME par Unity sans se déconnecter ni fermer les fenêtres):

  1. Accédez à tty1 [Ctrl] + [Alt] + [F1]
  2. Tapez DISPLAY=:0pour que les programmes sachent sur quel port trouver le X-Server
  3. export DISPLAY
  4. unity --replaceou gnome-shell --replace(vous pouvez également remplacer GNOME-Shell par l'unité ou Unity par le GNOME-Shell)

Cela ne fonctionne que si le X-Server ou GNOME n'est pas gelé mais uniquement Unity ou GNOME-Shell.

Comment cela fonctionne: La communication entre les programmes et le X-Server pour afficher leur interface utilisateur fonctionne via une prise réseau. Il s'agit normalement de "localhost: 0" short ": 0". En définissant la variable DISPLAY, les programmes savent où trouver le X-Server pour communiquer avec lui, donc les programmes sont affichés sur le X-Server sur tty7 même si le programme s'exécute sur tty1.

Le contenu des fenêtres est géré par le X-Server tandis que la position et les bordures des fenêtres sont gérées par le gestionnaire de fenêtres intégré dans l'unité ou le GNOM-shell donc il existe un moyen de les remplacer uniquement sans redémarrer les applications sur le X- Serveur.

PS: Je ne fais que décrire ce que je comprends, alors veuillez modifier et corriger si je me trompe sur certains points.

EDIT: Pour le GNOME-Shell, il existe une autre façon de le redémarrer. Après avoir changé en tty, tapez simplement pkill -HUP gnome-shell, je ne sais pas s'il y a quelque chose de similaire pour Unity.

FSMaxB
la source
Cela a fonctionné comme un miracle. En fait, cela m'a sauvé aujourd'hui. Merci beaucoup. Je vous serais très reconnaissant de bien vouloir expliquer ce que chacune des étapes fait à l'étape 1. Je ne comprends pas très bien ce qui se passe sous le capot.
PeanutsMonkey
Merci de répondre! Remarque l'unité --help dit: "--replace Exécuter l'unité /! \ Ceci est pour la compatibilité avec d'autres interfaces de bureau et agit de la même manière que l'exécution de l'unité sans --replace"
Tom
J'ai également constaté que je devais exécuter l'unité via sudo pour enregistrer mes fenêtres.
Tom
2
--replace est obsolète et ne fait rien et cette solution redémarrera votre session, ce qui signifie que vous perdez toutes vos fenêtres :(
Brenden
Fonctionne