Alternar rapidamente entre sessões virtuais (tela?)

Alternar rapidamente entre sessões virtuais (tela?)

Eu gostaria de ter poucas sessões virtuais em uma janela do PuTTY e alternar entre elas rapidamente. Qual é a melhor maneira de fazer isso? screen? Eu sei que posso desconectar ctrl+ade reconectar em uma sessão diferente, mas parece muita digitação.

Responder1

Apenas para expandir o que Ansgar disse, caso você não esteja muito familiarizado com a tela gnu, ter várias "janelas" em uma única sessão de tela provavelmente realizará o que você precisa.

ctrl+ a, ccriará uma nova “janela” na sua sessão de tela ativa. Você pode alternar entre várias janelas (conforme indicado por Ansgar) com ctrl+ a, npara a próxima janela, e ctrl+ a, ppara a janela anterior.

ctrl+ a, "fornecerá uma lista de todas as janelas abertas.

O uso desses atalhos fáceis permitirá que você alterne entre diferentes terminais com muita rapidez e facilidade, atingindo seu objetivo sem usar várias sessões de tela.

Se você adicionar a seguinte linha a ~/.screenrc ela sempre exibirá suas janelas abertas e qual delas está selecionada, então você não precisa acompanhar em qual janela está lembrando.

hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'

Esta é a linha hardstatus que eu gosto de usar, mas é completamente personalizável (veja a página de manual ou pesquise no Google por "gnu screen hardstatus").

Há muitas outras coisas que você pode fazer com ele (nomear as diferentes janelas abertas, por exemplo), então vale a pena ler alguns tutoriais.

Aqui estão alguns que encontrei com uma pesquisa rápida:

http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml

http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

E claro o mais útil de todos:

# From your terminal:
$ man screen

Espero que ajude.

Mateus

Responder2

Sim, screené provavelmente o caminho a percorrer. Ctrl+ a, nlevará você para a próxima janela, Ctrl+ a, ppara a anterior. Ctrl+ a, 0.. 9permitirá que você mude para uma tela específica.

Responder3

Depois de tanto tempo fiz um Script para contornar esse recurso completamente ausente. Primeiro de tudo, precisa de um fifo:

mkdir ~/.screen
mkfifo ~/.screen/pipe

Este pipe nomeado é útil para a comunicação entre a sessão desanexada e a sessão "Principal sem tela".

Arquivosc(em $PATH):

#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"

if [ ! -r $CONFIGFILE ] ; then
   echo "Configurazione per $1 Assente" >&2
   exit 1
fi

exec 3<> ~/.screen/pipe

if [ "$STY" != "" ] ; then
   screen -d "$STY"
   echo "$1" >&3
else
   screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
   while true ; do
      read line <&3
      screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
   done
fi

Um exemplo de "CONFIGFILE" é: ~/.screen/Monitorrc

layout new Monitor

screen -t "bash" bash --login
split -v
focus next
split 
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left

O resultado é: quando você deseja iniciar o tipo de tela:

sc Monitor

ou outra sessionrc que você gosta de inventar, eu uso o Session Work para diversas coisas

Ex: ~/.screen/Workrc

layout new Work  
screen -t "bash" bash --login  

Agora estamos no Session Monitor, quando digitamos:

sc Work

o monitor de sessão se desconecta e grava "Trabalho" no tubo nomeado. Conseqüentemente, o primeiro script sc avança e anexa a sessão "Trabalho".
O sc invocado a partir do fechamento do Monitor de sessão.

Quando desconectamos todas as sessões estamos em um loop infinito então temos que fazer Ctrl-c para sair.

Responder4

Você pode fazer isso com um script de shell simples como

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Vamos supor que você tenha poucas telas abertas. Vamos supor também que você os classificou como trabalho e dados.

    for i in {10..13}; do screen -S `printf data%02d $i`; done;
    for i in {0..5}; do screen -S `printf work%02d $i`; done;
    ...
    
  2. Aplicando screen -ls, você deverá ter suas telas assim

    There are screens on:
        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81607.ttys014.Mo    (Attached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
    12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
    
  3. Agora vamos isolar as telas destacadas usando grep.

    screen -ls | grep Detached
    

Você deveria conseguir algo assim

        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
  1. Agora vamos selecionar os que você deseja (por exemplo, dados), novamente usando grep.

    screen -ls | grep Detached | grep data
    

Isso isolará apenas as telas de dados. Você pode alterar a palavra-chave grep com expressões regulares para pesquisar e personalizar sua pesquisa.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Felizmente, o resultado é bem estruturado e delimitado por tabulações. Agora vamos dividir as colunas em campos e escolher o segundo campo usando cut.

    screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

Você precisará pressionar ctrl+vtab para inserir um tabapós o parâmetro delimitador -d. Os resultados deveriam ser assim.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Agora coloque isso em um comando usando ...aspas e faça um loop sobre os resultados como este. Sempre verifique primeiro os comandos formulados antes de executá-los. eu useiecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Se tudo correr bem, tente sem echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Voilá. Cada tela da qual você se separa leva você para a próxima.

Boa exibição!!

informação relacionada