Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| screen [Le 01/05/2010, 10:54] Id2ndR byobu | screen [Le 28/06/2025, 10:13] (Version actuelle) 89.86.155.3 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag>Dapper Gutsy Jaunty administration système console BROUILLON}} | + | {{tag>administration système console terminal}} | 
| + | ---- | ||
| + | |||
| + | {{ gnu_screen.png?190nolink| Gnu Screen}} | ||
| + | ====== Screen, le multiplexeur de terminaux ====== | ||
| - | ====== Screen le multiplexeur de terminaux ====== | + | **Screen** ([[wpfr>GNU Screen]]) est un « multiplexeur de terminaux » permettant d'ouvrir plusieurs terminaux dans une même console, de passer de l'un à l'autre et de les récupérer plus tard. | 
| - | **Screen** (Gnu/Screen) est un utilitaire permettant d'ouvrir plusieurs terminaux dans une même console, de passer de l'un à l'autre et de les récupérer plus tard. Il offre d'autres services très utiles comme : | + | Il offre d'autres services très utiles comme : | 
| - | * La possibilité d'attacher et de détacher une session, pratique pour reprendre la main sur un [[:irssi]]. | + | * La possibilité d'attacher et de détacher une session, pratique par exemple pour reprendre la main sur un client IRC tel que [[:Irssi]] ou [[:Weechat]]. | 
| * La possibilité de partager un terminal avec un autre utilisateur, idéal pour aider un utilisateur distant. | * La possibilité de partager un terminal avec un autre utilisateur, idéal pour aider un utilisateur distant. | ||
| - | <note tip>[[byobu]] est une version améliorée de screen disponible par défaut dans Ubuntu 10.04. Il peut s'utiliser avec les mêmes commandes que screen mais aussi avec des raccourcis F2 à F9 qui sont plus faciles à utiliser (voir l'aide disponible dans le logiciel par le menu F9.</note> | + | * La possibilité de laisser tourner une commande ssh même en cas de coupure de connexion, idéal pour des opérations d'administration via smartphone quand le réseau mobile est faible ou instable. | 
| ===== Pré-requis ===== | ===== Pré-requis ===== | ||
| Ligne 12: | Ligne 16: | ||
| * Disposer des [[:sudo|droits d'administration]] ; | * Disposer des [[:sudo|droits d'administration]] ; | ||
| * Disposer d'une connexion à Internet configurée et activée ; | * Disposer d'une connexion à Internet configurée et activée ; | ||
| - | * Avoir activé l'accès aux [[:depots#universe_et_multiverse|dépôts Universe et Multiverse]] ; | + | * Avoir activé l'accès aux [[:depots#universe_et_multiverse|dépôts Universe et Multiverse]] | 
| ===== Installation ===== | ===== Installation ===== | ||
| - | [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **screen**. | + | S'il ne l'est pas déjà, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>screen]]** | 
| - | [[apt://screen|screen]] | + | ===== Exemple d'utilisation de Screen ===== | 
| - | <note tip>Screen est disponible par défaut depuis Jaunty Jackalope, il bénéficie en plus de trois profils aux choix relativement intéressants pour ceux qui n'auraient pas déjà fait le leur. </note> | + | Nous allons lancer dans le //screen// une application en ligne de commande, puis « nous détacher » de la session du //screen// en laissant l'application tourner dedans. Ensuite, à partir du même poste ou d'un poste distant (avec [[:ssh]] par exemple) nous pourrons « nous rattacher » à la session du //screen// et récupérer exactement la même chose que lorsque nous nous étions détaché. | 
| - | ===== Exemple d'utilisation de screen ===== | + | * Créer un nouveau //screen// en nommant la session : | 
| + | <code>screen -S nom_de_la_session</code> | ||
| - | Nous allons lancer dans le //screen// une application en ligne de commande, puis 'nous détacher' de la session du //screen// en laissant l'application  tourner dedans. Ensuite, à partir du même poste ou d'un poste distant (avec [[:ssh]] par exemple) nous pourrons 'nous rattacher' à la session du //screen// et récupérer exactement la même chose que lorsque nous nous étions détaché. | + | <code>screen -S nom_de_la_session -dm sleep 10</code> | 
| - | * Lancer screen en nommant la session | + | <code>screen -XS nom_de_la_session quit</code> | 
| - | + | ||
| - | <code>screen -S nom_de_la_session</code> | + | |
| - | Un message annoncant la version utilisée et indiquant que ce programme est publiée sous licence GPL s'affiche à l'écran. Il ne reste plus qu'à presser la touche [ESPACE]. | + | Un message annonçant la version utilisée et indiquant que ce programme est publié sous licence GPL s'affiche à l'écran. Il ne reste plus qu'à presser la touche [ESPACE]. | 
| - | La nouvelle session du //shell// s'affiche et attend qu'on tape une commande. | + | La nouvelle session du //shell// s'affiche et attend qu'on saisisse une commande, par exemple : <code>echo test</code> | 
| - | Par exemple | + | |
| - | <code>echo test</code> | + | |
| - | Le //shell// se présente alors comme ça | + | Le //shell// se présente alors comme ça : | 
| <code> | <code> | ||
| - | foo@bar $ echo test | + | foo@bar $ echo test | 
| - | test | + | test | 
| - | foo@bar $ | + | foo@bar $ | 
| </code> | </code> | ||
| - | * Pour se détacher de la session du screen : | + | * Pour se détacher de la session du //screen// : | 
| - | Taper la suite de touche clavier suivante : [CTRL]+[a] suivi de [d] | + | Saisir la suite de touche clavier suivante : [CTRL]+[a] suivi de [d] | 
| OU fermer le terminal et/ou ouvrir un autre terminal | OU fermer le terminal et/ou ouvrir un autre terminal | ||
| + | OU tapez exit | ||
| - | * Pour se rattacher à la session du screen | + | * Pour se rattacher à la session du //screen// : | 
| <code>screen -r nom_de_la_session</code> | <code>screen -r nom_de_la_session</code> | ||
| <note tip> | <note tip> | ||
| - | Le rattachement à la session du screen peut très bien se faire à distance. Nous accédons alors à notre machine via un accès [[:ssh]] par exemple. | + | Le rattachement à la session du //screen// peut très bien se faire à distance. Nous accédons alors à notre machine via un accès [[:ssh]] par exemple. | 
| </note> | </note> | ||
| ===== Utilisation ===== | ===== Utilisation ===== | ||
| - | ==== Lancement de screen ==== | + | ==== Lancement de Screen ==== | 
| - | * Créer un nouveau //screen// : <code>screen -S toto</code> | + | * Créer un nouveau //screen// en nommant la session : <code>screen -S toto</code> | 
| Une fois passé l'écran de version, nous avons devant nous un terminal prêt à servir, nous pouvons l'utiliser comme d'habitude (en dehors des applications en mode graphique). | Une fois passé l'écran de version, nous avons devant nous un terminal prêt à servir, nous pouvons l'utiliser comme d'habitude (en dehors des applications en mode graphique). | ||
| Ligne 68: | Ligne 70: | ||
| * Rattacher un //screen// existant : <code>screen -r</code> | * Rattacher un //screen// existant : <code>screen -r</code> | ||
| - | <note tip> | ||
| - | Si plusieurs //screens// sont en cours, voilà ce que screen -r va afficher: | ||
| + | Si plusieurs //screen// sont en cours d'exécution, voilà ce que <code>screen -r</code> va afficher : | ||
| <code> | <code> | ||
| There are several suitable screens on: | There are several suitable screens on: | ||
| 13379.toto1 (Detached)  | 13379.toto1 (Detached)  | ||
| 13308.toto2 (Detached)  | 13308.toto2 (Detached)  | ||
| - | 13356.toto3 (Dead ???) | + | 13334.toto3 (Attached) | 
| + | 13356.toto4 (Dead ???) | ||
| Type "screen [-d] -r [pid.]tty.host" to resume one of them. | Type "screen [-d] -r [pid.]tty.host" to resume one of them. | ||
| </code> | </code> | ||
| - | Nous avons donc le choix entre plusieurs //screens// que l'on va préciser simplement par | + | Nous avons donc le choix entre plusieurs //screen// que l'on va préciser simplement par | 
| <code>screen -r 13379</code> | <code>screen -r 13379</code> | ||
| ou | ou | ||
| <code>screen -r toto1</code> | <code>screen -r toto1</code> | ||
| - | </note> | ||
| - | <note tip> | + | Si le //screen// que nous essayons de rattacher n'a pas été détaché (toto3 dans l'exemple ci-dessus), il est possible de forcer son détachement de la console précédente : | 
| - | Si un screen est mort (toto3 dans l'exemple ci-dessus), il est possible de le supprimer en tapant la commande  | + | <code> | 
| + | screen -d toto3 | ||
| + | </code> | ||
| + | Pour avoir plusieurs attachements simultanés (option "-x"), voir la section [[#Partager un terminal]]. | ||
| + | |||
| + | Si un //screen// est mort (toto4 dans l'exemple ci-dessus), il est possible de le supprimer en saisissant la commande | ||
| <code> | <code> | ||
| screen -wipe | screen -wipe | ||
| </code> | </code> | ||
| - | </note> | ||
| - | |||
| - | <note tip> | ||
| - | Si le screen que nous essayons de rattacher n'a pas été détaché, il est possible de forcer son détachement de la console précédente avec l'option "-d", ou d'avoir plusieurs attachements simultanés (option "-x", voir "Partager un terminal"). | ||
| - | </note> | ||
| ==== Créer un nouveau terminal ==== | ==== Créer un nouveau terminal ==== | ||
| - | Taper la suite de touche clavier suivante : [CTRL]+[a] suivi de [c] | + | Saisir la suite de touche clavier suivante : [CTRL]+[a] suivi de [c] | 
| - | Si vous avez auparavant exécuté une commande le contenu du terminal devrait visiblement changer. | + | Si vous avez auparavant exécuté une commande, le contenu du terminal devrait visiblement changer : vous êtes dans le nouveau terminal dont vous venez de demander la création. | 
| ==== Naviguer entre les terminaux du screen ==== | ==== Naviguer entre les terminaux du screen ==== | ||
| - | * [CTRL]+[a] suivi de [n]: pour next, aller au terminal suivant. | + | * [CTRL]+[a] suivi de [n]: pour «**n**ext», aller au terminal suivant. | 
| - | * [CTRL]+[a] suivi de [p]: pour previous, aller au terminal précédent. | + | * [CTRL]+[a] suivi de [p]: pour «**p**revious», aller au terminal précédent. | 
| - | * [CTRL]+[a] suivi de [0]..[9]: aller au terminal n. | + | * [CTRL]+[a] suivi de [0]..[9]: aller au terminal //n//. | 
| - | * [CTRL]+[a] suivi de [']: saisir dans le prompt le numéro du terminal. | + | * [CTRL]+[a] suivi de [']: saisir dans le prompt le numéro du terminal. | 
| - | * [CTRL]+[a] suivi de ["]: propose la liste des différents terminaux, avec la possibilité d'en choisir un. | + | * [CTRL]+[a] suivi de ["]: lister des différents terminaux, avec la possibilité d'en choisir un. | 
| - | * [CTRL]+[a] suivi de [w]: Lister les consoles actuelles avec leur nom. | + | * [CTRL]+[a] suivi de [w]: lister les terminaux actuels avec leur nom. | 
| - | * [CTRL]+[a] suivi de [a]: retourne au terminale d'où l'on vient. | + | * [CTRL]+[a] suivi de [a]: retourner au terminal d'où l'on vient. | 
| - | * [CTRL]+[a] suivi de [A]: pour nommer les terminaux et s'y rendre par la suite plus aisément. | + | * [CTRL]+[a] suivi de [A]: nommer les terminaux et s'y rendre par la suite plus aisément. | 
| - | + | ||
| - | + | ||
| - | ==== Fermer un terminal ==== | + | |
| + | ==== « Tuer » un screen ==== | ||
| + | Lorsque on est logué sur un screen, pour le « tuer » (kill) : | ||
| <code>exit</code> | <code>exit</code> | ||
| - | * [CTRL]+[D] : fermer une console //screen//. Lorsqu’il n’y a plus qu’une seule console, ça quitte //screen//. | + | * [CTRL]+[D] : équivalent à exit. Lorsqu’il n’y a plus qu’une seule console quitte //screen//. | 
| + | * [CTRL]+[A] puis :quit le ferme également. Lorsqu'il n'y a plus qu'une seule console quitte //screen//. | ||
| ==== Détacher screen ==== | ==== Détacher screen ==== | ||
| - | * [CTRL]+[a] suivi de [d]: pour détacher //screen// | + | * [CTRL]+[a] suivi de [d]: pour détacher //screen// | 
| - | * [CTRL]+[a] suivi de [DD]: pour détacher //screen// et fermer la session | + | * [CTRL]+[a] suivi de [DD]: pour détacher //screen// et fermer la session | 
| ==== Partager un terminal ==== | ==== Partager un terminal ==== | ||
| - | Imaginez que vous vouliez que quelqu'un fasse quelque chose à distance sur votre machine, mais que vous souhaiteriez voir ce qu'il fait, alors **Screen** va vous aider :) | + | Imaginez que vous vouliez que quelqu'un fasse quelque chose à distance sur votre machine, mais que vous souhaiteriez voir ce qu'il fait, alors //screen// va vous aider :) | 
| - | * Lancer screen sur votre machine | + | * Créer un nouveau //screen// en nommant la session : | 
| <code>screen -S toto</code> | <code>screen -S toto</code> | ||
| - | Votre ami se connecte sur votre machine via [[:ssh]] par exemple et tape la commande suivante | + | Votre ami se connecte sur votre machine avec le même compte, via [[:ssh]] par exemple et saisit la commande suivante : | 
| <code>screen -x toto</code> | <code>screen -x toto</code> | ||
| - | À partir de là, tout ce qui est tapé dans un des 2 terminaux (le vôtre ou le sien) apparaît sur les deux. Si il n'y a qu'un seul screen de lancé, il n'est pas nécessaire de préciser son nom lors de la connexion. | + | À partir de là, tout ce qui est saisi dans un des 2 terminaux (le vôtre ou le sien) apparaît sur les deux. Si il n'y a qu'un seul //screen// de lancé, il n'est pas nécessaire de préciser son nom lors de la connexion. | 
| ===== Raccourcis supplémentaires ===== | ===== Raccourcis supplémentaires ===== | ||
| Séparation de la console : | Séparation de la console : | ||
| - | * [CTRL]+[a] suivi de [S]: Sépare la console courante en deux consoles (la console courante devient celle du dessus). | + | |
| - | * [CTRL]+[a] suivi de [TAB]: Une fois la console séparée, ce raccourci permet de se positionner sur la console suivante. | + | * [CTRL]+[a] suivi de [AltGr]+[6] (|): Sépare la console courante en deux consoles verticalement (la console courante devient celle de gauche). | 
| - | * [CTRL]+[a] suivi de [Q]: Supprime toutes les consoles, sauf la console courante. | + | * [CTRL]+[a] suivi de [S]: Sépare la console courante en deux consoles horizontalement (la console courante devient celle du dessus). | 
| - | * [CTRL]+[a] suivi de [K]: Supprime la console courante. | + | * [CTRL]+[a] suivi de [TAB]: Une fois la console séparée, ce raccourci permet de se positionner sur la console suivante. | 
| - | <note tip>A noter que la suppression d'une ou plusieurs régions ne supprime pas les console qui s'y trouvaient. | + | * [CTRL]+[a] suivi de [Q]: Supprime toutes les régions, sauf la région courante. | 
| + | * [CTRL]+[a] suivi de [K]: Tue la console courante ainsi que les processus qui s'y trouvent. | ||
| + | * [CTRL]+[a] suivi de [X]: Ferme la région courante. | ||
| + | |||
| + | <note tip> | ||
| + | :!: Pour la seconde console, il faut créer un nouveau screen par [CTRL]+[a] suivi de [c] :!: | ||
| + | |||
| + | A noter que la suppression d'une ou plusieurs régions ne supprime pas les consoles qui s'y trouvaient. | ||
| </note> | </note> | ||
| Divers : | Divers : | ||
| - | * [CTRL]+[a] suivi de [F]: Redimensionnement de la fenêtre à la taille de son terminal. Utile lorsque l'on est plusieurs sur une même console et que l'on enrage de ne pas avoir un écran 16/9e. | + | * [CTRL]+[a] suivi de [F]: Redimensionnement de la fenêtre à la taille de son terminal. Utile lorsque l'on est plusieurs sur une même console et que l'on enrage de ne pas avoir un écran 16/9e. | 
| - | * [CTRL]+[a] suivi de [H]: Permet de logguer tout ce qui passe à l'écran dans un fichier $HOME/screenlog.XX (XX : no de la console) | + | * [CTRL]+[a] suivi de [H]: Permet de logguer tout ce qui passe à l'écran dans un fichier $HOME/screenlog.XX (XX : no de la console) | 
| - | * [CTRL]+[a] suivi de [?]: Affiche une petite aide | + | * [CTRL]+[a] suivi de [?]: Affiche une petite aide | 
| + | * [CTRL]+[a] suivi de [x]: Verrouille la session | ||
| + | * [CTRL]+[a] suivi de [a]: Envoie le caractère de commande (CTRL a) à la fenêtre. | ||
| Déplacement et copie : | Déplacement et copie : | ||
| - | * [CTRL]+[a] suivi de [ESC]: Entre en mode copie/scrollback. On peut se déplacer dans le screen avec les flèches directionnelles. | + | * [CTRL]+[a] suivi de [ESC]: Entre en mode copie/scrollback. On peut se déplacer dans le //screen// avec les flèches directionnelles. | 
| - | * ENTER : Permet de commencer une sélection. Appuyer une nouvelle fois sur ENTER pour terminer la sélection. | + | * ENTER : Permet de commencer une sélection. Appuyer une nouvelle fois sur ENTER pour terminer la sélection. | 
| - | * [CTRL]+[a] suivi de []]: Colle le contenu sélectionné précédemment.  | + | * [CTRL]+[a] suivi de []]: Colle le contenu sélectionné précédemment. | 
| ===== Personnaliser son screen ===== | ===== Personnaliser son screen ===== | ||
| - | Il est possible d'avoir un fichier de configuration spécifique. Un exemple de "screenrc" est disponible dans /etc/screenrc. Il vous suffit de faire : | + | Il est possible pour chaque utilisateur du système de personnaliser son //screen// grâce à un fichier de configuration spécifique : «~/.screenrc». Un exemple d'un tel fichier est disponible dans /etc/screenrc. Il vous suffit de faire : | 
| - | <code> cp /etc/screenrc ~/.screenrc</code> | + | <code>cp /etc/screenrc ~/.screenrc</code> | 
| - | Et vous pourrez ensuite le personnaliser comme bon vous semble. | + | |
| - | <note tip>Il est possible de changer le caractère d'échappement (CTRL+a). De cette manière, vous avez un caractère d'échappement sur votre machine et un différent sur une machine distante. Et grâce à cela, vous pouvez faire du screen dans un screen. </note> | + | |
| - | ===== Liens ===== | + | Et vous pourrez ensuite le personnaliser comme bon vous semble. | 
| + | |||
| + | <note tip>Il est possible de changer le caractère d'échappement (CTRL+a). De cette manière, vous avez un caractère d'échappement sur votre machine et un différent sur une machine distante. Et grâce à cela, vous pouvez faire du //screen// dans un //screen//. | ||
| + | [[https://forum.ubuntu-fr.org/viewtopic.php?id=846021|https://forum.ubuntu-fr.org/viewtopic.php?id=846021]] | ||
| + | </note> | ||
| + | |||
| + | |||
| + | ===== Voir aussi ===== | ||
| * Les pages du manuel **man screen** et **info screen** | * Les pages du manuel **man screen** et **info screen** | ||
| - | * La page du projet [[http://www.gnu.org/software/screen]] (en) | + | * [[http://www.gnu.org/software/screen|La page du projet]] (en) | 
| - | * [[http://www.ddmdllt.org/weblog/posts/2008/10/27/screen-ssh-et-autres-joies/|Un article sur screen]] parut sur le planet de l'APRIL | + | * [[http://www.ddmdllt.org/weblog/posts/2008/10/27/screen-ssh-et-autres-joies/|Un article sur screen]] paru sur le Planet de l'APRIL | 
| * [[http://postit.petitchevalroux.net/linux/screen-tutoriel-video-linux.191.html|Tutoriel video de screen]] | * [[http://postit.petitchevalroux.net/linux/screen-tutoriel-video-linux.191.html|Tutoriel video de screen]] | ||
| + | * [[https://forum.ubuntu-fr.org/viewtopic.php?id=390985|Partagez vos '.screenrc' (sur Ubuntu-fr)]] | ||
| + | * [[http://durak.org/sean/pubs/software/screen/screen.html#Top|Manuel de screen]], [[http://durak.org/sean/pubs/software/screen/screen_27.html|partie sur le multiuser]] (en) | ||
| + | * [[http://unstableme.blogspot.fr/2010/01/prevent-exit-of-shell-with-ctrl-d.html|Ignore crtl+d]] (en) | ||
| + | * [[Tmux]] un autre multiplexeur. | ||
| + | * [[:Byobu]] une version améliorée de Screen. | ||
| + | |||
| ---- | ---- | ||
| - | //Contributeurs : Termitor, Benoît « Beny » Pineau, [[utilisateurs:loack]], [[utilisateurs:petitchevalroux]], [[utilisateurs:gardouille]], boubou_cs//. | + | //Contributeurs : Termitor, Benoît « Beny » Pineau, [[utilisateurs:loack]], [[utilisateurs:petitchevalroux]], boubou_cs, [[utilisateurs:mydjey]]// |