Basculer rapidement entre les sessions virtuelles (écran?)

19

J'aimerais avoir quelques sessions virtuelles dans une seule fenêtre de mastic et passer rapidement de l'une à l'autre. Quelle est la meilleure façon de procéder? screen? Je sais que je peux me détacher ctrl+adpuis me rattacher à une session différente, mais cela ressemble à beaucoup de frappe.

zzz
la source

Réponses:

22

Juste pour développer ce qu'Ansgar a dit au cas où vous ne seriez pas très familier avec l'écran gnu, Avoir plusieurs "fenêtres" dans une seule session d'écran accomplirait probablement ce dont vous avez besoin.

ctrl+ a, ccréera une nouvelle "fenêtre" dans votre session d'écran active. Vous pouvez basculer entre plusieurs fenêtres (comme indiqué par Ansgar) avec ctrl+ a, npour la fenêtre suivante et ctrl+ a, ppour la fenêtre précédente.

ctrl+ a, "vous donnera une liste de toutes vos fenêtres ouvertes.

L'utilisation de ces raccourcis faciles vous permettra de basculer entre différents terminaux très rapidement et facilement, atteignant votre objectif sans utiliser plusieurs sessions d'écran.

Si vous ajoutez la ligne suivante à ~ / .screenrc, elle affichera toujours vos fenêtres ouvertes et celle qui est sélectionnée, vous n'avez donc pas besoin de garder une trace de la fenêtre sur laquelle vous vous trouvez en vous souvenant.

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

C'est la ligne hardstatus que j'aime utiliser, mais elle est entièrement personnalisable (voir la page de manuel ou rechercher sur google "gnu screen hardstatus").

Il y a une tonne d'autres choses que vous pouvez faire avec (nommer les différentes fenêtres ouvertes par exemple), donc ça vaut la peine de lire quelques tutoriels.

Voici un couple que j'ai trouvé avec une recherche rapide:

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

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

Et bien sûr le plus utile de tous:

# From your terminal:
$ man screen

J'espère que cela pourra aider.

Matthieu

Matthieu
la source
2

Oui, screenc'est probablement la voie à suivre. Ctrl+ a, vous namènera à la fenêtre suivante, Ctrl+ a, pà la précédente. Ctrl+ a, 0.. 9vous permettra de passer à un écran particulier.

Ansgar Wiechers
la source
Vous pouvez configurer des raccourcis clavier beaucoup plus rapides, comme F11 pour les précédents, F12 pour la fenêtre suivante. Et changez le caractère d'échappement de l'écran de ^aquelque chose d'autre, donc ce n'est pas ridiculement ennuyeux d'utiliser la modification de ligne de style emacs dans bash, quoi que ce soit d'autre. J'utilise ^t.
Peter Cordes
1

Ce que les autres disent est correct. Je veux juste mentionner que tmuxc'est une alternative à screen. Ils ont des commandes très similaires.

Les deux screenet tmuxoffrent plusieurs fenêtres pour une session en cours d' exécution, ce qui est probablement ce que vous voulez. tmuxpropose également de sauter entre plusieurs sessions (chacune ayant sa propre fenêtre). Vous en auriez besoin très rarement.

Voici quelques liens vers la documentation de screen et un cours intensif sur tmux .

tkruse
la source
1

Après tant de temps, j'ai fait un script pour contourner cette fonctionnalité complètement manquante. Tout d'abord, il a besoin d'un fifo:

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

Ce canal nommé est utile pour la communication entre la session détachée et la session "Main-sans-écran".

Fichier sc (dans $ 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

Un exemple de "CONFIGFILE" est: ~ / .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

Le résultat est: lorsque vous souhaitez lancer le type d'écran:

sc Monitor

ou une autre sessionrc que vous aimez inventer, j'utilise le Session Work pour diverses choses

Ex: ~ / .screen / Workrc

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

Maintenant, nous sommes dans le moniteur de session, lorsque nous tapons:

sc Work

le moniteur de session se détache et écrit «Work» dans le tube nommé. Par conséquent, le premier script sc avance et attache la session "Work".
La sc invoquée depuis la fermeture du moniteur de session.

Lorsque nous détachons toutes les sessions, nous sommes dans une boucle infinie, nous devons donc faire Ctrl-c pour quitter.

Thomas8
la source
1

Vous pouvez le faire avec un simple script shell comme

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. Supposons que vous ayez peu d'écrans ouverts. Supposons également que vous les ayez classés comme travail et données.

    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. En appliquant screen -ls, vous devriez avoir vos écrans comme celui-ci

    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. Permet maintenant d'isoler les écrans détachés à l'aide de grep.

    screen -ls | grep Detached
    

Vous devriez obtenir quelque chose comme ça

        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. Permet maintenant de sélectionner celles que vous voulez (par exemple, les données), en utilisant à nouveau grep.

    screen -ls | grep Detached | grep data
    

Cela isolera uniquement les écrans de données. Vous pouvez changer le mot-clé grep avec des expressions régulières pour rechercher pour personnaliser votre recherche.

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. Heureusement, le résultat est bien structuré et délimité par des tabulations. Permet maintenant de diviser les colonnes en champs et de choisir le 2ème champ en utilisant cut.

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

Vous devrez appuyer sur ctrl+vpuis sur tab pour insérer un tabaprès le paramètre délimiteur -d. Les résultats devraient être comme ça.

81592.data13
81586.data12
81574.data10
81580.data11
  1. Emballez maintenant ceci dans une commande en utilisant les ...guillemets et faites une boucle sur les résultats comme celui-ci. Vérifiez toujours les commandes formulées avant de l'exécuter. j'ai utiliséecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. Si tout se passe bien, essayez-le sans echo.

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. Voila. Chaque écran dont vous vous détachez vous amène au suivant.

Bonne projection !!

Mo Hossny
la source
C'est une réponse vraiment sympa et cela augmente la qualité globale de ce site.
123456789123456789123456789
1

J'ai écrit un script de nœud pour permettre à l'utilisateur de sélectionner la session d'écran à laquelle se connecter à partir d'une liste, à l'aide des touches fléchées. Je l'ai fait un paquet npm. Vous pouvez le vérifier ici: écran-commande . Ou tout simplement npm i -g screen-commandpour l'essayer, en supposant que node.js est déjà installé. Après avoir installé le package, utilisez la commande scpour invoquer la liste des écrans.

J'espère que cela facilitera le passage à l'écran exact que vous souhaitez.

hi94740
la source