Quand un Petit Scarabée travaille sous GNU/Linux dans un bel environnement graphique, il pense qu'il voit "sa machine", alors qu'il ne voit qu'un terminal de sa machine (le plus souvent, le terminal graphique appelé "X" dans lequel il y a de bien jolies fenêtres), mais la machine met par défaut 6 terminaux texte (virtuels) à sa disposition, en plus de ce terminal graphique.
Il est normalement possible de passer de l'un à l'autre par une séquence de touches, et éventuellement d'utiliser un terminal "texte" pour "tuer" un processus récalcitrant dans le terminal graphique, ou carrément pour tuer le serveur "X", ce qui termine brutalement la session graphique et renvoie de nouveau à l'écran d'ouverture de session.[1]

Sur une machine Linux, on peut rajouter des tétrapotées de terminaux : Si par exemple vous avez un vieux Minitel 1b ou plus récent moins vioque qui traîne dans un grenier, une prise série libre sur votre PC, et un câble de connexion adéquat, vous pouvez faire de votre vieux minitel un parfait terminal ASCII texte.[2] Amusant, non ?

Il faut penser que contrairement à Wintruc, Un*x a été conçu au départ pour des machines ayant parfois des centaines de terminaux, et, oui, vous pouvez connecter des centaines de terminaux à votre PC sous GNU/Linux si ça vous pète, à condition d'avoir le matériel adéquat. On comprend qu'avec un système conçu pour ça, le fait qu'un terminal soit planté n'est pas forcément la fin du monde, ni signe d'un plantage du système.[3]

Simplement, si vous n'avez qu'un terminal et ne savez pas que vous pouvez en utiliser d'autres - fussent-ils virtuels - vous êtes dans le caca, incapable de parler avec une machine dont le terminal vous boude, mais qui n'est pas forcément plantée pour autant.

Ensuite, pour faire joli, ce qui ne sert à rien mais fait plaisir au béotien, les distributions GNU/Linux récentes - dont Ubuntu - ont remplacé tous les sympathiques messages cryptiques des démons au lancement et à l'arrêt du système par une vilaine image avec un logo et une "barre de progression" absconse que l'on appelle un "splash screen".[4] Si jamais le système est "mécontent" de quelque chose, parfois le splash screen fera place au message d'erreur... et parfois pas, parce que ce gadget est un rien capricieux. Et on se retrouvera avec un système que l'on croira "planté" alors qu'il est simplement en train de râler et d'expliquer ce qui ne va pas... sur un autre terminal que le splash screen nous empêche de voir !

Pour voir ce qui se passe dans un tel cas, il faut et il suffit de changer de terminal, n'est-ce pas simple ?

Maintenant que nous avons évoqué la quantité de terminaux virtuels dont nous disposons, voyons voir comment nous pouvons passer d'un terminal à un autre.

Première année de sorcellerie : Le clavier est-il vraiment bloqué ?

Un bon test simple permettant de savoir si le clavier est véritablement bloqué ou non (auquel cas il devrait être possible de faire quelque chose) est d'appuyer sur la touche de verrouillage numérique ou majuscule. Si le voyant correspondant s'allume et s'éteint, c'est bon signe. S'il ne réagit plus, c'est moins bon signe, mais la magie noire (Magic SysRq) évoquée bien plus bas pourra peut-être tout de même le ressusciter...

Deuxième année de sorcellerie : Changement de terminal

Les terminaux virtuels du système sont numérotés de 1 à "n". Une installation GNU/Linux standard a le plus souvent :

  • 6 terminaux "texte" numérotés de 1 à 6
  • 1 terminal graphique "X11" numéroté 7
  • Si on a ouvert simultanément des sessions graphiques pour plusieurs utilisateurs différents, on peut se retrouver avec des terminaux graphiques supplémentaires : 8, 9, etc... Un par utilisateur ayant une session graphique ouverte sur la machine
  • Parfois un terminal supplémentaire sur lequel on ne peut pas "se logguer" mais sur lequel défilent les évènements des journaux du système (terminal 12 sur une Mandriva, terminal 8 pour certains trucs [je crois] sur une Ubuntu).

Pour passer d'un terminal à un autre, on utilisera les touches de fonction [F1] à [F12] selon le terminal que l'on désire atteindre, en combinaison soit avec [Alt], soit avec [Ctrl]-[Alt] :

  • [Alt]-[F1-12] si l'on est actuellement dans un terminal texte (ou sur un splash screen)
  • [Ctrl]-[Alt]-[F1-12] si l'on est actuellement dans un terminal graphique

Par exemple :

  • Si l'on est dans le terminal graphique et qu'on veut basculer dans le premier terminal texte, on fera : [Ctrl]-[Alt]-[F1]
  • Si d'un terminal texte on veut passer au deuxième terminal texte, on fera : [Alt]-[F2]
  • Si d'un terminal texte on veut revenir au terminal graphique, on fera : [Alt]-[F7]

Le passage du mode graphique au mode texte nécessite une reconfiguration (automatique) "à la volée" de la carte graphique (chose que l'on ne fait jamais sous Wintruc), et c'est une des choses qui peuvent poser des problèmes aux pilotes de carte graphique (fonction de celle-ci). Selon le type de carte, il arrive parfois que l'on obtienne à l'arrivée un écran "brouillé" ou "tout rouge" ou "tout vert". Dans un tel cas, pas de panique ! Le fait de repasser d'un terminal texte à un autre, ou de revenir en mode graphique permet le plus souvent de faire retomber la carte graphique sur ses pattes.

=> Si un système "se plante" pendant les phases de démarrage ou d'arrêt, sur le splash screen, l'exploration du contenu des terminaux texte permettra de noter les derniers messages affichés, et peut-être de pouvoir se faire une idée de la cause du problème. On ne pourra probablement pas "se logguer" (si les getty sont déjà arrêtés ou pas encore démarrés), et donc pas faire grand-chose, mais on aura au moins pu noter ce qui s'est produit.

Troisième année de sorcellerie : Tuer X11

  • Si l'on est dans un terminal texte, on peut tuer une session graphique récalcitrante (avec tous les programmes qui tournent dedans), soit en tuant le serveur "X" (avec la commande "kill"), soit, si l'on a utilisé le gestionnaire de sessions graphiques gdm (défaut sur Ubuntu) ou kdm (défaut sur Kubuntu), en arrêtant ce processus par la commande :
sudo invoke-rc.d gdm stop

ou

sudo invoke-rc.d kdm stop

On se doute que pour les relancer, on utilisera respectivement :

sudo invoke-rc.d gdm start

ou

sudo invoke-rc.d kdm start

...Ce qui nous ramènera à l'écran d'ouverture de session graphique.[5]

  • Si l'on est dans une session graphique, il existe un moyen radical et sauvage de tuer instantanément le serveur X et tous les programmes qui tournent dedans : La combinaison de touches [Ctrl]-[Alt]-[Backspace][6] et boum ! Le serveur X est tué, puis relancé aussitôt si nous utilisons le gestionnaire de session graphique gdm ou kdm.

=> Les problèmes survenant avec le serveur "X" se diagnostiquent souvent par l'examen du fichier de log /var/log/Xorg.0.log .

Quatrième année de sorcellerie : Rebooter le système

On évitera dans la mesure du possible de rebooter un système Linux sauvagement, par l'utilisation du bouton [Reset] ou [Power].[7]

Et on évitera aussi de rebooter sans raison : Mieux vaut toujours essayer de comprendre ce qui coince plutôt que de rebooter bêtement. Tant que l'on a encore un peu de contrôle sur le système, un reboot est très rarement véritablement utile - sauf si l'on est perdu dans les arcanes d'un système qu'on ne maîtrise pas : il faut alors rebooter l'utilisateur ;-)

Il est possible de rebooter proprement le système de mille façons :

  • Dans le gestionnaire de sessions graphiques, on a une option de menu pour cela ;
  • Quand on ferme une session KDE ou Gnome, on a une option pour rebooter (ou éteindre) le système

Dans un terminal texte :

  • Commandes utilisables pour arrêter proprement le système (chacune de ces commandes le fera) :
    • init 0
    • halt
    • shutdown -h now
  • Commandes utilisables pour rebooter proprement le système (chacune de ces commandes le fera) :
    • init 6
    • reboot
    • shutdown -r now

Personnellement, j'ai l'habitude de toujours invoquer le changement de runlevel par la commande init.[8]

Pour rebooter proprement, dans une console texte, il y a encore plus simple : la combinaison de touches [Ctrl]-[Alt]-[Suppr] : Elle provoquera un reboot bien propre.

Depuis une session graphique, il se peut que [Ctrl]-[Alt]-[Suppr] soit intercepté (selon le paramétrage du serveur X), surtout depuis que les versions récentes de Winchoze ont pris la mauvaise habitude d'utiliser cette séquence non pas pour rebooter, mais pour ouvrir ou fermer une session. Pour éviter les accidents de Windowziens, les interfaces graphiques de GNU/Linux se sont mises à faire de même, aussi l'emploi de [Ctrl]-[Alt]-[Suppr] dans une session graphique a des chances de faire apparaître l'écran de fermeture de session (tout comme un bref appui sur le bouton [Power] d'ailleurs),[9] et cela risque de ne pas fonctionner du tout si la session graphique est "bloquée".

Cinquième année de sorcellerie : SSH

Il peut arriver que le clavier/écran du système soit apparemment totalement mort, et qu'aucune espèce de commande ne réponde, même pas pour changer de terminal. Dans ce cas, on n'est toujours pas certain que le système soit planté, mais seulement que le périphérique d'affichage est bloqué.

Si l'on dispose d'une autre machine et d'une connexion réseau, et si l'on a configuré le démon SSH pour permettre l'accès depuis le réseau, on pourra bien souvent reprendre le contrôle par ce biais, et, s'il est impossible de réactiver le clavier/écran,[10] on pourra toujours arrêter ou rebooter proprement le système.

La configuration du service SSH est au-delà de l'objet de ce billet, mais à titre d'avertissement : Si vous activez le démon SSH sur une machine connectée à Internet sans routeur "NAT" ni firewall devant, et si vous utilisez un mot de passe trop simple, il sera facile à un vilain pas beau de se connecter à votre machine[11]. N'ouvrez SSH au vaste monde que :

  • Si vous utilisez un mot de passe extrêmement complexe
  • -ou- Si vous interdisez la connexion SSH par login / mot de passe, mais l'autorisez seulement avec emploi d'une authentification par clé publique, ce que je fais personnellement. Nous sommes encore une fois ici en dehors du cadre de ce billet, même en quatrième année de sorcellerie ;-)

Magie noire de sixième année : Magic SysRq

Même si plus rien ne répond, si vous ne pouvez absolument pas changer de terminal et si les voyant de votre clavier ont un encéphalogramme aussi plat que celui de Mâ Belmeramesh, tout espoir n'est pas perdu !

Les Magic SysRq keys peuvent peut-être encore vous sauver !

Une Magic SysRq est une combinaison de 3 touches pressées simultanément en commençant par [Alt]-[Syst] [12] et une lettre parmi les plus utiles que je décris ci-dessous. Une telle combinaison est interceptée directement par le noyau, qui y réagira même si le terminal virtuel sur lequel on se trouve est mortibus.

=> Si on est dans un terminal texte, l'utilisation de ces touches "répondra" le plus souvent quelque chose (sinon, c'est qu'on est encore plus mort que mort). Par contre, dans une session X, l'utilisation de ces touches ne produit aucune réponse visible, mais leur action est tout de même effectuée - en silence.

Dans l'ordre de grande utilité, et la seule qui ne soit pas vraiment "destructrice", la combinaison:

  • [Alt]-[Syst]-R : Permet de reprendre le contrôle du clavier pour pouvoir changer de terminal ensuite. S'utilise essentiellement quand on est dans une session graphique bloquée et qu'on ne parvient pas à passer dans un terminal texte - parce que le serveur "X" ou une application s'est attribué le contrôle exclusif du clavier. Dans ce cas, la combinaison magique [Alt]-[Syst]-R suivie de [Alt]-[Ctrl]-[F1] permet bien souvent de sortir de ce mauvais pas, et d'atteindre la console texte espérée.

Pour tuer un serveur X11 parti en vrille, si la commande standard [Ctrl]-[Alt]-[Backspace] ne fonctionne pas, on peut demander au noyau de se montrer brutal avec :

  • [Alt]-[Syst]-K : Cette Magic SysRq a pour effet de tuer tous les processus actifs sur le terminal courant. Initialement prévue pour entrer des clés en mode sécurisé (tuer tout keylogger éventuellement présent sur une console avant de taper des choses confidentielles), elle est peu usitée dans ce but, mais peut faire un tueur de X rapide et efficace, puisqu'un serveur X n'est jamais qu'un processus tournant sur le terminal courant...

Les combinaisons suivantes sont généralement "irréversibles" et conduisent à l'arrêt du système ou à son redémarrage. Elles servent de "dernier recours" pour pouvoir rebooter le système "le moins salement possible". On les exécute généralement les unes après les autres après avoir laissé à chaque fois au système quelques secondes pour excuter la commande.

Un truc mnémotechnique pour y penser dans l'ordre est de se rappeler du mot E - I - S - U - B.

  • [Alt]-[Syst]-E : Demande gentiment à tous les processus de bien vouloir mourir.
  • [Alt]-[Syst]-I : Tue sauvagement tous les processus qui n'ont pas obtempéré à la commande précédente.
  • [Alt]-[Syst]-S : Synchronise tous les disques durs (vide les caches) pour éviter la corruption de données.
  • [Alt]-[Syst]-U : Démonte toutes les partitions et points de montage, et les remonte aussitôt en "lecture seule", de manière à éviter un fsck au redémarrage.
  • [Alt]-[Syst]-B : Reboote immédiatement le système.

- ou -

  • [Alt]-[Syst]-O : Arrête immédiatement le système.

=> Dans une console texte, la séquence [Alt]-[Syst]-H ou [Alt]-[Syst]-[Entrée] affiche un bref résumé de la fonction des Magic SysRq disponibles.

Magie ultra-noire de niveau Guru : hypoaristerolactothérapie

Cette méthode ésotérique nécessitant un très haut degré d'initiation est également appelée Technique du coup de pied en bas à gauche.

Le mouvement, qui doit être exécuté avec une extrême précision et synchronisation motice, s'est montré à travers les âges d'une redoutable efficacité pour résoudre tout problème d'ordre mécanique, électrique ou informatique rebelle à toute autre technique.

Alors, encore "planté", votre Linux ?

Notes

[1] quand on tue le serveur "X", le gestionnaire de sessions KDM ou GDM le redémarre aussitôt. Il ne s'agit pas d'un reboot : Le système ne s'est pas arrêté et n'a pas redémarré, dans un tel cas de figure.

[2] Avec l'aide bienveillante d'un démon getty.

[3] Bon, admettons-le, il est possible qe le système soit réellement et complètement planté. Quand ce n'est pas le signe d'une défaillance du matériel, c'est pratiquement toujours du à un pilote de périphérique buggué ou mal configuré pour le matériel, et les meilleurs clients pour ce genre de problèmes sont les pilotes propriétaires de cartes graphiques pour X11 (pilotes NVidia ou ATI par exemple), ou les pilotes Windows que l'on peut être obligé d'utiliser via ndiswrapper pour gérer certains matériels spécifiques - cartes ou bidules Wi-Fi bien souvent. Cela peut être également du à une option de noyau incompatible (ou au contraire nécessaire) pour un ordinateur ou un BIOS donné. Il est le plus souvent possible d'isoler le problème, bien que ce ne soit pas forcément de la tarte...

[4] Si vous voulez voir à quoi ressemble un vrai boot Linux en console, bootez voir votre machine avec les options de noyau "noquiet nosplash".

[5] Le démarrage de X fait automatiquement basculer dans le terminal graphique.

[6] La touche [Backspace] est la touche de correction "Flèche à gauche" au-dessus de la touche [Entrée].

[7] Le système de fichiers peut toujours prendre une mauvaise claque...

[8] runlevel 0 = Arrêt ; runlevel 6 = reboot.

[9] À condition que, dans le BIOS du système, le bouton [Power] soit configuré pour transmettre une information ACPI, et ne forcer la mise hors-tension que si on le tient enfoncé 4 secondes. Si, si, tous les BIOS modernes permettent de configurer cela, ou le font par défaut.

[10] Ce qui est rare, le plus souvent, parvenir à tuer X11 débloque le système.

[11] Les attaques de robots essayant tous les prénoms du dictionnaire et des mots de passe à deux balles sur le port SSH sont innombrables.

[12] La touche [Syst] est la même que la touche [Impression Écran].