Como reinicio uma tela congelada no Ubuntu sem perder nenhuma janela aberta?

12

Eu tinha um dispositivo executando o Ubuntu 12.04 LTS que tem o seu congelamento de tela. Geralmente, simplesmente pulei para um tty disponível, ou seja, Ctrl- Alt- F1e executei o comando /etc/init.d/lightdm restartou service lightdm restart. No entanto, isso mata tudo o que tenho aberto. Como evito isso?

AmendoimMacaco
fonte
1
Você não pode conseguir isso. É o lightdm que exibe / gerencia janelas no sistema x.
Apple II
Isso também mata o que quer que você tenha aberto, mas era uma vez que ctrl-alt-backspace reiniciaria o X. Isso é mais fácil do que mudar para um TTY, fazer login e pedir ao X para reiniciar a si próprio. Não tenho certeza se ainda funciona.
@Douglas B. Staple - Não funciona com o Ubuntu 12.04 LTS. Não tenho certeza se ainda funciona com outras distribuições ou se isso é específico do Unity.
PeanutsMonkey 23/03
Pode haver alguma maneira de substituir o gerenciador de janelas durante a execução. (É possível com o GNOME-Shell, pelo menos, ou com o gerenciador de janelas i3, para que possa haver alguma maneira).
FSMaxB
@FSMaxB - Você poderia explicar como isso pode ser alcançado usando o Gnome-Shell ou o i3 Window Manager?
PeanutsMonkey

Respostas:

12

AVISO LEGAL: De acordo com o comentário de Brenden, isso pode estar desatualizado e não funcionar mais com as versões mais recentes do Ubuntu. Além disso, esteja preparado para perder as janelas abertas.

Agora eu o comprei para o Unity (apenas substituí meu shell do GNOME por unity sem sair ou fechar as janelas):

  1. Vá para tty1 [Ctrl] + [Alt] + [F1]
  2. Digite DISPLAY=:0para que os programas saibam em qual porta encontrar o X-Server
  3. export DISPLAY
  4. unity --replaceou gnome-shell --replace(você também pode substituir o GNOME-Shell pela unidade ou Unity pelo GNOME-Shell)

Isso funciona apenas se o X-Server ou o GNOME não estiver congelado, mas apenas o Unity ou o GNOME-Shell.

Como funciona: a comunicação entre os programas e o X-Server para exibir sua interface do usuário está funcionando em um soquete de rede. Isso normalmente está em "localhost: 0" short ": 0". Ao definir a variável DISPLAY, os programas sabem onde encontrar o X-Server para se comunicar com ela; portanto, os programas são exibidos no X-Server no tty7, mesmo que o programa esteja sendo executado no tty1.

O conteúdo das janelas é gerenciado pelo X-Server, enquanto a posição e as bordas das janelas são gerenciadas pelo gerenciador de janelas integrado na unidade ou pelo shell GNOM, para que haja uma maneira de substituí-los apenas sem reiniciar os aplicativos no X- Servidor.

PS: Estou apenas descrevendo o que entendo, por isso edite e corrija-me se estiver errado em alguns pontos.

EDIT: Para o GNOME-Shell, há outra maneira de reiniciá-lo. Depois de mudar para tty, basta digitar pkill -HUP gnome-shell, não sei se há algo semelhante para o Unity.

FSMaxB
fonte
Isso funcionou como um milagre. Na verdade, isso me salvou hoje. Muito obrigado. Ficaria muito grato se você pudesse elaborar o que cada uma das etapas faz na barra 1. Não entendo direito o que está acontecendo sob o capô.
PeanutsMonkey
Obrigado pela resposta! Nota unidade --help diz: "--replace Run unidade / \ Isto é para compatibilidade com outras interfaces de desktop e age o mesmo que correr unidade sem --replace!"
Tom
Também descobri que tinha que executar a unidade via sudo para salvar minhas janelas.
Tom
2
--replace está obsoleto e não faz nada, e esta solução reiniciará sua sessão, o que significa que você perde todas as janelas :(
Brenden
Ainda funciona em 2018
user000001