Linux / Comando screen: manter sessões e retomar o terminal

screen permite manter uma sessão de terminal no servidor, desconectá-la da tela e retomá-la depois. O fluxo básico é criar uma sessão, executar a tarefa, pressionar Ctrl+A e depois d minúsculo para desconectar e usar screen -r para retomar. Isso é útil em conexões SSH, desde que o servidor e os processos da sessão continuem ativos.

Um multiplexador de terminal reúne várias janelas de terminal em uma sessão. Para tarefas simples sem interação, o comando nohup pode bastar; para voltar à tela e digitar comandos, screen ou tmux são mais adequados.

Quando usar o screen

O GNU Screen mantém janelas independentes: a tarefa pode continuar quando outra janela está selecionada ou a sessão está desconectada. Use-o para preservar o ambiente de trabalho interativo descrito no manual oficial do GNU Screen. O manual do projeto também está disponível como página screen(1) reproduzida no man7.org.

  • Ao executar tarefas de longa duração como compilação, processamento de dados ou backups em um servidor acessado via SSH
  • Quando você precisa desconectar a tela de trabalho e retomá-la em outro computador
  • Ao operar múltiplas janelas de terminal, como shells, monitoramento de logs e editores dentro de uma única conexão SSH
  • Quando você precisa verificar mais tarde a tela de um programa interativo em execução

Uma sessão não sobrevive à reinicialização do servidor e não reinicia automaticamente um programa que falhou. Para serviços permanentes, configure um gerenciador como systemd.

Instalar e iniciar a primeira sessão

Instalar o screen

Escolha apenas o bloco correspondente à sua distribuição. A instalação usa privilégios administrativos. Em Debian ou Ubuntu:

sudo apt update
sudo apt install screen

Em distribuições que usam DNF, com o pacote disponível nos repositórios habilitados:

sudo dnf install screen

No Rocky Linux, pode ser necessário habilitar o EPEL (Extra Packages for Enterprise Linux) apropriado à versão do sistema. A página oficial do pacote screen no Fedora/EPEL lista os ramos disponíveis. Se aparecer “nenhuma correspondência”, confira os repositórios e a versão, sem misturar pacotes de versões diferentes.

Em Arch Linux, seguindo a política de atualização da distribuição:

sudo pacman -S screen

Confira se o comando está disponível e qual versão está instalada:

screen --version

Criar uma sessão com nome

A opção -S atribui um nome à sessão. Use nomes curtos que identifiquem a tarefa; backup é apenas o nome deste exemplo.

screen -S backup

Abra a sessão a partir de um terminal interativo e execute nela seus comandos habituais. A variável STY normalmente contém o identificador quando o shell foi iniciado dentro do Screen; vazia, normalmente indica que esse shell está fora dele.

printf '%s\n' "$STY"

Iniciar uma sessão com um comando

Também é possível iniciar a sessão com um programa. O caminho ./backup.sh é um exemplo: ele precisa apontar para um script que já exista no diretório atual, tenha permissão de execução e inclua uma linha inicial de interpretador válida. Screen não cria esse script nem decide o que copiar.

screen -S backup ./backup.sh

Na configuração padrão, a janela fecha quando o programa termina; se for a última janela, a sessão também termina. Para examinar a saída depois da tarefa, prefira criar primeiro uma sessão com shell e executar o programa dentro dela, ou registre sua saída em arquivo.

Atalhos do Screen usados com frequência

Pressione Ctrl+A, solte as teclas e digite o segundo caractere. A notação abaixo distingue minúsculas e maiúsculas: c cria uma janela, enquanto C maiúsculo limpa a tela. Para A e H maiúsculos, use a tecla Shift conforme o teclado. Os atalhos padrão são descritos na tabela oficial de teclas do Screen.

Teclas de atalho Função Descrição
Ctrl+A, d Desconectar a tela Voltar ao terminal externo mantendo a sessão.
Ctrl+A, c Criar uma janela Abrir outro shell na sessão atual.
Ctrl+A, n Próxima janela Selecionar a próxima janela virtual.
Ctrl+A, p Janela anterior Selecionar a janela virtual anterior.
Ctrl+A, " Listar janelas Abrir a lista e escolher uma janela.
Ctrl+A, A Renomear a janela Digitar um título e confirmar com Enter.
Ctrl+A, [ Copiar ou consultar a rolagem Entrar no modo de consulta da saída anterior.
Ctrl+A, H Alternar o log Iniciar ou interromper a gravação da saída atual.
Ctrl+A, k Encerrar a janela Remover a janela após a confirmação; use com cuidado.
Ctrl+A, ? Consultar a ajuda Exibir os atalhos configurados na sessão.

Para enviar o próprio caractere Ctrl+A ao programa, pressione Ctrl+A e depois a minúsculo. Isso é diferente de A maiúsculo, que renomeia a janela. Arquivos de configuração como ~/.screenrc podem alterar os atalhos; Ctrl+A, ? mostra os que estão em uso.

Desconectar e retomar uma sessão

Desconectar mantendo o trabalho

Dentro da sessão, pressione Ctrl+A e depois d minúsculo. Você volta ao shell externo; o programa continua dentro da sessão, desde que nenhuma política ou falha do sistema encerre seus processos. Desconectar a tela não significa concluir ou cancelar a tarefa.

A opção autodetach vem ativada por padrão e permite a desconexão automática quando o terminal perde a conexão. A documentação de detach e autodetach explica essa condição. Se ela estiver desativada, perder o terminal pode encerrar a sessão.

Consultar a lista de sessões

screen -ls

A lista apresenta identificadores como PID.nome e estados como Detached (desconectada) ou Attached (ligada a um terminal). Use o nome ou o identificador completo para selecionar a sessão. Se nomes coincidirem, prefira o identificador completo exibido por screen -ls, sem copiar um PID de outro exemplo.

Retomar uma sessão desconectada

screen -r backup

O comando anterior retoma uma sessão desconectada chamada backup. Se ela estiver ligada a outro terminal, confirme primeiro quem a usa. A forma seguinte desconecta a tela anterior e conecta a sessão à tela atual:

screen -d -r backup

Essa operação pode tirar a tela de outra pessoa que usa a mesma conta. Ela não é uma reinicialização da tarefa; escolha a sessão correta e coordene o uso antes de executá-la.

Usar várias janelas na mesma sessão

Criar e nomear janelas

Use Ctrl+A, c para criar outra janela e Ctrl+A, A maiúsculo para nomeá-la. Por exemplo, mantenha uma janela para a tarefa, outra para logs e outra para consultas ao sistema. Alterar o título ajuda a reconhecê-la sem mudar o programa em execução.

Alternar entre janelas

Alterne com Ctrl+A, n e Ctrl+A, p, ambos minúsculos. A lista aberta por Ctrl+A, " permite escolher entre várias janelas.

Encerrar janelas e sessões corretamente

Quando a tarefa tiver terminado e você quiser fechar o shell daquela janela, execute:

exit

Ao fechar a última janela, a sessão termina na configuração padrão. Para apenas desconectar a tela e preservar a tarefa, use Ctrl+A, d. Encerre programas pelo procedimento próprio antes de fechar uma janela; Ctrl+A, k força seu encerramento após confirmação e pode causar perda de trabalho.

Consultar a rolagem e gravar logs

Consultar saídas anteriores

Use Ctrl+A, [ para entrar no modo de cópia e rolagem. Consulte saídas anteriores com as setas; use Ctrl+B e Ctrl+F para recuar ou avançar uma tela e pressione Esc para sair. O tamanho do histórico depende da configuração; a opção -h permite definir a quantidade de linhas, como neste exemplo de 10.000:

screen -h 10000 -S analysis

Gravar a saída da janela em arquivo

Use Ctrl+A, H maiúsculo para iniciar ou parar o log da janela atual. O padrão é screenlog.N, sendo N o número da janela; na janela zero, screenlog.0. Para iniciar uma sessão com registro e nome de arquivo explícito:

screen -L -Logfile backup-screen.log -S backup

O log registra saídas a partir da ativação, sem recuperar automaticamente o histórico anterior, e acrescenta conteúdo a um arquivo existente. Pode haver atraso até a gravação em disco. Esses detalhes constam na documentação oficial de logs. Confira o diretório, o espaço disponível e as permissões; dados sensíveis exibidos na tela também podem ser gravados.

Resolver problemas e proteger o acesso

Quando a sessão permanece Attached

Uma sessão pode continuar marcada Attached após uma falha de rede. Confirme se existe outro terminal ativo antes de usar screen -d -r nome-da-sessao; substitua o marcador pelo nome real. Volte a executar screen -ls se a seleção for ambígua.

Para entradas Dead ou inacessíveis, confirme antes se os processos ainda existem. screen -wipe remove entradas de sockets mortos identificadas pelo Screen; não recupera tarefas nem deve ser usado como motivo para encerrar processos ou apagar diretórios de sessões manualmente. A referência das opções de inicialização explica a seleção e a limpeza.

Permissões de acesso para sessões da mesma conta

Quem usa a mesma conta pode ter acesso às suas sessões. Chaves SSH diferentes não isolam pessoas conectadas com o mesmo usuário do sistema: prefira contas separadas e não deixe um shell com privilégios administrativos ou dados sensíveis disponíveis na sessão.

Se a tarefa morrer ao sair da conta, confira a política de encerramento de processos do sistema. A opção KillUserProcesses=yes do systemd-logind pode encerrar processos do escopo da sessão, incluindo Screen. Peça ao administrador que examine a configuração efetiva e a forma adequada de executar a tarefa; não presuma que autodetach substitua essa política.

Comparação de screen, nohup, tmux, systemd

Ferramentas Tarefas adequadas Principais características
screen Tarefas de terminal interativas que precisam de reconexão Permite desconectar e retomar a sessão, com várias janelas.
tmux Tarefas interativas e divisão complexa de telas Gerencia janelas e painéis, com configuração de atalhos e layout.
nohup Tarefas simples em lote não interativas Ignora SIGHUP, mas não restaura a tela do terminal.
systemd Serviços que devem estar sempre em execução Permite configurar início no boot, reinício em falhas, dependências e logs.

Para comparar com uma execução sem interação, consulte como usar nohup e redirecionar a saída.

Perguntas frequentes

A tarefa continuará mesmo se a conexão SSH for desconectada?

Em condições normais, com autodetach ativo e os processos ainda em execução, sim. Screen não impede falhas do programa, reinicializações, encerramento pelo administrador ou políticas que matem processos no logout.

O que devo fazer se várias sessões aparecerem ao usar screen -r?

Depois de verificar a lista com screen -ls, especifique o nome da sessão ou o identificador completo como screen -r backup. Criar sessões com nomes significativos pode reduzir erros de seleção.

O que devo fazer se Ctrl+A entrar em conflito com o atalho de um programa?

Pressione Ctrl+A e depois a minúsculo para enviar esse caractere ao programa. Para mudar o prefixo do Screen, use a opção -e ou a diretiva escape em ~/.screenrc, mantendo a documentação da equipe de acordo com a configuração.

As sessões do Screen podem ser restauradas após uma reinicialização?

Não. O Screen mantém apenas os processos e terminais virtuais em um sistema em execução; ele não restaura automaticamente sessões e processos após uma reinicialização. Se você precisar de inicialização automática após uma reinicialização, configure o serviço com systemd ou use um agendador adequado para a tarefa.

Escolher como manter a tarefa em execução

Para trabalho interativo, crie uma sessão com screen -S nome, desconecte a tela com Ctrl+A, d e retome com screen -r nome. Substitua nome pelo identificador escolhido. Faça um teste com uma tarefa descartável antes de confiar uma operação importante ao ambiente remoto.

Se o programa precisa iniciar no boot ou reiniciar após falhas, configure um serviço ou agendador apropriado. Use Screen quando a necessidade for retomar um terminal de trabalho, mantendo os limites de acesso e de persistência do sistema.