Gnu screen, ou comment rendre la console plus pratique
Par eMerzh le jeudi 31 mai 2007, 09:35 - Lien permanent
Ayant un hébergeur avec un accès shell, j'effectue la plupart des développements directement dans mon vim par ssh. Seulement, il est souvent utile de faire des changements dans plusieurs fichiers en même temps, de se trimbaler dans plusieurs dossiers à la fois,...
Gnu Screen est un logiciel rêvé pour cette utilisation. Voyons ensemble comment il fonctionne.
Principe
Vous êtes connecté à irc en console chez vous et vous voudriez pouvoir vous connecter du boulot sans pour autant ouvrir une deuxième session irc et sans perdre la précédente conversation.
Chez vous, vous lancez alors un screen dans lequel vous faites tourner un client irc. Vous parlez, puis vient l'heure d'aller travailler. Vous détachez la fenêtre et vous délogguez votre session à la maison. Une fois au boulot, vous vous connectez en ssh à votre maison et rattachez alors le terminal. Vous retrouvez alors la conversation irc comme si vous ne l'aviez jamais quittée!
Trêve de bavardages voyons cela de plus près, ce sera sans doute plus clair.
Installation
S'il n'est pas déjà installé, tapez :
sudo aptitude install screen
récupérerez ensuite mon qui facilitera la navigation dans screen
wget http://blog.bmaron.net/public/screenrc
et copiez le dans votre répertoire home
mv screenrc ~/.screenrc
voilà c'est installé 
Utilisation
Sur l'ordinateur A, lancez un screen en utilisant simplement la commande "screen". Utilisez ensuite le shell comme bon vous semble.... lancez par exemple un irssi.
Ici, vous pouvez "détacher" votre console, à l'aide des touches Ctrl et la touche "a" suivie de la touche "d" (=> Ctrl-a + d). Ceci aura pour effet de quitter temporairement la discussion sur irc et vous retrouver dans le shell de départ.
Ensuite sur l'ordinateur B ( ça marche aussi depuis le même ordi, mais ça à moins d'intérêt :p), connectez vous en ssh sur votre machine A.
ssh A.com
Si vous aviez détaché la console, vous pouvez la "rattacher" grâce à la commande screen -r suivi du nom de la session ( screen -r seul vous donne la liste des sessions ouvertes et s'il n'y en a qu'une, va directement rattacher celle-ci).
Si la console n'était pas détachée, utilisez alors un screen -x qui va entrer dans le mode "muti-visualisation" permettant à deux personnes de voir la même console (extrêmement pratique pour le tutorat :p)
génial non?
vous pouvez aussi, dans un screen, créer plusieurs fenêtres et sauter de l'une à l'autre :
Ctrl-a +c pour créer une nouvelle fenêtre, Ctrl-a +n (comme next) pour aller à la fenêtre suivante et Ctrl-a + p (comme previous) pour la précédente.
Vous pouvez aussi utiliser Ctrl-a + " pour afficher la liste des fenêtres disponibles et choisir dans la liste!
Dernier raccourci pour aujourd'hui, Ctrl-a+UnChiffre va à la fenêtre UnChiffre ( ==>Ctrl-a +3 va à la fenêtre n°3).
Sympa nan? Et des millions d'autres choses sont encore possibles grâce à screen...
Je sais que tout n'est pas facile à retenir mais, je vous promets que le jeu en vaut la chandelle!


Commentaires
Snif, si seulement mon boulot autorisait les connexion ssh vers l'extérieur
Et quoi szdavid, pas moyen de passer par le proxy avec un connect ou un corkscrew?
j'ai essayé pleins de trucs ; snif, snif
Un petit screenrc :

^p pour passer les commandes
^p + espace screen suivant
^p + p screen precedent
^p + c creer un screen
^p + d detacher du screen
Le hardstatus est sexy pour un geek, j'ai conservé le wuff wuff
il se trouve http://unscarred.free.fr/screenrc le mettre dans son maison et le renommer en .screenrc
Voila
À noter : le ctrl+a, d permet se détacher du shell en cours, et on peut alors se délogger du ssh : screen continue à tourner.
Ce qui veut dire que screen peut être utilisé pour remplacer avantageusement un nohup.
Je m'en sers tous les jours : ssh, screen -r, "tout va bien sur mon script super long", ctrl+a, d, exit
Tout n'est pas parfait avec screen:
- on ne peut plus revenir à la page précédente avec w3m, lynx ou links;
- raggle (lecteur de flux rss) n'ouvre plus les navigateurs en mode texte;
- il n'est plus possible de revenir rapidement au début de la ligne de commande, Ctrl+a étant déjà réquisionné.
@Romano: pour les problèmes de raccourcis déjà attribuer, tu peux redéfinir la touche de fonction (ctrl+a par défaut) dans ton screenrc comme le propose SaouLLaBiT
$ man screen
[...]
C-a a (meta) Send the command character (C-a) to window.
See escape command.
[...]
Je m'en sers aussi pas mal pour accéder au réseau informatique de l'unif, parce qu'il n'y a que deux serveurs directement accessibles depuis l'extérieur, permettant par la suite de se connecter à toutes les autres machines du réseau (toujours via ssh). Plutôt que de se connecter n fois à l'un de ces deux serveurs pour accéder à n de ces machines, je me connecte une seule fois et lance n screens
(soit sur le serveur, soit 1 sur chaque machine, mais dans ce cas faut refaire les ssh à chaque changement de machine). Mais bon y a quand même rien à faire: je me retrouve toujours à un moment connecté à A via B via C via... 
Sinon Raviolinux en avait déjà parlé sur le planet il y a un bon moment (11 juin 2006):
http://raviolinux.gaspif.be/index.p...
@eMerzh: il faut déjà savoir comment redéfinir le Ctrl+a. On peut aussi redéfinir le raccourcis "revenir en début de ligne de commande" pour le shell, mais là non plus je ne sais pas trop comment faire.
Autre fonctionnalitée utilisée souvent: partager son screen avec un autre utilisateur.
"ctrl+a" ensuite ":multiuser on"
"ctrl+a" ensuite ":acladd username"
L'utilisateur voulant se connecter fait ensuite: "screen -r tonuser"
Vous pourrez ensuite travailler ensemble dans le meme screen. Dans le même ou dans un different tab.
Salut, excellent tutoriel
Je trouve que le binding des touches pour changer de fenêtre screen n'est pas terrible par défaut, mais j'ai trouvé sur le site suivant comment définir les touches CTRL+flèches(haut et bas) - c'est plus pratique que C-a-n...
http://www.parsed.org/tag/screenrc/
Salut, excellent tutoriel
Je trouve que le binding des touches pour changer de fenêtre screen n'est pas terrible par défaut, mais j'ai trouvé sur le site suivant comment définir les touches CTRL+flèches(haut et bas) - c'est plus pratique que C-a-n...
en gros, rajouter dans le screenrc :
<<<
bindkey ^[[1;5A prev
bindkey ^[[1;5B next
>>>
http://www.parsed.org/tag/screenrc/
Argh impossible de trouver la commande pour fermer une fenetre HELP (parait-il Ctrl+a+k mais ça ne fonctionne pas)