Existe uma maneira de fazer com que as sessões de terminal persistam durante a reinicialização?

2

OS X tem isso. Idealmente, eu gostaria que a reinicialização aparecesse como se nunca tivesse acontecido a partir do POV do terminal (vamos ignorar as sessões remotas e assumir 0 processos em segundo plano por enquanto). Ou seja, gostaria de ver o histórico stdin, stdout, stderr (ou seja, a rolagem) em cada uma das minhas guias de terminal.

NOTA: Isto não é sobre o histórico bash. Trata-se de persistir sessões de terminal entre as reinicializações.

    
por theanine 15.06.2017 / 19:48

2 respostas

1

Não, pelo menos em gnome-terminal e outros emuladores baseados em VTE , isso não é possível de maneira implícita e conveniente.

(Você pode, obviamente, percorrer explicitamente todas as suas guias antes da reinicialização, "Selecionar tudo" e copiar e colar o conteúdo em arquivos, e ver esses arquivos com algum visualizador após a reinicialização. Se eu entendi você, isso não é o que você está procurando. Além disso, as cores e outras formatações serão perdidas.)

VTE , o widget de emulação de terminal atrás de gnome-terminal e muitos outros emuladores de terminal armazenam a maior parte do conteúdo de rolagem (não os bits mais recentes, embora) em arquivos temporários sob /tmp por padrão. As principais decisões de design que impedem fazer o que você está procurando são:

  • Esses arquivos são desvinculados logo após serem criados. Isso é feito para que eles sejam removidos automaticamente (e o espaço em disco seja liberado) mesmo se o emulador de terminal sair sem limpeza por qualquer motivo. Para preservá-los, eles devem ser ligados de volta à árvore do sistema de arquivos (não sei se é possível) ou copiados para outro arquivo (o que é uma ação lenta se o pergaminho for grande, muito menos lidar adequadamente com o possível esgotamento de espaço em disco).

  • Os arquivos estão em /tmp , o que é eliminado por muitas distribuições em uma reinicialização. Uma localização diferente e persistente deve ser escolhida, ou alguma cooperação é necessária com os scripts de inicialização.

  • Esses arquivos são criptografados (a partir de VTE versão 0.40) para superar o problema de privacidade do vazamento de dados no caso de alguém obter acesso ao disco. A chave de criptografia só está disponível na memória de gnome-terminal . Para que esses arquivos persistam, a camada de criptografia deve ser ignorada (trazendo de volta as antigas preocupações de privacidade), ou as chaves devem ser colocadas no disco pelo menos temporariamente durante a reinicialização (... er, até que o usuário efetua login novamente e inicia gnome-terminal novamente ... não parece muito melhor). Só é viável se você não se importa com a privacidade ou se o sistema de arquivos tem a garantia de estar criptografado.

Existem outras questões menores a serem abordadas, por exemplo, liberando blocos incompletos desses arquivos que contêm os últimos bits dos dados de rolagem.

Espero poder descrever algumas das decisões de design VTE que impedem que você faça o que está procurando. Não consigo ver como sua solicitação pode ser abordada, mantendo os objetivos atuais de design também. Talvez haja outro emulador de terminal que faça o que você está procurando, presumivelmente sacrificando alguns dos recursos do VTE ; Não sei.

    
por egmont 15.06.2017 / 22:52
0

Sugiro usar a ferramenta screen muito útil. Vale a pena aprender. Repetindo em resumo uma resposta que coloquei em outra pergunta:

Veja no .screenrc que você pode iniciar janelas padrão com um comando personalizado para poder restaurar sessões usando diferentes arquivos .screenrc se desejar restaurar sessões diferentes. screen -t .... Consulte o Manual de tela do gnu.org - arquivos de inicialização

Uma boa maneira de ter sessões de terminal que persistem é executar uma sessão de 'tela' no servidor. Uma sessão de 'tela' lhe dá várias janelas no servidor onde você pode estar logado em outras máquinas ou qualquer outra coisa. Você pode ter várias sessões de 'tela' em execução no servidor. Você pode desconectar e reconectar as sessões necessárias. 'screen' é o teclado de linha de comando da velha escola, mas vale a pena aprender e brincar para aprender como funciona. Tem algumas grandes vantagens:

  • fácil de instalar, executado em qualquer unix (ou cygwin), sem necessidade de elementos gráficos (além de gráficos de texto de terminal)
  • fornece sessões de terminal com janelas persistentes (contanto que o servidor não seja reinicializado)

* início rápido da tela *

RTFM: Manual do usuário da tela gnu.org

    Tela
  • - tela Executar para criar uma nova sessão simplesmente
  • tela -ls - sessões de tela de lista em execução
  • tela -r 20229.pts-2.bangor - reconecte-se à sessão

A tela * ESCAPE char por padrão é Ctrl-a * , a menos que algum looper do craZy o tenha alterado em .screenrc, por exemplo. "escape ^ Zz" para pessoas que não valorizam o controle de background do processo. Para obter um Ctrl-a real no terminal (vá para o começo da linha), se estiver correndo na tela, faça Ctrl-a Ctrl-a.

  • ESCAPE c - cria nova janela de tela
  • ESCAPE 0 (ou 1 2 3 4 5 6 7 8 9) - muda para a janela 0 (ou 1 2.)
  • ESCAPE p ou ESCAPE n - alterna para a janela anterior ou seguinte
  • ESCAPE "- lista de janelas
  • ESCAPE h - mostra ajuda na tela

Na íntegra aqui em outra pergunta eu coloquei no exemplo de página de ajuda de tela, uso de linha de comando e exemplo .screenrc:

Emulador de terminal com um " Restaurar sessão "como o Mac Terminal

    
por gaoithe 22.08.2018 / 13:16