Gerenciando sessões e janelas no terminal com GNU Screen
Multiplexadores de terminal são ferramentas que permitem gerenciar múltiplas sessões (de um terminal).
As sessões são um conjunto de janelas. Uma analogia pertinente é considerar que uma sessão seja como um espaço de trabalho em ambiente desktop, e cada janela como se fosse um programa dentro de um espaço. A multiplexação de terminal funciona por este mesmo conceito, mas dentro de um terminal. Além disso, as sessões de um multiplexador podem ser desconectadas e recuperadas posteriormente.
Os multiplexadores são populares em servidores, acessados remotamente, onde pode ser necessário preservar sessões mesmo que o administrador se desconecte dele. Entretanto, também podem ser úteis para uso doméstico:
- Funcionalidade de ‘abas’ em qualquer terminal, mesmo os que não implementam essa funcionalidade (por exemplo, o Alacritty)
- Funcionalidade de ‘scroll’ também em qualquer terminal
- Layout de janelas da sessão (divisão horizontal ou vertical)
- Salvar uma sessão em um terminal, restaurar em outro ou deixar o terminal livre para ser fechado
Neste post, vou apresentar o multiplexador GNU Screen. Eu o utilizo para executar processos temporários, mas long-running, como servidores de desenvolvimento (Django, node, Jupyter notebook) e poder liberar o terminal, sem criar serviços de sistema. E também para usar múltiplas janelas no Alacritty.
Instalação
O Screen pode ser instalado no Debian pelo apt
: sudo apt install screen
e executado pelo comando screen
. Será apresentada uma tela de boas-vindas, e logo após estará pronto para uso.
Por padrão, não há nenhuma indicação visual de que o Screen esteja executando. Não há uma linha de status mostrando as janelas, por exemplo. Mas isso pode ser configurado no arquivo ~/.screenrc
com as linhas:
hardstatus on
hardstatus alwayslastline
hardstatus string "%{= kG}%-w%{= KW}%n %t%{-}%+w"
Uso interativo
O Screen possui uma tecla prefixo para comandos, que é C-a
(Ctrl+a). Para ver a lista completa de combinação de teclas, pressione C-a ?
. As combinações que eu considero mais úteis são:.
Combinação de teclas | Descrição |
---|---|
C-a c | Nova janela |
C-a [num] | Alternar para a janela número [num] |
C-a " | Selecionar janelas a partir de uma lista |
C-a | | Divisão vertical |
C-a S | Divisão horizontal |
C-a d | Desvincular sessão do terminal |
C-a k | Fechar a janela atual |
C-a \ | Encerrar a sessão inteira |
C-a A | Alterar o título da janela |
C-a n | Alternar para a janela seguinte |
C-a p | Alternar para a janela anterior |
C-a TAB | Alternar entre regiões das divisões |
C-a X | Fechar a região atual |
C-a ESC | Modo ‘copy’ |
C-a ? | Ajuda |
Ao invés de combinações de teclas, os comandos também podem ser executados pelo nome através do colon
(modo de comando), ativado pela combinação C-a :
. Neste modo, é possível digitar o nome do comando, como title
para alterar o título da janela.
O modo ‘copy’ habilita a movimentação na janela do terminal usando as teclas vim. Até onde sei, não há uma ajuda interna com as teclas disponíveis no copy-mode, mas o manual tem a lista completa.
Linha de comando
Após desvincular a sessão do terminal (C-a d
), é possível utilizar a linha de comando do Screen das seguintes formas:
screen -ls
: Mostra as sessões criadas
screen -S [nome]
: Cria uma nova sessão chamada [nome]
screen -r [nome]
: Vincula novamente uma sessão desvinculada, [nome] pode ser apenas os caracteres iniciais
Outras opções mais avançadas podem ser vistas no manual: man screen
.
Configuração
O Screen pode ser configurado através do arquivo .screenrc
. Um exemplo com as configurações padrão pode ser encontrado em /usr/share/doc/screen/examples/screenrc
. O mais importante seria ter uma linha hardstatus informativa, como visto na seção de instalação.
Conclusão
Multiplexadores de terminal são úteis para aumentar a eficiência e controle ao trabalhar na linha de comando. Permitem organizar sessões e janelas por contexto, desvincular as sessões do terminal e dividir a tela e alternar entre múltiplos painéis.
Referências
How to use GNU SCREEN (video)
Excelente!
Muito bom!