====== Screen ======
* Objet : Commande Linux Screen
* Niveau requis :{{tag>débutant avisé}}
* Commentaires : //LA commande idéale couplée avec //[[:doc:reseau:ssh|SSH]].
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-)
* Suivi : {{tag>à-tester}}
* Création par [[user>smolski]] le 20/08/2010
* Testé par .... le ....
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=3031 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
===== Introduction =====
''Screen'' (GNU/Screen) est un //Multiplexeur// permettant d'ouvrir plusieurs terminaux (on dit des sessions) à partir d'un seul.
Cela permet de s'attacher et de se détacher d'une commande en la laissant active dans la //sessionscreen// créée.
Via [[:doc:reseau:ssh | SSH]], **screen** peut ouvrir une //session screen// sur un pc distant et de laisser active une commande en exécution tout en se déconnectant totalement du pc distant. \\
Puis, ultérieurement, de revenir sur cette commande dans la même //session screen//. \\
Idéal pour intervenir sur un pc distant (un serveur souvent) ou pour aider un utilisateur qui pourra suivre visuellement vos actions sur son pc en ouvrant la même //session screen// !
Associés, **SSH** et **screen** sont le nec plus ultra sécuritaire et efficace pour interagir entre des pc.
===== Installation =====
Rien de plus simple. Il suffit d'utiliser votre gestionnaire de paquets préférés et d'installer le paquet screen. \\
Par exemple, avec apt-get :
apt-get update && apt-get install screen
===== Utilisation =====
Une fois l'installation complétée, vous pouvez commencer à utiliser **screen**.
==== Screen - Ouvrir ====
Pour lancer **screen** dans une [[:doc:systeme:console | Console]] (ou un [[:doc:systeme:terminal | Terminal]]), il suffit de rédiger la commande :
screen
Au lancement de **screen**, un message s’affiche à l’écran indiquant la version utilisée ainsi que ce programme est sous licence GPL.
Screen version 4.02.01 (GNU) 28-Apr-14
Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan,
Sadrul Habib Chowdhury
Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael
Schroeder
Copyright (c) 1987 Oliver Laumann
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program (see the file COPYING); if not, see http://www.gnu.org/licenses/,
or contact Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02111-1301 USA.
Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to
screen-devel@gnu.org
Capabilities:
+copy +remote-detach +power-detach +multi-attach +multi-user +font +color-256
+utf8 +rxvt +builtin-telnet
[Press Space or Return to end.]
//images.debian-facile.org/file-Ra38c6907fa06d0e4da3bf4c5913dc7f0//
**Image disparue !** smolski 18/03/2012
Il ne reste plus qu’à appuyer sur la touche
Espace
ou sur la touche
Entrée
pour se retrouver dans la fenêtre de **screen**.
Il n'y pas de différence, mais vous êtes bien dans **screen** avec ses commandes spécifiques d'utilisation supplémentaires et non plus dans votre ancienne console.
==== Screen - Quitter ====
Pour sortir de **screen** rédigez :
exit
ou bien appuyez sur la combinaison des touches clavier
C-d
//Nous verrons plus loin qu'il existe d'autres manières de sortir de// **screen**.
=== Remarque ===
Vous devez taper autant de fois ces commandes que vous avez de fenêtres ouvertes. Un message apparaît finalement vous indiquant que vous avez bien quitté screen :
[screen is terminating]
===== Screen - Options =====
==== Option : Ctrl+a - gestion des fenêtres ====
== Ctrl+a c ==
Pour créer une nouvelle fenêtre, il suffit de taper la combinaison de touches
C-a-c
Il est à noter qu'en plus de créer une nouvelle fenêtre, **screen** nous emmène directement dans celle-ci. \\
== Ctrl+a w ==
**Screen** étant un gestionnaire de fenêtres, il permet donc d’ouvrir et de fermer des fenêtres. Il va même jusqu'à indiquer dans quelle fenêtre nous nous trouvons.
Tapez
C-a-w
**Résultat**
Une petite ligne s’affiche //temporairement// en bas de l'écran où l'on peut lire par exemple ceci :
0-$ bash 1*$ bash (l'étoile * à côté du 1 indique que nous sommes bien dans la deuxième fenêtre)
**Signification**
Nous avons tout simplement demandé à **screen** de nous dire où nous étions, et il nous a répondu ... à sa façon.
Chaque fenêtre de screen a :
- un numéro de session screen, la première commence à ''0'',
- un astérisque ( ''*'' ) qui indique dans quelle session screen nous nous situons actuellement,
- un signe de dollar ( ''$'' )
- le nom du shell utilisé.
Pour se promener entre les différentes fenêtres, il existe quatre solutions :
Pour aller à la fenêtre suivante
C-a-n
pour aller à la fenêtre précédente
C-a-p
== Ctrl+a [0 (zéro, le chiffre) - 9] ==
pour naviguer entre les dix fenêtres de screen
C-a-0
C-a-1
...
C-a-9
Au choix. :-)
== Ctrl+a ' (apostrophe) ==
Pour aller dans une des fenêtres par le numéro
C-a-'
Puis, tapez dans le prompt le numéro de la fenêtre que vous désirez atteindre.
== Ctrl+a " (guillemets doubles) ==
Pour aller dans une des fenêtres visuellement
C-a-"
Propose la liste des différentes fenêtres et nous pouvons y choisir au clavier, par les flèches de direction, une session où nous situer en la validant.
=== Pour un clavier qwerty ===
== Ctrl+a puis shift (flèche pour les majuscules) ' (apostrophe) ==
Pour avoir la liste des différentes fenêtres
C-A-Maj-'
Propose la liste des différentes fenêtres, à l'identique de l'option
C-a-w
==== Option : -S nommer la session screen ====
L'option -S à l'ouverture de screen permet de donner un nom explicite à la session que nous ouvrons.
Ainsi, par exemple, nous pouvons ouvrir une session screen nommée user ainsi :
screen -S user
Ceci crée une session screen nommée //user//.
Nous pouvons par exemple y lancer une tâche un peu longuette, nous déconnecter pendant cette tâche sans l'arrêter.
C-a-d
Pour y revenir, il suffira de taper :
screen -r user
Et vérifier la bonne continuité ou faire cesser la commande qui y aura été lancée précédemment en arrêtant screen par
c + d
ou :
exit
==== Option : -r ====
Pour revenir à une session que vous avez ouverte et laissé active :
screen -r
Et vous y serez de retour directement.
Si vous avez plusieurs sessions en cours, vous pourrez ensuite en consulter la liste avec
C-a-"
Comme indiqué dans les options -a
===== Ajouter une bare de status ( hardstatus ) =====
Une barre de status qui affiche les fenêtres totalement personnalisable;
Ajouter ceci à vote fichier de configuration screen perso : **.screenrc** :
hardstatus alwayslastline
hardstatus string '%{= kG}%{C}Screen: %{c}%{= kG}[%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{C} %d-%m %{W}%c %{g}]'
===== Multiutilisateur ! Partager ta console avec une autre personne ! =====
Screen permet de partager ton terminal avec un autre utilisateur ( ayant un autre compte dans ton ordi ).
Dans cet exemple, **tu es l'utilisateur nommé %%"foo"%%**; tu crées une session screen **multiuser** puis tu autorises **ton ami nommé %%"bar"%%** à t'y rejoindre. Ici, on autorisera à **bar** uniquement la lecture; il ne pourra pas écrire ou exécuter des commandes dans ton terminal. Il pourra alors observer ton terminal à distance pour te conseiller, en te laissant le contrôle par sécurité .
L'utilisation du mode "multiuser" nécessite de modifier les droits de screen en [[doc:systeme:chmod|SUID]]root. On l’enlèvera en fin d'utilisation pour raisons de sécurité
chmod u+s /usr/bin/screen #active le droit SUID du programme screen
chmod 755 /var/run/screen #autorise, pour l'utilisateur root uniquement, l'écriture sur le dossier contenant les sessions screen
=== création de la session multiuser ===
Dans un terminal avec ton compte **foo** :
screen -S UnScreenPourDeux #Crée une session screen nommée UnScreenPourDeux
Activation du mode multiuser
CTRl a:''multiuser on''
Ajoute ton ami **bar** à Liste de Contrôle d'Accès (ACL)
CTRL a:''acladd bar'' ( ou bar le login de ton ami à inviter)
Retire (**-**)les droits d'écriture (**w**rite) et d'e**x**écution à **bar** pour **toutes les fenêtres** screen ( symbolisées par **#**) et toutes les commandes (**?** représente toute les commandes) pour ta sécurité.
Vérifiez bien les commandes suivantes,car le copier / coller modifie des caractères !
CTRL a:''%%aclchg bar -wx "#?"%%''
Ajoute à ton ami **bar** les droits d'exécution (**+x**) des commandes colon //( entrer en mode commande de screen, nécessaire pour les suivantes )//, wall //( envoyer un message aux autres utilisateurs de screen )//, detach //( se détacher de la session, sinon ton ami sera bloqué pour toujours :p )//
CTRL a:''%%aclchg bar +x "colon,wall,detach"%%''
=== ton ami bar rejoint la session : ===
Au tour de ton ami **bar** de se connecte à distance à ton ordinateur par [[doc:reseau:ssh|SSH]] et rejoint ta session existante ( **-x** ), en précisant ton login et le nom de ta session :
screen -x foo/UnScreenPourDeux
Il peut alors voir tout ce que tu fais dans ton terminal pour te conseiller et t'envoyer des messages avec CTRL a:''%%wall "coucou ;)"%%''
On pense à retirer le SUID root de screen et remettre les permissions du dossier pour plus de sécurité après utilisation du mode multiuser
chmod u-s /usr/bin/screen
chmod 775 /var/run/screen
Doc multiuser de screen : [[https://www.gnu.org/software/screen/manual/html_node/Multiuser-Session.html#Multiuser-Session]]
===== Liens et remerciements =====
* http://doc.ubuntu-fr.org/screen
* %%http://www.daviddallet.com/weblog/posts/2008/10/27/screen-ssh-et-autres-joies/%% - Lien Obsolète
* http://ftp.traduc.org/doc-vf/gazette-linux/html/2008/147/lg147-A.html#commandes
//Merci à //**martin**// de nous avoir initié ce si bô tutô !// Yep ! ;-)