Reinicialização de tela genérica para o display X borked?

3

Existe uma maneira genérica de redefinir a exibição em uma sessão X borked? Digamos que você abra a tela do seu laptop depois de ter sido colocado no modo de suspensão, e a tela esteja em branco ou subitamente ultrapassada. Você pode pressionar ctrl alt f1 e ver que a sessão X está rodando, mas por alguma razão, você não pode ver a tela. / p>

Para um terminal borked, você pode digitar reset ou stty sane . xrefresh irá repintar a tela, mas isso não ajudará nos problemas de exibição causados pela placa de vídeo.

No Gnome 3, gnome --replace fará isso, mas estou executando o XFCE4 e, sinceramente, essa é uma pergunta global ... existe um% xdg-* ou x-* para isso? Estou procurando por algo para o qual eu possa estabelecer uma associação de teclas, em qualquer plataforma que eu esteja usando.

    
por Barton Chittenden 06.06.2015 / 20:23

1 resposta

4

Não há mecanismo semelhante, porque as razões são completamente diferentes.

Um terminal de texto ilegível vem de ter várias fontes todas gravando no terminal, sem coordenação entre elas. Então você acaba com texto onde ele não pertence, o que é resolvido fazendo com que o aplicativo cujo texto você quer ver seja exibido novamente. xrefresh é o análogo disso. É mais raramente necessário porque o servidor X já gerencia a coordenação entre aplicativos: cada aplicativo deve desenhar apenas em sua própria janela. xrefresh só é necessário quando um aplicativo se comporta mal - ao contrário da situação em terminais de texto, onde não há como se comportar melhor.

Quanto ao equivalente de stty sane para restaurar as configurações de entrada, isso não se aplica normalmente porque os aplicativos não devem modificar parâmetros globais - aqui, novamente, cada aplicativo deve bagunçar apenas suas próprias janelas. Há algumas coisas ruins que surgem, como um aplicativo pegando o ponteiro ou o teclado ( xdotool key XF86Ungrab , ou Ctrl + Alt + Teclado / se habilitado). / p>

Se a tela permanecer em branco ou embaralhada devido a um bug de driver, não haverá mecanismo genérico de recuperação. Qualquer um que tenha feito alguma programação séria sabe que não existe um mecanismo de recuperação completamente genérico depois de um bug, porque um bug é por definição algo inesperado e já que você não pode prever o estado do sistema depois que o bug é detectado, não há como ter certeza que tudo o que você fizer funcionará como pretendido para restaurá-lo. A única maneira segura de se recuperar de um bug é apelar para uma autoridade mais alta: por exemplo, se um bug for detectado em um processo, mate-o (por causa do isolamento do processo, o bug deve ser confinado ao processo) e inicie uma nova instância. Se o bug for detectado no kernel, a autoridade superior será o hardware - reinicialize o computador. No caso de um bug de driver de vídeo, geralmente o que é afetado é apenas o estado da GPU, portanto, reconfigurar a GPU seria suficiente. Até onde eu sei, não existe uma maneira genérica de dizer aos drivers do X.org para redefinir a GPU e reinicializá-la para seus gostos. Há algumas coisas que você pode tentar, mas nem sempre funcionam:

  • Mude para um console de texto ( Ctrl + Alt + F1 ) e, em seguida, retorne ( Ctrl + Alt + F7 ). Se o bug estiver estritamente no estado da GPU, isso deve resolvê-lo, porque na troca de volta, o servidor X deve reinicializar a GPU para o estado anterior. Mas se o bug também afeta os componentes internos do driver, ou se o driver fez um backup de um estado inválido ao sair, isso não ajudará.
  • Mude para um console de texto e inicie outra instância do servidor X, elimine-o e, em seguida, retorne. Isso pode funcionar mesmo se a variante mais simples acima não funcionasse, se o bug fosse que o driver modificou algumas configurações que não foram reinicializadas corretamente. Ainda outra variante é manter a outra instância em execução; dependendo da natureza do bug, isso também ajuda.
  • Tente desativar todas as exibições com xrandr , por exemplo,

    export DISPLAY=:0
    xrandr
    # see what displays are listed, e.g. “DVI-0 connected …”
    xrandr --output DVI-0 --off
    xrandr --output DVI-0 --auto
    

    Isso pode ajudar ocasionalmente, mas não com muita frequência, porque geralmente o erro está entre o driver e a GPU e não é afetado pelos monitores.

  • Se você estiver executando o Compiz, mate-o (e reinicie-o se realmente precisar). É improvável que matar o gerenciador de janelas ajude onde xrefresh não, portanto, suspeito que, se gnome3 --replace ajudar, é porque ele reinicia o Compiz.
por 06.06.2015 / 22:27