Screen: Gerenciador de janelas em modo texto

A ferramenta Screen, disponível na maioria das distribuições Linux, é uma ferramenta bastante útil para os “powerusers” mas apesar disso é pouco conhecida por aqueles que estão evoluindo de arrastadores de mouse para usuário de linha de comandos. Está aqui então a sua chance de evoluir um pouco mais no fantástico mundo da tela escura.

Quando eu era iniciante em Linux muitas das atividades que hoje são realizadas automaticamente pelo ambiente gráfico e suas fantásticas ferramentas deveriam ser realizadas pela linha de comandos, pois aqueles ambientes e suas ferramentas de configuração eram imaturas ou mesmo inexistentes.

Ainda hoje há muitos motivos para se usar a linha de comandos e que ao serem enumeradas levam a uma discussão sem fim sobre qual é a melhor interface de interação homem-máquina – se é via ambiente gráfico com mouse e ícones coloridos ou somente uma tela fria com cores sóbria e apenas um cursor piscando.

Não vou entrar no mérito desta discussão pois eu mesmo prefiro fazer um “mix” entre ambos os mundos e vez por outra me pego executando uma atividade no terminal que a muito tempo já é possível ser feita até mesmo pelos mais simplórios ambientes gráficos.

Por que usar um gerenciador de janelas em modo texto?

Assim como os gerenciadores de janela em modo gráfico, os de modo texto permite que você tenha várias janelas abertas, cada uma executando uma aplicação independente.

A diferença fica por conta do uso exclusivo do teclado para trabalhar com o gerenciador de janelas em modo texto e também do fato das janelas não serem exatamente o que se imagina delas ao tentar traçar um paralelo entre o modo gráfico e o modo texto.

Janelas em modo texto é tão somente uma segunda área de trabalho e que consequentemente poderá ou não estar visível na tela e não pode ter seu tamanho alterado.

Instalando

A instalação do Screen segue ao ritual próprio definido por sua distribuição Linux, seja ela qual for. Procure pelo pacote com este mesmo nome e o instale para que a ferramenta esteja disponível no seu sistema. No Debian/Ubuntu etc, por exemplo, o comando aptitude resolve o problema rapidamente:

sudo aptitude install screen

Iniciando o screen

Uma vez que o pacote do Screen esteja instalado você poderá chamá-lo a partir da linha de comandos todas as vezes que abrir um terminal, simplesmente digitando o seu nome, antes de começar as suas atividades:

screen

Ou se preferir, você poderá incluí-lo no seu ~/.bash_profile para que ele seja executado automaticamente ao executar um terminal.

Feito isso o comando será executado silenciosamente e não apresentará nenhuma mensagem avisando sobre o ocorrido mas certamente ele estará rodando e pronto para ser útil.

Começando pelo básico

O Screen já está instalado, você já o executou no terminal de onde ele será usado agora você precisa decorar algumas teclas de atalho.

A primeira e essencial é a combinação CTRL+A. Esta combinação é que lhe dará acesso as funções do Screen. Nunca a esqueça pois antes de qualquer tecla de função você a usará para informar ao terminal que você dará uma ordem ao seu gerenciador de janelas e não ao aplicativo que está em execução.

Os comandos básicos são estes aqui:

  • c – Cria uma nova janela
  • n – Alterna para a próxima janela
  • p – Alterna para a janela anterior
  • w – Exibe o nome das janelas na barra de status
  • <número> – Alterna para a janela de número especificado

Sendo assim, caso queira então criar uma janela eu devo teclar CTRL+A e em seguida teclar ‘c‘. Com isso teremos um terminal novinho para ser usado. Da mesma forma caso queira alternar para a janela número 0, pressiono CTRL+A e em seguida o número ‘0‘.

Veja então que esta combinação de CTRL+A seguida de alguma tecla é válida para todos os demais comandos. Só como um último exemplo, usando CTRL+A, seguido de ‘w‘ é possível ver o nome e número das janelas que temos abertas no momento.

Usando na prática

O uso mais comum do screen é quando se realiza uma conexão remota com algum servidor (via ssh, por exemplo) e uma vez feita a conexão você precise realizar mais de uma tarefa ao mesmo tempo.

Vamos imaginar então que a partir do meu notebook, eu me conectei por ssh no meu desktop do escritório:

ssh welrbraga@desktopescritorio

Uma vez informada a senha e o prompt visível para trabalhar eu invoco o Screen antes de começar minhas atividades:

screen

Feito isso eu já posso iniciar meu trabalho normalmente. Digamos que eu inicie um download com o wget assim:

wget http://algumlugar.com.br/algumapasta/algumaoutrapasta/algumarquivodevideo.xyz

O download deste arquivo poderá durar alguns minutos ou mesmo algumas horas, mas eu deveria ainda realizar algumas atividades, como por exemplo disparar uma rotina de backup, ou ler algum arquivo, baixar um outro arquivo, ou qualquer outra coisa que para ser feito seria necessário abrir outro terminal e consequentemente outra conexão com o meu desktop.

Ao invés de abrir outro terminal, como eu iniciei o Screen antes de começar meu download, o que eu devo fazer é simplesmente criar uma nova janela e usá-la para realizar as outras atividades. Enquanto isso o download continuará em segundo plano na primeira janela.

Para criar esta nova janela bastaria teclar CTRL+A e em seguida a tecla ‘c‘. Imediatamente você terá um terminal limpo e pronto para uso, de onde você poderá trabalhar normalmente, como se não existisse aquele em que você está baixando o arquivo.

Caso você queira alternar entre ambas as janelas, para ver o estado do seu download, você poderá usar a tecla de atalho CTRL+A seguido de ‘n‘, ‘p‘, ou os números ‘0‘ ou ‘1‘ que correspondem aos números das duas janelas que temos abertas.

Trabalhando com mais de duas janelas

Você pode abrir quantas janelas mais forem necessárias para realizar outras atividades e alternar entre elas usando estas combinações de teclas,mas para facilitar ainda mais você pode acrescentar mais estas teclas a sua lista:

  • S (maiúsculo)- Divide a tela para exibir mais de uma janela simultaneamente
  • <TAB> – Alterna entre as janelas visíveis

Imagine então que enquanto o seu download é executado na janela número ‘0’, e você ainda realiza algumas atividades na janela ‘1’, você queira também monitorar o seu sistema usando o comando top, htop, ou outro comando qualquer.

Você pode simplesmente dividir a tela em dois, ou três paineis usando CTRL+A, seguido de ‘S‘ (maiúsculo) e depois alternar entre as janelas que se queira exibir em cada painel.

Conforme mostrado nesta nova lista, bastaria teclar CTRL+A, seguido de <TAB> para alternar entre os paineis e em seguida alternar para a janela desejada (n, p, <número>), ou ainda criar uma nova janela (c).

Muitas janelas e o mesmo nome

Outra forma de se alternar entre as janelas é usando o atalho (aspas dupla), ou seja, se você teclar CTRL+A seguido de você verá a lista de janelas disponíveis abertas e poderá alternar entre elas usando as setas direcionais do teclado e ENTER.

O problema é que ao criar uma nova janela ela terá geralmente um nome genérico, como ‘bash’ por exemplo, o que dificultará a identificação de qual programa está rodando ali. Para que esta dificuldade não ocorra você poderá nomear as janelas a medida que as cria.

Para nomear uma janela simplesmente alterne para ela (conforme já explicado) e então use a combinação CTRL+A, seguida de ‘A‘ (maiúscula). Um prompt será exibido abaixo da janela onde você poderá apagar o nome que estiver lá e digitar outro que facilite a identificação na listagem de janelas.

  • – Lista as janelas abertas e permite alternar entre elas
  • A – Altera o título da janela

Conectando e desconectando do Screen

Nem tudo é perfeito, o Screen não gosta muito de trabalhar com as teclas PgUp e PgDn, por exemplo. Você descobrirá algumas de suas limitações com relação a exibição de dados ao longo do uso, mas isso não é motivo para frustração, o custo-benefício em média vale a pena.

Sendo assim, caso ele incomode para executar uma tarefa especifica, você pode deixa-lo rodando em segundo plano e dar uma escapulida rapidinha para executar alguma outra atividade. Ao término só voltar à ele.

Imagine então que eu precise executar um comando fora do Screen, por qualquer motivo que seja. Para dizer ‘volto logo, até já’ ao Screen, use a combinação CTRL+A seguido de ‘d‘. Você verá uma mensagem na tela dizendo que você está desconectado do Screen e então o prompt de comandos.

Neste momento você poderá realizar qualquer atividade que queira sem que o Screen interfira no seu trabalho. Quando você quiser voltar à ele simplesmente digite o comando:

screen -r

Isto informa ao Screen que ele deve reconectar a sessão anteriormente aberta. E ao fazê-lo as suas janelas estarão lá abertas e com o seu comandos ainda em execução [quase] como se nada de feio tivesse acontecido.

O “quase” é por conta do Screen não recuperar os paineis. Ou seja, digamos que você tinha dois paineis abertos e cada um com uma janela: uma com o wget e outro monitorando o syslog. Ao desconectar do Screen e reconectar novamente, embora ambas as janelas estejam lá com seus comandos em execução, você terá apenas um painel aberto. Mas isso não é nada que um CTRL+A,S, seguido de CTRL+A,TAB e CTRL+A,n não resolva.

Saindo para o café

Caso você precise dar uma saidinha rápida e deixar o Screen aberto na tela você pode prevenir que alguém mexa no seu console, usando apenas a combinação CTRL+A, seguido de ‘x‘. Isso irá bloquear a tela e que só poderá voltar a ser usada novamente mediante o uso da sua senha de login.

Ao voltar apenas digite a sua senha que o Screen abrirá a sua tela com as aplicações rodando normalmente.

Finalizando o Screen

Se por outro lado, você não quiser mais trabalhar com o Screen você deve encerrar todas as aplicações em cada janela e fechá-las. Quando não houver nenhuma janela em execução o Screen será encerrado.

Para isso você tem duas maneiras:

  1. A forma conservadora é aquela em que você encerra as aplicações normalmente e quando estiver de volta ao prompt do bash digitar exit ou teclar CTRL+D
  2. A foma radical consiste matar a aplicação, junto com o bash e a janela de uma só vez teclando a combinação CTRL+A, seguido de ‘k‘ e ao ser solicitada a confirmação pressione ‘y‘ (de yes) ou ‘s‘ de (sim).

Além do Screen

O screen não é a única ferramenta para gerenciar janelas em modo texto. Uma que me lembro de já ter lido a respeito mas nunca usei é o Twin [5], que usa uma abordagem bem diferente do Screen mas o objetivo é o mesmo. Talvez em uma próxima oportunidade eu venha a comentar sobre ele.

Há ainda o Byobu, que acompanha o Ubuntu e talvez algumas outras distribuições, mas este na verdade é apenas um script para adicionar algumas facilidades ao screen. A sua vantagem em relação ao Screen padrão é que ele permite o uso das teclas <F1>…<F9> para executar as ações básicas do Screen e ainda apresenta uma barra de status colorida e bacana no final da tela.

Conclusão

O que mostrei aqui é apenas o básico sobre o uso do Screen. Há muito mais o que conhecer sobre esta ferramenta e a medida que você começar a usá-la certamente ai querer aprender mais sobre ela. Não deixe de consultar a sua ajuda online teclando CTRL+A, seguida de ‘?‘, a sua página de manual (man screen) e também os links relacionados abaixo.

E como última dica: No começo poderá ser difícil decorar as principais combinações de teclas. Uma forma que eu tive para decorá-las foi as escrever em um papel e deixa-lo na frente do monitor. Não demorou mais do que alguns dias usando esta “cola” para que eu o aposentasse.

Referências

[1] Jeff. Linux Screen Tutorial and How To. Disponível em <http://www.rackaid.com/resources/linux-screen-tutorial-and-how-to/>
[2] Karanbir Singh. Using screen automagically. Disponível em <http://www.karan.org/blog/index.php/2010/02/18/using-screen-automagically>
[3] Adam Lazur. Power Sessions with Screen. Disponível em <http://www.linuxjournal.com/article/6340>
[4] FSF. Screen User’s Manual. Disponível em <http://www.gnu.org/software/screen/manual/html_node/index.html>
[5] Massimiliano Ghilardi. Twin. Disponível em <http://linuz.sns.it/~max/twin/>

Uma ideia sobre “Screen: Gerenciador de janelas em modo texto”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *