Ce cours est visible gratuitement en ligne.

Got it!
A la découverte d'UNIX (FreeBSD)
Last updated on Tuesday, January 8, 2013
  • 4 semaines
  • Moyen

L'environnement graphique X

Tous les UNIX utilisent habituellement le même environnement graphique. Celui-ci a été développé au Massachusetts Institute of Technology (MIT) en 1984 et il s'appelle X. On peut aussi dire X11 ou X Window System.

A - X.org et les outils de recherche

Au fait, pourquoi l'appeler X ?

Eh bien, au début, il s'appelait W. Car le but était de dessiner des fenêtres et car fenêtre se dit window en Anglais. Mais comme la première version (W) n'était pas très réussie, il a fallu en faire une autre. Et plutôt que de l'appeler W2, on a pris la lettre suivante dans l'alphabet, c'est à dire X. :D

Vous allez donc utiliser X. Mais sachez qu'il en existe plusieurs versions : XFree86, X.org, Accelerated X, etc. Contrairement à ce que suggère le nom XFree86, seul X.org est un logiciel libre. C'est lui qui est disponible sous FreeBSD et que nous installerons. Sachez cependant que d'autres UNIX (AIX, Solaris, etc.) font plutôt appel à Accelerated X.

Faites votre choix entre port et paquet et tapez l'une de ces deux commandes pour installer X.org. Si votre ordinateur est peu puissant et si vous n'êtes pas patient, optez plutôt pour la première :

[Nom de l'ordinateur]# pkg_add -r xorg
[Nom de l'ordinateur]# cd /usr/ports/x11/xorg/ && make install clean

L'opérateur &&, que vous voyez ici, permet de taper deux commandes sur la même ligne. Elles seront exécutées l'une après l'autre.

Et voilà ! A présent, consultez à nouveau la liste des paquets installés avec pkg_info.

Tout ça ? Mais je n'ai téléchargé que X.org, emacs et Links !

Erreur. Vous avez également importé toutes leurs dépendances. Impressionnant, n'est-ce pas ? Je vous avais bien dit que ça se remplirait vite. Remarquez que, si vous vous êtes servi des ports, pkg_info fonctionne quand-même. Imaginons maintenant que vous vouliez supprimer le paquet xorg, comment feriez-vous ? Ne le faites pas, hein ! :o J'ai bien dit : "imaginons".

Il faudrait taper pkg_delete, puis le nom exact du paquet, tel qu'indiqué par pkg_info.

Je veux bien mais c'est une sacré liste que pkg_info me renvoie. Autant chercher une aiguille dans une botte foin. On ne peut pas faire plus simple ?

C'est là que grep va voler à votre secours. Essayez :

% pkg_info | grep xorg
Image utilisateur

Cette fois, la liste est beaucoup moins longue.

Ce symbole | (on l'appelle le pipe : le tuyau) permet de rediriger vers la commande de droite (grep) le résultat de la commande de gauche (pkg_info). La liste complète des paquets n'est pas affichée dans la console mais transmise à la commande grep, qui va faire le tri et retenir uniquement les lignes contenant la suite de caractères xorg. Ainsi, tous les paquets dont le nom ou la description contiennent xorg, et seulement eux, vous sont indiqués.

Cela ne fonctionne pas uniquement avec pkg_info. Pour retrouver combien de grammes de farine il faut mettre dans un gâteau, plutôt que de lire la totalité d'un fichier texte appelé recette, vous pouvez taper :

% cat recette | grep farine

Seules les lignes contenant la chaîne de caractères farine seront affichées. :D

Bien. X.org est maintenant installé. Mais où est-il, au juste ? Voyons voir. :colere2: C'est un logiciel exécutable que vous avez installé vous-mêmes. Il doit donc logiquement se trouver dans /usr/local/bin/ ou dans /usr/local/sbin/. Mais le plus simple est encore de poser la question à FreeBSD. Nous pouvons utiliser les commandes :

  • find : trouve n'importe quel fichier. Mais ça peut être aussi long que sous Windows.

  • which : explore les dossiers de la variable PATH à la recherche d'exécutables.

  • locate : trouve immédiatement les fichiers répertoriés dans sa base de données.

La base de données dans laquelle locate fait ses recherches est mise à jour une fois par semaine. Pour la mettre à jour tout de suite, tapez :

[Nom de l'ordinateur]# /usr/libexec/locate.updatedb

Il est déconseillé d'utiliser cette commande pendant que d'autres utilisateurs sont logués car ils pourraient intercepter la base de données. Pour savoir qui est connecté, tapez who.

Une autre solution consiste à lancer un avis de recherche :

[Nom de l'ordinateur]# whereis Xorg

La commande whereis, entrevue au chapitre précédent, est capable de vous indiquer en un éclair l'emplacement de certains fichiers, même si vous venez seulement de les installer. Mais cela ne fonctionne que pour : certains fichiers exécutables, les pages de manuel et les ports.

Parmi les deux réponses qui vous sont données cette fois-ci, l'une est visiblement une page de manuel. C'est l'autre qui nous intéresse : le fichier exécutable /usr/local/bin/Xorg.

Exécutons-le, justement, afin de configurer X :

[Nom de l'ordinateur]# /usr/local/bin/Xorg -configure

Vous exécutez ainsi un script qui va créer un fichier de configuration xorg.conf.new dans le dossier /root. Ce n'est pas un très bon emplacement. FreeBSD trouvera plus facilement ce fichier si vous le copiez dans /etc/X11/. Allez donc dans le dossier /root.

Vous y êtes ? Vérifiez avec ls que xorg.conf.new est bien là. Puis tapez :

[Nom de l'ordinateur]# cp xorg.conf.new /etc/X11/xorg.conf

La commande cp permet de copier des fichiers d'un dossier dans un autre. Remarquez que la copie n'a pas besoin de porter le même nom que l'original. Ici, l'original est xorg.conf.new et la copie xorg.conf.

Parfait ! J'ai une grande nouvelle à vous annoncer. :) Dans quelques secondes, vous allez voir vos premiers graphismes sous UNIX. :D Saisissez exit puis :

% /usr/local/bin/startx

...et retenez votre souffle ! o_O

Image utilisateurImage utilisateur

C'est quoi, ces vieilles fenêtres ? :'( C'est ça, les graphismes sous UNIX ? Et la souris ne fonctionne même pas ! Et le clavier non plus ! :colere:

Dans les années 80, ils ressemblaient à ça, en effet. Mais, pas de panique ! :) Ce n'est que le début de notre chantier et il ne faut pas vous attendre à voir l'édifice tout de suite. Le rôle de X, c'est de créer un environnement graphique, pas d'afficher de belles fenêtres et encore moins un bureau complet.

Nous allons arranger ça. La première chose à faire, c'est de revenir en mode texte. Appuyez sur Alt F1 pour afficher à nouveau la console principale. Tant que X reste actif, vous pouvez y retourner avec Alt F9. Mais, pour l'instant, nous voulons justement l'arrêter. Donc, faites Alt F1 puis demandez l'interruption du processus en cours avec Ctrl c. Vous retrouvez alors votre ligne de commande.

B - HAL et les DAEMONs de rc

Au delà des questions esthétiques, la première urgence concerne les périphériques. Pour que X détecte notre clavier et notre souris, il nous faut des DAEMONs supplémentaires. Et pour les appeler, vous vous souvenez peut-être que le fichier à éditer est :

rc.conf, situé dans le dossier /etc/.

Vous pouvez taper directement :

[Nom de l'ordinateur]# emacs /etc/rc.conf

Nous allons ajouter deux lignes en bas de ce fichier :

hald_enable="YES"
dbus_enable="YES"
Image utilisateur

La première ligne active le programme HAL. :waw: Non, pas de panique, HAL est bien un DAEMON :diable: mais ce n'est pas celui de 2001, l'Odyssée de l'espace. :DHAL, c'est le Hardware Abstraction Layer, qui assure la communication entre le hardware (le matériel) et certaines applications. Et dbus permet à certains processus (dont HAL, justement) de s'échanger des informations.

Ces changements faits, quittez emacs avec Ctrl x puis Ctrl c. On vous demande si vous voulez sauvegarder vos modifications. Bien sûr, vous n'avez pas fait ça pour rien. :D Répondez oui en appuyant sur y.

Occupons-nous maintenant du problème QWERTY. Pour indiquer à X que notre clavier est en AZERTY, nous avons besoin de configurer HAL en créant un nouveau fichier :

[Nom de l'ordinateur]# cd /usr/local/etc/hal/fdi/policy
[Nom de l'ordinateur]# emacs 10-x11-input.fdi

Et voici ce qu'il faut écrire dans ce fichier, en langage XML :

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
      <merge key="input.xkb.layout" type="string">fr</merge>
    </match>
  </device>
</deviceinfo>

N'oubliez pas de sauvegarder (Ctrl x puis Ctrl s) avant de quitter.

Maintenant, avant de réessayer X, activez HAL et dbus manuellement. En effet, le fichier rc.conf ne sera lu qu'au prochain redémarrage de FreeBSD. Dans les dossiers /etc/rc.d/ et /usr/local/etc/rc.d/, vous trouverez des scripts (des programmes) permettant justement de lancer, arrêter ou redémarrer des DAEMONs. Il faut donc taper :

[Nom de l'ordinateur]# /usr/local/etc/rc.d/hald start
[Nom de l'ordinateur]# /usr/local/etc/rc.d/dbus start
[Nom de l'ordinateur]# exit
% /usr/local/bin/startx
Image utilisateur

Tiens, il y a un menu à droite de l'image. Comment l'affiche-t-on ?

Cliquez n'importe où dans la zone noire et gardez le bouton effoncé.

Et Twm, c'est quoi ?

Tiling window manager. C'est le gestionnaire de fenêtres, le programme qui, comme son nom l'indique, s'occupe des fenêtres. Il est assez rudimentaire et nous en installerons un meilleur dès le prochain chapitre.

C - Firefox

Voilà : X reconnaît maintenant votre clavier et votre souris. Vous pouvez écrire dans les fenêtres, les déplacer, afficher un menu en cliquant dans la zone noire et même lancer les programmes que vous avez. Sauf que, pour l'instant, vous n'en avez pas des masses. Il est grand temps d'installer Firefox et de vous relier au monde extérieur avec ce navigateur graphique.

Quittez X en tapant exit dans la fenêtre login. Sur les machines peu puissantes, il vaut mieux compiler les nouveaux programmes dans la vraie console plutôt que sous X : c'est plus rapide. Et Firefox est tout de même un programme relativement lourd à installer (mais ça vaut le coup).

Vous pouvez vous servir du paquet ou du port. L'exemple de Firefox montre d'ailleurs bien l'avantage des ports sur les paquets : tandis que j'écris ces lignes (le 13/04/2011), le port installe Firefox 4 alors que le paquet concerne toujours Firefox 3.6.

[Nom de l'ordinateur]# pkg_add -r firefox

Ou :

[Nom de l'ordinateur]# cd /usr/ports/www/firefox && make install clean BATCH=yes

Comme ça, Firefox est en Anglais. Pour le franciser, il faut installer firefox-i18n puis, dans le menu Tools du navigateur, allez sur Quick Locale Switcher, cliquez sur Options :

Image utilisateur

Dans la boite de dialogue qui s'ouvre, cochez User Interface Language (c'est la première ligne). Fermez ensuite cette boite, retournez dans Tools -> Quick Locale Switcher et, cette fois, choisissez fr-FR - French (France). Vous n'avez plus qu'à redémarrer Firefox.

Pour ceux qui n'aiment pas Firefox, sachez qu'il existe beaucoup d'autres navigateurs disponibles sous FreeBSD et UNIX. Par exemple, il y a chromium, la version libre (licence BSD) du fameux Google Chrome. Mais, je vous préviens, rares sont les semaines où on ne voit pas passer sur FreshPorts une alerte de sécurité :o concernant ce navigateur.

Par contre, vous avez :

  • Opera

  • Rekonq

  • Konqueror

  • Epiphany

  • Midori

  • et bien d'autres...

Image utilisateur

Rekonq

Pour lancer firefox, ouvrez une session graphique (startx) et tapez firefox.

Ouf ! Vous avez maintenant un navigateur web graphique et vous allez pouvoir suivre ce tutoriel avec les images. C'est-y pas génial, ça ? :D Bon, je sais bien, il y a encore beaucoup de choses à améliorer dans notre environnement graphique.

D - Le gestionnaire d'affichage

Par exemple, ce serait bien qu'il démarre un peu plus tôt. Pour l'instant, quand vous allumez l'ordinateur, il faut passer le menu de boot puis regarder défiler les messages systèmes, puis taper votre login et votre mot de passe dans la console. Et c'est seulement à partir de ce moment là que vous pouvez lancer l'environnement graphique avec startx. Il faut dire que FreeBSD a d'abord été conçu pour les serveurs, qui n'ont pas besoin d'environnement graphique et sont rarement redémarrés.

Sur un ordinateur de bureau, au contraire, nous voulons des graphismes le plus tôt possible. Par exemple, on aimerait bien taper son login et son mot de passe dans un environnement plus agréable qu'un écran noir. Nous allons donc activer un gestionnaire d'affichage (display manager), parfois également appelé gestionnaire de login (login manager). Celui qui accompagne X.org par défaut s'appelle xdm (X11 Display Manager). Mais il n'est pas très joli :( et je vous conseille plutôt SLiM (Simple Log in Manager).

Je vous laisse chercher sur FreshPorts comment installer SLiM. Ensuite, pour l'activer, il faut éditer le fichier /etc/ttys. Allez dans la console. Le dossier /etc, vous vous en souvenez peut-être, est une chasse-gardée de notre ami root :zorro: . Lui seul peut y écrire. Il faut donc vous mettre en mode root. Ensuite, avant de modifier le fichier ttys, faites-en une sauvegarde avec cp. Vous vous rappelez comment on fait ? ;) Finalement, tapez :

[Nom de l'ordinateur]# emacs /etc/ttys

Si vous avez oublié le maniement d'emacs, c'est l'occasion rêvée de relire le chapitre précédent. Mais si, je sais que vous en réviez. :D

C'est cette partie du fichier qui nous intéresse :

Image utilisateur

Voici donc vos différents terminaux : (ttyv0), le « vrai », (ttyv1) à (ttyv7), les terminaux virtuels en mode texte et (ttyv8), celui des sessions graphiques. Attention au décalage : (ttyv0) correspond à la touche F1 et (ttyv8) à la touche F9.

Vous voyez à la ligne ttyv8 que le terminal graphique est off par défaut. Transformez cette ligne en :

ttyv8    "/usr/local/bin/slim -nodaemon" xterm on secure

C'est fait ? Alors, il est temps de partir. Faites Ctrl x puis Ctrl c et appuyez sur y pour enregistrer vos modifications. Redémarrez avec reboot. Au moment de vous loguer, vous allez voir ça :

Image utilisateur

Pas mal, non ? :soleil: Personnellement, je trouve le thème par défaut très bien. Mais, si vous voulez le modifier, n'hésitez pas à consulter le site internet de SLiM, qui vous explique en détails comment faire. Une précision tout de même : contrairement à ce qu'indique le site, le dossier des thèmes n'est pas /usr/share/slim/themes sous FreeBSD mais /usr/local/share/slim/themes. Repérez également le fichier de configuration /usr/local/etc/slim.conf.

Vous pouvez aussi installer slim-themes, par les ports ou en paquet.

Le problème vient de Twm, le gestionnaire de fenêtres. Quand vous vous loguez avec SLiM, il n'est pas lancé automatiquement.

Pour arranger ça, il faut vous rendre dans l'un des terminaux virtuels. Appuyez donc sur les touches Alt Ctrl F2 (ou Alt Ctrl F3, ça fonctionne aussi... ;) ).

Allez ensuite dans votre dossier personnel et créez-y un fichier .xinitrc contenant cette unique ligne :

exec twm

Comme il n'y a qu'une seule ligne, ce n'est peut-être pas la peine de se servir d'un éditeur de texte. Vous pouvez employer la commande echo :

% echo "exec twm" > .xinitrc

Vous savez que la commande echo sert normalement à afficher dans la console le texte que vous écrivez derrière elle, ou la valeur d'une variable si vous mettez un $ devant son nom. Mais le symbole > redirige cet affichage : au lieu d'apparaître dans la console, le texte est transmis au fichier .xinitrc. Et comme ce fichier n'existait pas, il est créé.

Remarquez que, si vous faites ça avec un fichier existant, son contenu sera supprimé ... et donc perdu ! :waw: Il ne contiendra plus que le texte envoyé par >. Si ce que vous voulez, c'est ajouter une ligne à la fin d'un fichier existant, il faut mettre deux chevrons :

% echo "bla bla bla" >> fichier_existant

Retournez alors dans SLiM avec Alt Ctrl F9, et tapez votre identifiant puis votre mot de passe. Vous vous retrouvez devant un écran vide. Maintenez le bouton gauche de la souris enfoncé pour afficher le menu de Twm et choisissez Xterm pour ouvrir un terminal.

csh /etc/csh.cshrc
csh $HOME/.cshrc

HOME est la variable d'environnement qui désigne votre dossier personnel.

E - Le mode mono-utilisateur

Votre session graphique commence donc plus tôt qu'avant. Mais pas non plus tout à fait au démarrage. Et heureusement ! :-°

Eh Oui ! C'est que vous venez de prendre un sacré risque en activant un gestionnaire d'affichage. Imaginez qu'il ait un problème. Qu'il ne parvienne pas, pour une raison X ou Y, à ouvrir une session. :o (Cela n'arrive jamais, mais imaginons...) Vous n'auriez plus accès à rien : ni à X.org, ni à la console. >_ Et bien sûr, impossible de réparer le système sans vous loguer. Même root :zorro: ne pourrait rien pour vous. Tout serait fichu, :'( à moins que...

Il reste un ultime recours. :magicien: Vous l'avez déjà vu plusieurs fois, mais probablement sans y faire attention. Ce recours, c'est...

Image utilisateurImage utilisateur

Si, un jour, votre gestionnaire d'affichage vous ennuie, tapez 6 dans ce menu. Vous lancerez alors le single user mode, ou mode mono-utilisateur. Le texte de démarrage défilera sous vos yeux comme d'habitude mais, soudain, le défilement s'arrêtera. Tapez alors Entrée pour voir apparaître un #. Vous êtes dans la console, et en mode root. Sans même avoir à taper un mot de passe.

Quoi ? :o Mais c'est dangereux ça ! N'importe qui :pirate: peut donc devenir root, rien qu'en redémarrant ?

En effet, et il faudra régler ce problème. Mais, pour l'instant, concentrons-nous sur notre opération de secours. Votre mission, si vous l'acceptez, :ninja: est de désactiver le gestionnaire d'affichage et de libérer ainsi l'accès à la console. Les obstacles :diable: ne manqueront pas sur votre chemin : d'abord, vous êtes en QWERTY, ce qui n'est jamais très confortable. Ensuite, la plupart des commandes de FreeBSD sont, pour l'instant, inaccessibles.

Pour éditer /etc/ttys, vous allez vouloir taper emacs /etc/ttys. En QWERTY, vous appuierez donc sur les touches e,qcs !etc!ttys. Et là, vous allez récolter un joli :

emacs : not found

N'espérez pas avoir plus de succès avec ee ou vi : FreeBSD n'est pas dans son état normal ! :'( Il n'accède pas comme il le devrait à ses propres tranches (ou partitions). La première chose à faire est donc de recharger ces tranches dans la RAM (on appelle ça le montage des tranches). Commençons par la tranche racine :

# mount -u /

En QWERTY, vous taperez donc : ,ount )u !

L'option -u indique que nous montons à nouveau une tranche qui l'est déjà (mais pas correctement). Ensuite, selon ce que vous voulez faire, vous pouvez avoir besoin de monter toutes les autres tranches qui sont au format UFS :

# mount -a -t ufs

C'est à dire : ,ount )a )t ufs

Si vous voulez aussi le swap :

# swapon -a

Autrement dit : szqpon )q

Voila. FreeBSD a retrouvé ses esprits. :) Ouvrez /etc/ttys, retrouvez la ligne ttyv8 et remplacez-y le on final par un off. Attention : vous êtes toujours en QWERTY. Ensuite, vous pouvez redémarrer en mode normal.

Mission accomplie !

Le mode mono-utilisateur, c'est donc le mode de secours, à utiliser en dernier recours si plus rien d'autre ne fonctionne. Mais c'est aussi, vous l'avez compris, une vulnérabilité que des pirates :pirate: peuvent exploiter si vous ne le protégez pas. Vous allez donc le reconfigurer pour qu'il demande le mot de passe de root au démarrage. Le fichier à modifier pour ça est... /etc/ttys ! (Oui, encore lui...) ;)

La première vraie ligne de /etc/ttys, juste après les commentaires, est :

console none                 unknown     off secure

En raison de ce secure final, FreeBSD se sent en sécurité et garde grandes ouvertes les portes du mode mono-utilisateur. Quelle naïveté ! :ange: Il faut l'informer que nous vivons dans un monde dangereux et donc remplacer le secure par insecure (uniquement sur cette ligne là).

Désormais, si vous passez en mode mono-utilisateur, au lieu de vous donner directement le #, FreeBSD vous demandera le mot de passe de root.

Après vous avoir reconnu, FreeBSD vous proposera de choisir un shell. Résistez à la tentation de demander le csh et tapez simplement Entrée. Vous retrouverez alors le # et pourrez commencer à monter des tranches.

Parfait. :D Vous avez maintenant un environnement graphique et un démarrage agréable. D'accord, les fenêtres sont moches et peu maniables. Mais on avance. Brique après brique, vous le construisez, votre bureau. :)

Example of certificate of achievement
Example of certificate of achievement