Table des matières

Screen

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 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 Console (ou un 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.

Message affiché :
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 Ctrl+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 Ctrl+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 Ctrl+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 :

  1. un numéro de session screen, la première commence à 0,
  2. un astérisque ( * ) qui indique dans quelle session screen nous nous situons actuellement,
  3. un signe de dollar ( $ )
  4. le nom du shell utilisé.

Pour se promener entre les différentes fenêtres, il existe quatre solutions :

Pour aller à la fenêtre suivante Ctrl+A+N

pour aller à la fenêtre précédente Ctrl+A+P

Ctrl+a [0 (zéro, le chiffre) - 9]

pour naviguer entre les dix fenêtres de screen

Ctrl+A+0

Ctrl+A+1

Ctrl+A+9

Au choix. :-)

Ctrl+a ' (apostrophe)

Pour aller dans une des fenêtres par le numéro Ctrl+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 Ctrl+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 Ctrl+Alt+Maj+'

Propose la liste des différentes fenêtres, à l'identique de l'option Ctrl+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.

Ctrl+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 Ctrl+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 SUIDroot. 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 (write) et d'exé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 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

Merci à martin de nous avoir initié ce si bô tutô ! Yep ! ;-)

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !