web-dev-qa-db-fra.com

GNU Guide de survie de l'écran

Qu'est-ce que les gens pensent non seulement des choses essentielles que vous devez savoir sur l'excellent utilitaire Screen, mais des choses que vous penseriez utiles d'enseigner à quelqu'un, un débutant, à partir de zéro?

Je viens de présenter un ami à Screen et ils ont du mal à s'y habituer. Les analogies et les conseils pratiques pour se souvenir des liens, etc. seraient géniaux.

106
Henry B

J'utilise l'écran depuis plus de 10 ans et j'utilise probablement moins de la moitié des fonctionnalités. Il n'est donc certainement pas nécessaire d'apprendre immédiatement toutes ses fonctionnalités (et je ne recommanderais pas d'essayer). Mes commandes quotidiennes sont:

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

Je pense que c'est ça. J'utilise parfois les fonctionnalités de l'écran partagé, mais certainement pas quotidiennement. L'autre astuce est que si l'écran semble s'être verrouillé parce que vous avez frappé une combinaison de touches aléatoire par accident, faites les deux ^ Q et ^ A ^ Q pour essayer de le déverrouiller.

91
Greg Hewgill

Je ne pouvais pas m'habituer à filtrer jusqu'à ce que je trouve un moyen de définir une `` barre d'état '' au bas de l'écran qui montre quel `` onglet '' ou `` écran virtuel '' sur lequel vous vous trouvez et quels autres il y a. Voici ma configuration:

[roel@roel ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[roel@roel ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[roel@roel ~]$
36
Roel

Ctrl+A ? - affichez l'écran d'aide!

30
James Muscat

Si votre ami a l'habitude d'appuyer sur ^A pour arriver au début de la ligne en bash, il/elle va avoir quelques surprises, puisque ^A est la liaison de la touche de commande d'écran. Habituellement, je me retrouve avec un écran figé, probablement à cause d'une touche aléatoire sur laquelle j'ai appuyé après ^A :-)

Dans ces cas, j'essaie

^A s et ^A q bloquer/débloquer le défilement du terminal

pour arranger ça. Pour aller au début d'une ligne à l'intérieur de l'écran, la séquence de touches est ^A a

26
agnul

Vous pouvez remapper la touche d'échappement de ctrl-A pour qu'elle soit une autre clé de votre choix, donc si vous l'utilisez pour autre chose, par ex. pour aller au début de la ligne dans bash, il vous suffit d'ajouter une ligne à votre fichier ~/.screenrc. Pour le rendre ^ b ou ^ B, utilisez:

escape ^bB

À partir de la ligne de commande, utilisez des sessions de noms pour garder plusieurs sessions sous contrôle. J'utilise une session par tâche, chacune avec plusieurs onglets:

 écran -ls répertorie vos sessions d'écran actuelles 
 écran -S <nom> crée une nouvelle session d'écran appelée nom 
 écran -r <nom> se connecte aux sessions d'écran nommées 

Lorsque vous utilisez l'écran, vous n'avez besoin que de quelques commandes:

 ^ A c créer un nouveau Shell 
 ^ A [0-9] Switch Shell 
 ^ A k tuer le Shell actuel 
 ^ A d se déconnecter de l'écran 
 ^ A? montrer l'aide 

Une excellente référence rapide peut être trouvée ici . Vaut le bookmarking.

12
Andrew Johnson

Quelques conseils pour ceux qui connaissent un peu l'écran, mais qui ont tendance à ne pas se souvenir des choses qu'ils lisent dans la page de manuel:

  • Changer le nom d'une fenêtre d'écran est très simple: ctrl+Ashift+A.
  • Vous avez manqué le dernier message de l'écran? ctrl+actrl+m le montrera à nouveau pour vous.
  • Si vous voulez exécuter quelque chose (comme suivre un fichier) et que l'écran vous indique quand il y a un changement, utilisez ctrl+Ashift+m sur la fenêtre cible. Attention: il vous fera savoir si n'importe quoi change.
  • Vous souhaitez sélectionner directement la fenêtre 15? Essayez-les dans votre .screenrc fichier:
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

Qui attribue ctrl+ashift+0 through 9 pour les fenêtres 10 à 19.

8
staticsan

ctrl+a est une clé spéciale.

ctrl+ad - [d] etach, laisse les programmes (irssi?) en arrière-plan, rentre chez toi.

ctrl+ac [c] recrée une nouvelle fenêtre ctrl+a0-9 basculer entre les fenêtres par numéro

screen -r - retour à la session détachée

Cela couvre 90% des cas d'utilisation. N'essayez pas de montrer toutes les fonctionnalités en même temps.

6
tadeusz

Ctrl+A est la commande de base

Ctrl+AN = aller à l'écran *** N *** ext

Ctrl+AP = aller à l'écran *** P *** revious

Ctrl+AC = *** C *** recréer un nouvel écran

Ctrl+AD = *** D *** etachez votre écran

6
Niko Gunadi

http://www.debian-administration.org/articles/34

Je l'ai écrit il y a quelques années, mais c'est toujours une bonne introduction qui reçoit beaucoup de commentaires positifs.

6
user14038

Je "dois" ajouter ceci: ajouter

bind s

à ton .screenrc, si vous - comme moi - utilisiez des fenêtres fractionnées, comme C-a S divise la fenêtre réelle, mais C-a s le fige. Je viens donc de désactiver le raccourci de gel.

6
Zsolt Botykai

Pas vraiment essentiel non seulement lié à l'écran, mais permettant 256 couleurs dans mon terminal, GNU Screen et Vim a amélioré mon expérience d'écran grand temps (surtout depuis que je code dans Vim environ 8h par jour - il y a de très bons thèmes de couleurs pour les yeux).

4
jkramer

Il y a travail intéressant en cours pour obtenir une bonne configuration d'écran gnu par défaut dans la prochaine version d'Ubuntu Server, qui inclut l'utilisation du bas de l'écran pour afficher toutes les fenêtres ainsi que d'autres détails utiles de la machine (comme # mises à jour disponibles et si la machine a besoin d'un redémarrage). Vous pouvez probablement saisir leur .screenrc et personnalisez-le selon vos besoins.

Les commandes les plus utiles que j'ai dans mon .screenrc sont les suivants

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

De cette façon, je sais toujours quelles fenêtres sont ouvertes et ce qui y fonctionne en ce moment aussi.

3
David Dean

La première modification que j'apporte à .screenrc est de changer la commande d'échappement. Contrairement à beaucoup d'entre vous, je n'aime pas la séquence Ctrl-A par défaut en raison de son interférence avec cette fonctionnalité fondamentale dans presque tous les autres contextes. Dans mon fichier .screenrc, j'ajoute:

s'échapper `e

C'est backtick-e.

Cela me permet d'utiliser le backtick comme touche d'échappement (par exemple, pour créer un nouvel écran, j'appuie sur backtick-c, detach est backtick-d, backtick-? Is help, backtick-backtick est l'écran précédent, etc.). La seule façon dont cela interfère (et j'ai dû me débarrasser de l'habitude) consiste à utiliser le backtick sur la ligne de commande pour capturer la sortie de l'exécution ou à coller tout ce qui contient un backtick. Pour le premier, j'ai modifié mon habitude en utilisant la convention BASH $ (commande). Pour ce dernier, je viens généralement d'ouvrir un autre xterm ou de me détacher de l'écran, puis de coller le contenu contenant le backtick. Enfin, si je souhaite insérer un backtick littéral, j'appuie simplement sur backtick-e.

3
Gary Chambers

Je ne me souviens plus de qui j'ai volé ça (quelqu'un sur dotfile.org). Je l'ai légèrement modifié pour ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Ensuite, j'ai défini les alias bash suivants:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Il ouvre un nouvel écran pour les alias ci-dessus et iff en utilisant ssh, il renomme le titre de l'écran avec le nom d'hôte ssh.

Cheers z0mbix

3
user203445

J'aime mettre en place une session d'écran avec des noms descriptifs pour les fenêtres. ^ a A vous permettra de donner un nom à la fenêtre actuelle et ^ a "vous donnera une liste de vos fenêtres. Une fois terminé, détachez l'écran avec ^ a d et rattachez-le avec l'écran -R

2
innaM

Quelqu'un a posté une question similaire à cela sur Server Fault .

2
Vagnerr

J'aime utiliser screen -d -RR pour créer/attacher automatiquement à un écran donné. J'ai créé des fonctions bash pour le rendre plus facile ...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

Ils créent un alias pour /usr/bin/screen -d -RR -S $name $command. Par exemple, j'aime utiliser irssi dans une session écran, donc dans mon .bashrc (sous ces fonctions), j'ai:

mkscreen irc /usr/bin/irssi

Ensuite, je peux simplement taper irc dans un terminal pour entrer dans irssi. Si l'écran 'irc' n'existe pas encore, il est créé et/usr/bin/irssi est exécuté depuis celui-ci (qui se connecte automatiquement, bien sûr). S'il est déjà en cours d'exécution, je le rattache simplement, en détachant de force toute autre instance qui lui est déjà attachée. C'est assez sympa.

Un autre exemple est la création d'alias d'écran temporaires pour les perldocs lorsque je les rencontre:

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

L'option -a (doit être le premier argument) ajoute l'alias d'écran à .bashrc (donc il est persistant) et -d le supprime (ceux-ci peuvent potentiellement être destructeurs, donc utilisez à vos risques et périls). xD

Ajouter:

Un autre bashisme que je trouve pratique lorsque je travaille beaucoup avec l'écran:

alias sls='/usr/bin/screen -ls'

De cette façon, vous pouvez répertorier vos écrans avec beaucoup moins de touches. Je ne sais pas si sls entre en collision avec des utilitaires existants, mais ce n'était pas le cas à l'époque sur mon système, alors j'y suis allé.

1
bambams

^ A est un excellent caractère spécial pour les personnes UNIX, mais si votre écran utilise pour parler à OpenVMS, alors ne pas pouvoir ^ A va vous rendre chauve prématurément. Dans VMS, si vous modifiez une commande DCL avant l'exécution à partir du tampon d'historique, le mode Insertion est désactivé (doit être pour plusieurs raisons que je n'entrerai pas ici) .. pour l'activer afin de ne pas trop tapez votre commande plutôt que d'espacer les choses, vous devez appuyer sur ^ A

0
user2146463

^ A A revient à l'écran d'où vous venez.

0
dummy