\chapitre{Pour aller plus loin}{Ce chapitre est un complément plus technique}{ sur GNU/Linux. Sa compréhension et sa lecture ne sont absolument pas nécessaires pour une utilisation quotidienne et sereine de votre \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation}. Cependant, si le cœur vous en dit et si la curiosité vous démange, je suis persuadé que vous trouverez, dans cette partie, une mine d'informations intéressantes. Vous voulez devenir un expert de GNU/Linux ? Ce chapitre est la première marche à gravir !}
\section{À quoi sert réellement un système d'exploitation ?}
\AddIndex{Système}{OS}{Système d'exploitation}{-}
Il exploite ! Oui, mais «~qui~» allez-vous me dire ? En fait, il s'agit plutôt de «~quoi~» : l'\RefGlossaire{Système}{Système d'exploitation}{OS}{OS} exploite votre matériel.\par
Essayons d'imaginer le contraire : si le \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation} n'existait pas, tous les logiciels devraient être conçus pour tous les types de matériel. c'est-à-dire que chaque programmeur devrait prendre en compte l'ensemble du matériel -- carte graphique, type de mémoire RAM, disque dur, processeur\ldots{} -- ainsi que tous les périphériques -- clavier, souris, écran, imprimante\ldots{} -- existant ou ayant existé. À chaque sortie d'un nouveau matériel -- ce qui arrive par centaines quotidiennement -- il faudrait alors le prendre en compte et sortir une nouvelle version de chaque logiciel !\\
J'ajouterais également que cela prendrait une place en mémoire non négligeable et énormément de temps puisque ce travail serait dupliqué pour chaque logiciel ! Infernal, n'est-ce pas ? C'est donc la fonction principale d'un \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation} : il offre une double interface entre ce qui est capable de dialoguer dans la même langue que le matériel -- les \RefGlossaire{Système}{Pilote}{Driver}{drivers} -- et les logiciels installés sur la machine. Les logiciels installés, par conséquent «~se foutent\NotePage{Permettez-moi l'expression !} complètement~» du type de matériel installé sur votre ordinateur : ils envoient des instructions comme «~affiche-moi cela~», «~fais ceci~» et le \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation}, par le biais des \RefGlossaire{Système}{Pilote}{Driver}{drivers}, fournit la bonne traduction dépendant du matériel. Le schéma \ref{ImgFonctionnementOS} -- fort simplifié -- montre ce fonctionnement.\par
\ImgCentree{12}{corps/chapitre10/img/Fonctionnement_OS.png}{Schéma de fonctionnement d'un système d'exploitation}{ImgFonctionnementOS}
Cette explication vous permettra de mieux comprendre ce qui suit.
\section{Driver, kernel et démarrage\ldots{}}
À l'installation d'Ubuntu, un programme répondant au nom de Grub, est placé au début de votre disque dur, dans le \RefGlossaire{-}{MBR}{Secteur d'amorçage}{le secteur d'amorçage} par défaut. C'est lui qui va vous permettre de choisir, au démarrage, le système que vous souhaitez utiliser --- pour garder Windows par exemple. Si vous choisissez Ubuntu, Grub va alors charger le \RefGlossaire{Système}{Noyau}{Kernel}{kernel}. Il contrôle les périphériques, la mémoire, le réseau, le bon déroulement des programmes\ldots{} Par dessus arrivent les outils GNU, qui permettent vraiment d'utiliser la machine : manipuler des fichiers, faire des calculs\ldots{} \par
Le \RefGlossaire{Système}{Kernel}{Noyau}{noyau} Linux contrôlant le matériel, c'est lui qui intègre les \RefGlossaire{Système}{Pilote}{Driver}{drivers}. Comme le \RefGlossaire{Système}{Kernel}{Noyau}{noyau} est \AddIndex{Philosophie}{-}{Libre}{Libre}, il peut se compiler avec les \RefGlossaire{Système}{Pilote}{Driver}{drivers} que l'on souhaite. Mais pas de panique, votre distribution Ubuntu a un \RefGlossaire{Système}{Kernel}{Noyau}{noyau} Linux compilé avec le maximum de \RefGlossaire{Système}{Pilote}{Driver}{drivers} accessibles par ce que l'on appelle des «~modules\NotePage{On peut les activer ou désactiver suivant votre matériel}~», il est donc très rare d'avoir à chercher et compiler un module soi-même. En revanche, les constructeurs ne se précipitent pas pour programmer des \RefGlossaire{Système}{Pilote}{Driver}{drivers} pour GNU/Linux, ni même pour fournir des spécifications permettant de les développer. Il arrive donc que certains matériels ne soient pas bien gérés par GNU/Linux, voire pas gérés du tout --- souvent des périphériques USB peu communs, ou certaines cartes \RefGlossaire{Réseau}{Connexion sans fil}{Wi-Fi}{Wi-Fi}. Mais rassurez-vous, il y a tout de même énormément de matériels compatibles, et l'on a parfois la bonne surprise de voir un périphérique sans \RefGlossaire{Système}{Pilote}{Driver}{drivers} pour XP/Vista marcher comme un charme sur Ubuntu\NotePage{C'est le cas pour ma carte réseau : il faut que je télécharge le \RefGlossaire{Système}{Pilote}{Driver}{driver} depuis l'\RefGlossaire{-}{L'Internet}{Internet}{Internet} sous XP, sans avoir alors directement accès à l'\RefGlossaire{-}{L'Internet}{Internet}{Internet} puisque ma carte réseau n'est pas gérée, alors qu'aucune manipulation n'est à faire sous Ubuntu !!!}.
\begin{nota}
Sur la page \url{http://doc.ubuntu-fr.org/materiel}, vous trouverez comment résoudre les problèmes si l'un des composants de votre ordinateur n'est pas reconnu, ou comment optimiser l'utilisation de certains périphériques.
\end{nota}
\section{L'arborescence des fichiers}
\label{RefArboFichiers}
Un disque dur est un élément matériel qui est généralement placé à l'intérieur de l'ordinateur. C'est un périphérique de stockage magnétique qui va garder, même ordinateur éteint, tous vos documents, mais aussi le \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation} et les fichiers nécessaires à la bonne marche de votre machine.\par
L'arborescence des fichiers est leur organisation sur le disque dur. Si vous utilisez Windows, vous savez certainement que les fichiers se placent dans des répertoires\NotePage{Le nom officiel est dossier sous les systèmes Unix, et donc Ubuntu}.\par
Voici un petit cours de rattrapage pour les retardataires :\\
On pourrait prendre l'exemple d'une armoire contenant des tiroirs. Une armoire immense car chaque tiroir pourra contenir un ou plusieurs sous-tiroirs, et ainsi de suite\NotePage{Quelle belle garde-robe, non ? ;-)}\ldots{} Pour accéder aux vêtements -- les fichiers -- il va falloir tout d'abord ouvrir les portes de l'armoire /\NotePage{Slash, prononcez «~slache~», encore appelé système de fichiers ou racine}. Ensuite, vous devrez ouvrir un tiroir A -- équivalent à un dossier -- pour avoir accès aux autres tiroirs et vêtements situés dans celui-ci et ainsi de suite. On ouvrira donc un -- ou plusieurs -- tiroir(s) pour accéder aux vêtements que vous porterez aujourd'hui ! Par analogie, si je veux accéder aux fichiers contenus dans mon bureau, la méthode «~longue~», puisque vous voyez directement les fichiers sur votre bureau virtuel, serait : ouvrir /, puis naviguer dans le dossier home, puis naviguer dans le dossier à votre  nom de compte utilisateur, et enfin à naviguer dans Bureau.\\
On obtient ainsi le schéma \ref{ImgFonctionnementSysteme}.\par
\ImgCentree{11}{corps/chapitre10/img/Fonctionnement_Systeme.png}{Arborescence des fichiers}{ImgFonctionnementSysteme}
Pour accéder à ces fichiers et ces dossiers, on utilisera donc ce que l'on appelle un «~chemin~» :
\Chemin{/home/NomDeCompteUtilisateur/Bureau} où NomDeCompteUtilisateur dépend de votre installation.\par
\begin{nota}
Attention, sous les systèmes Unix, le caractère de séparation des dossiers est le / et non \textbackslash{} comme sous Windows.
\end{nota}
Maintenant que vous avez compris à quoi correspondent un dossier et un fichier et comment les nommer, voyons comment s'organisent les fichiers sous Linux.\par
La base, vous l'aurez compris, est /. On va y trouver un certain nombre de dossiers, que nous survolerons -- simple curiosité -- par la suite. En effet, Ubuntu ne vous demandera jamais, si vous installez tous les logiciels par Synaptic ou par la logithèque Ubuntu\ldots{} -- cf. sections \ref{RefInstallSynaptic} et \ref{RefInstallApp} -- où les installer. Il se débrouillera tout seul. Sachez juste que votre dossier personnel, une fois connecté, se situe dans \Chemin{/home} comme nous le reverrons un peu plus loin.\\
J'attire également votre attention sur un point : sous Windows, vous savez que les différentes partitions des disques -- voir la section \ref{RefFormatPartition} concernant l'installation pour obtenir une explication succincte de ce qu'est une partition -- se nomment \Chemin{C:\textbackslash{}}, \Chemin{D:\textbackslash{}}\ldots{}\NotePage{D'ailleurs, ne vous est-il jamais arrivé d'ajouter un disque dur qui perturbe l'ordre des lettres de vos lecteurs ?} tout comme le lecteur de DVD/CD-ROM, la clef USB\ldots{} Cependant, nous avons pu voir que sous Ubuntu, tout commence avec la partition racine /.\\
Comment peut-on alors accéder à nos autres partitions, notamment les partitions Windows si vous avez gardé votre ancien \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation} ? En fait, lors de l'installation, vous rappelez-vous de la partie «~Point de montage~» ? C'est ici que vous avez modifié ou laissé les choix par défaut concernant ce que l'on appelle le «~montage~» d'une partition. Monter une partition, c'est lier un dossier à une partition. Par défaut, ces dossiers se trouvent dans \Chemin{/media} --- il y a donc un dossier media dans /. Par exemple, si j'ai monté ma partition C:\textbackslash{} de Windows dans \Chemin{/media/windows} -- il y a donc, pour clarifier une fois encore, un dossier windows contenu dans un dossier media, lui-même contenu dans / -- chaque fois que j'enregistrerai dans \Chemin{/media/windows} ou un de ses sous-dossiers, j'enregistrerai en fait sur la partition \Chemin{C:\textbackslash{}}. De même avec une clef USB ou encore en lisant un lecteur de DVD/CD-ROM.\\
Cependant, vous ne serez pas obligé d'aller à chaque fois dans \Chemin{/media/UnDossier} pour lire vos partitions Windows ou bien d'autres partitions/disque dur de votre ordinateur\NotePage{Je ne le répéterai jamais assez, mais le Linuxien est fainéant !}. Le fait d'avoir choisi comme point de montage un dossier contenu dans \Chemin{/media} revient à créer des «~signets système~» --- voir la section sur les fenêtres et signets en \ref{RefSignets}. Cela les rend alors directement disponibles dans le menu Raccourcis -- cf. section \ref{RefMenuGNOME} développant les menus -- le panneau latéral de Nautilus\NotePage{Également présenté en \ref{RefSignets}} ou encore le Bureau, cf. section \ref{RefBureauxVirtuels} ! Vous n'aurez ainsi plus jamais de problème en ajoutant un disque dur ou lecteur à votre PC !\par
\begin{nota}
Pour les clefs USB, les disques durs externes ou les lecteurs de DVD/CD-ROM, l'\RefGlossaire{-}{-}{Icône}{icône} n'apparaît que si une clef est branchée, le disque dur alimenté ou un disque inséré, pratique non ?
\end{nota}
Voici pour information quelques explications sur les différents dossiers indispensables dans / :
\begin{itemize}
\item \Chemin{/bin} : Contient les programmes système importants.
\item \Chemin{/boot} : Les fichiers utiles au démarrage du système
\item \Chemin{/dev} : Contient des fichiers factices permettant de communiquer avec vos périphériques.
\item \Chemin{/etc} : Ici se trouvent la plupart des \AddIndex{Système}{Texte brut}{Fichier de configuration}{fichiers de configuration} du système.
\item \Chemin{/home} : Contient les dossiers personnels des utilisateurs. Chacun y possède -- comme expliqué plus haut -- un dossier à son nom avec ses fichiers personnels.
\AddIndex{-}{Identifiant}{Login}{-}
\item \Chemin{/lib} : Contient les librairies -- bibliothèques -- utiles au système.
\item \Chemin{/media} : Comme expliqué précédemment, les dossiers contenus correspondent aux accès de montage des périphériques de stockage.
\item \Chemin{/opt} : A un peu la même fonction que \Chemin{/usr}, sauf que certains l'utilisent pour les programmes qu'ils compilent eux-mêmes et qui ne sont logiquement pas aussi intégrés qu'un logiciel disponible dans les sources de logiciels --- cf. section \ref{RefSourceMAJ}.
\item \Chemin{/proc} : Ce dossier contient des fichiers et dossiers virtuels qui correspondent à l'état du système en temps réel : processus -- programmes -- lancés, occupation mémoire, RAM disponible, etc
\item \Chemin{/root} : C'est le \Chemin{/home} de l'administrateur ! Ce dernier est séparé pour des questions de sécurité. Cependant, si vous avez bien suivi jusqu'ici, il n'y a pas de compte root à proprement parler sur Ubuntu. Ce répertoire existe donc seulement pour assurer la compatibilité avec les autres distributions GNU/Linux.
\item \Chemin{/sbin} : A un peu la même fonction que \Chemin{/bin}, sauf que tous les programmes issus ne sont accessibles qu'à l'administrateur, ou aux amis de root sur Ubuntu.
\item \Chemin{/tmp} : Comme son nom l'indique, ici sont stockés les fichiers temporaires utiles aux programmes en cours d'exécution. Ce dossier est vidé à chaque redémarrage.
\item \Chemin{/usr} : Dossier important, contenant tous les programmes et les bibliothèques installés.
\item \Chemin{/var} : Dossier contenant tout ce qui est variable au système. Par exemple, les fameux fichiers «~log~» enregistrant ce qui se passe sur votre système, utiles quand quelque chose ne fonctionne plus par exemple -- contenus dans \Chemin{/var/log/}.
\end{itemize}
Dernier point : Comme nous l'avons vu, les partitions sont montées dans des dossiers. GNU/Linux nomme les partitions sda1 pour la partition 1 du premier disque IDE -- encore appelé ATA et plus récemment renommé en PATA -- ou encore SCSI (SATA) ou périphérique de stockage externe (usb), sda2 pour la deuxième, sdb1 pour la première partition du deuxième disque (b), etc. Au démarrage d'Ubuntu, ce dernier ouvre un fichier \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte brut} nommé \Chemin{/etc/fstab} dans lequel il trouve les correspondances entre les disques durs et les dossiers où ils doivent être montés -- le système étant légèrement plus complexe aujourd'hui pour certifier que même si vous changiez l'ordre de vos disques durs ou que vous insériez différentes clefs, ceux-ci retrouvent toujours les bonnes correspondances, dans le même ordre. Cela se fait par le biais d'UUID - suite de chiffres et de lettres permettant une identification unique - et de label.
\section{Où sont enregistrées mes préférences ?}
\label{RefEnrPref}\AddIndex{-}{Identifiant}{Login}{-}
Vous avez sûrement remarqué que deux utilisateurs -- Ségolène et Nicolas ;-) -- ne voudront pas du même \RefGlossaire{Environnement graphique}{Personnalisation}{Thème}{thème} de bureau. De plus, la \AddIndex{Système}{Texte brut}{Fichier de configuration}{configuration} des logiciels -- contacts, messagerie, navigateur, etc. -- ainsi que des barres d'outils, par exemple, sera différente\ldots{} Et pourtant, tout ce beau monde se connecte sur le même système -- la démocratie -- et chacun retrouve les préférences qu'il avait paramétrées. Comment cela est-il possible ?\par
En fait, si vous affichez les fichiers cachés de votre dossier personnel -- cf. la section \ref{RefFichierCache} -- vous retrouverez énormément de dossiers cachés, avec comme nom, celui d'un logiciel que vous utilisez. Eh bien c'est là que sont stockées vos préférences. Notez également que s'y trouvent les préférences de session \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}. Par exemple, vous trouverez un dossier .evolution où sont enregistrés -- dans des fichiers de \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte brut}, le plus souvent -- vos paramètres de messagerie comme ceux du logiciel de messagerie Évolution. Quand Ségolène se connecte, ce logiciel va chercher ses paramètres personnels dans \Chemin{/home/segolene/.evolution/} alors que pour Nicolas, il les recherchera dans \Chemin{/home/nicolas/.evolution/}.\par
D'autres paramètres de \AddIndex{Système}{Texte brut}{Fichier de configuration}{configuration}, mais plus globaux eux, sont enregistrés dans le dossier \Chemin{/etc}. Ceux-ci sont communs à tous les utilisateurs\NotePage{Exemple, réduire la dette de l'État ;-)} --- par exemple, si un logiciel A a besoin d'un logiciel B pour fonctionner, il y enregistrera le chemin vers le logiciel B pour l'exécuter.\par
En somme, tout ceci signifie que si vous avez créé \Chemin{/home} sur une partition séparée, et que vous formatez \Chemin{/}, vous retrouverez lors d'une prochaine réinstallation, tous vos paramètres à l'identique, si vous gardez le même nom de compte bien entendu.
\section{Différences entre serveur graphique, environnement de bureau et gestionnaire de fenêtres}
\label{RefConnexionX}
Nous allons maintenant entrer dans la partie la plus intéressante d'Ubuntu, qui vous a peut être fait choisir ce système après avoir vu des captures d'écran : le \AddIndex{Système}{-}{Serveur graphique}{serveur graphique} ! Eh oui, sous GNU/Linux, la partie graphique est un serveur, qui se nomme X\NotePage{Rien à voir avec ce que vous auriez pu penser !}. Cela date des serveurs Unix, qui étaient constitués d'une grosse machine distribuant les programmes à des terminaux. Cette \AddIndex{Système}{Texte brut}{Fichier de configuration}{configuration} possède des avantages -- comme lancer des programmes sous le nom d'un autre utilisateur, y accéder depuis une autre machine\ldots{} -- mais introduit également une certaine lourdeur, heureusement invisible sur une machine moderne.\\
Sous Ubuntu, c'est le \AddIndex{Système}{-}{Serveur graphique}{serveur graphique} nommé Xorg qui va s'occuper de choisir la bonne résolution pour votre écran, contrôler la souris et l'affichage des programmes. Mais ce n'est pas lui qui s'occupe des bordures de fenêtre, des menus, des lanceurs : cette tâche est confiée au gestionnaire de fenêtres.\par
Un gestionnaire de fenêtre -- comme Metacity, Kwin, iceWM, Xfwm, \AddIndex{Environnement graphique}{-}{FluxBox}{fluxbox}\ldots{} -- est un programme qui contrôle l'apparence des fenêtres et apporte les moyens par lesquels l'utilisateur peut interagir avec elles. Celui-ci est très lié à l'environnement de bureau -- \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, \AddIndex{Environnement graphique}{-}{KDE}{KDE}, \AddIndex{Environnement graphique}{-}{Xfce}{Xfce}, \AddIndex{Environnement graphique}{-}{FluxBox}{FluxBox}, \AddIndex{Environnement graphique}{-}{E17}{E17}, \AddIndex{Environnement graphique}{-}{Window Maker}{Window Maker}\ldots{} -- qui apporte une interface plus complète au \RefGlossaire{Système}{OS}{Système d'exploitation}{système d'exploitation} ainsi qu'un ensemble d'utilitaires et d'applications intégrés. Et qu'est-ce qui différencie ces environnements de bureau ? La philosophie\NotePage{Et les librairies graphiques -- cf. partie \ref{RefLibGraphique} -- autour desquelles ils sont construits, la plupart du temps} !\par
\AddIndex{Environnement graphique}{KDE}{GNOME}{-}
\AddIndex{Environnement graphique}{Xfce}{FluxBox}{-}
\AddIndex{Environnement graphique}{Window Maker}{E17}{-}
\begin{description}
\item[GNOME] se veut «~simple d'utilisation~», c'est-à-dire qu'une application fait une seule chose, mais la fait bien. Les options paramétrables de chaque application restent limitées afin de ne pas noyer l'utilisateur dans des réglages dont il n'aurait jamais à se soucier.
\item[KDE] se veut plus «~complet(-xe)\NotePage{Oui, c'est un \RefGlossaire{Jargon}{-}{Troll}{troll}, j'assume}~». L'application qui peut graver vos données est tout aussi capable de lire vos vidéos et musiques ainsi que de redimensionner vos images. De plus, les applications sont beaucoup plus paramétrables par le biais des menus d'options, même si vous n'aurez certainement jamais à toucher la plupart de celles-ci\NotePage{Encore un autre, je me lâche, c'est la fin du livre :-)} !
\item[Xfce,] lui, se veut plus léger et peut tourner sur des configurations modestes comparées aux deux mastodontes précédents. 
\item [FluxBox] vise la même cible, en étant plus léger encore.
\item[Window Maker] est plus pour les personnes voulant vraiment tout paramétrer sur leur bureau. Il permet de vraiment avoir exactement la présentation désirée, mais au prix de beaucoup de temps passé à la configurer.
\end{description}
Vous pouvez voir dans la collection d'images \ref{ImgEnvironnementsBureau} un exemple pour chacun de ces environnements.\par
\EnvironnementsBureau
Il existe des dizaines d'environnements de bureaux, et deux proposent même un environnement de bureau complet -- c'est-à-dire des applications spécifiquement à destination de cet environnement avec une philosophie, des interactions et une présentation homogène -- comme \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}\NotePage{L'autre est \AddIndex{Environnement graphique}{-}{KDE}{KDE}}, interface par défaut d'Ubuntu. Le choix de l'une ou l'autre des interfaces graphiques disponibles dépend uniquement de vos goûts personnels. En effet, dès le système installé, vous pourrez utiliser les mêmes logiciels\NotePage{Au prix de l'installation de librairies graphique supplémentaires si vous voulez utiliser un programme fait pour un autre environnement de bureau}.\\
Vous pourrez également changer par la suite d'environnement graphique et en avoir plusieurs installés simultanément. C'est la liberté de choix ! À l'écran de connexion, vous pourrez choisir votre environnement de bureau. Et tout cela repose, une fois encore, sur le \AddIndex{Système}{-}{Serveur graphique}{serveur X}\NotePage{X11 en réalité car c'est la 11ème version du \AddIndex{Système}{-}{Serveur graphique}{serveur X}, et ce, depuis de très nombreuses années} -- Xorg sur Ubuntu -- qui se charge de l'affichage. Au démarrage de votre interface graphique, Xorg démarre -- et le curseur en forme de roue qui tourne apparaît -- en lisant la configuration qui se trouve dans le fichier \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte brut} \Chemin{/etc/X11/xorg.conf}, puis GDM\NotePage{GNOME Display Manager} qui vous permet de choisir l'utilisateur et l'interface à utiliser. Vous pouvez alors choisir entre plusieurs environnements, si vous les avez installés sur votre machine. Enfin, l'environnement de bureau sélectionné se lance --- \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, par exemple.\par
Pour faire votre choix d'environnement graphique, vous pouvez consulter les sites web de chacun des environnements cités ci-dessous :
\AddIndex{Environnement graphique}{KDE}{GNOME}{-}
\AddIndex{Environnement graphique}{Xfce}{FluxBox}{-}
\AddIndex{Environnement graphique}{Window Maker}{E17}{-}
\begin{description}
\item[GNOME] : \url{http://www.gnomefr.org}
\item[KDE] : \url{http://fr.kde.org}
\item[Xfce] : \url{http://www.xfce.org/}
\item[FluxBox] : \url{http://fluxbox.sourceforge.net}
\item[E17] : \url{http://www.enlightenment.org}
\item[Window Maker] : \url{http://www.windowmaker.info}
\end{description}
\begin{attention}
Ce livre, comme vous avez pu le constater, ne s'applique qu'à \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, mais une fois que vous maîtriserez cet environnement, vous n'aurez aucun mal à en changer.
\end{attention}
\section{Quelles différences entre Ubuntu / Kubuntu / Edubuntu / Xubuntu ?}
Ceci est directement relié à la notion précédente d'environnement de bureau. Ubuntu propose par défaut l'environnement graphique \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, Kubuntu propose quant à lui \AddIndex{Environnement graphique}{-}{KDE}{KDE}, Xubuntu propose l'environnement \AddIndex{Environnement graphique}{-}{Xfce}{Xfce}. Edubuntu, lui, propose l'environnement \AddIndex{Environnement graphique}{-}{GNOME}{GNOME} agrémenté d'une sélection de logiciels dédiés au monde de l'éducation. Il ne faut pas oublier non plus Ubuntu Studio, s'appuyant également sur \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, mais orienté vers la création professionnelle audio, vidéo et graphique, et optimisé avec un noyau temps réel.\par
Attention, seules les distributions Ubuntu, Kubuntu et Ubuntu Netbook Edition sont officiellement supportées par Canonical. Xubuntu est le résultat d'un travail purement bénévole et communautaire mais reste très lié à Canonical, tout comme Edubuntu, Ubuntu Studio. Grâce au succès de Ubuntu, de nombreux dérivés existent -- logique, puisque le code source est accessible et réutilisable par qui le souhaite -- ce qui peut donner des distributions orientées vers des utilisations très spécialisées comme Ubuntu Christian Edition et son adversaire : Ubuntu Satanic Edition\ldots{} Néanmoins, ces autres dérivées de la distribution Ubuntu sont plus éloignées de la fondation mère, ce qui ne garantit pas un aussi bon suivi que pour les autres distributions. De plus, elles sont plus ou moins évoluées --- Ubuntu Satanic Edition, contrairement à Ubuntu Christian Edition, est tout simplement Ubuntu avec un papier peint et un \RefGlossaire{Environnement graphique}{Personnalisation}{Thème}{thème} différents. Vous pouvez consulter les sites de ces distributions dérivées, il en existe évidemment beaucoup d'autres. Voici les adresses des distributions officielles ou, comme indiqué précédemment, très proches de la communauté Ubuntu :
\begin{description}
\item [Ubuntu] : \url{http://www.ubuntu.com}.\\Communauté française : \url{http://www.ubuntu-fr.org}.
\item [Kubuntu] : \url{http://www.kubuntu.com}.\\Communauté française : \url{http://www.kubuntu-fr.org}\NotePage{Site lié à Ubuntu-fr}. 
\item [Ubuntu Netbook Edition] : \url{http://www.canonical.com/projects/ubuntu/unr}
\item [Xubuntu] : \url{http://www.xubuntu.com}
\item [Edubuntu] : \url{http://www.edubuntu.com}
\item [Ubuntu Studio] : \url{http://ubuntustudio.com}
\end{description}
\section{GTK, Qt, les bibliothèques, c'est quoi ?}
\label{RefLibGraphique}
Pour programmer, les codeurs utilisent des bibliothèques, qui sont en quelque sorte des bouts de programmes tout prêts, ce qui évite par exemple de programmer un sélecteur de fichier à chaque fois. C'est grâce à ce système que vous retrouvez toujours les mêmes formes de boutons, par exemple. Les bibliothèques les plus importantes sont GTK et Qt, utilisées respectivement par \AddIndex{Environnement graphique}{-}{GNOME}{GNOME} et \AddIndex{Environnement graphique}{-}{KDE}{KDE}. Les bibliothèques ont un peu la fonction des DLL de Windows. \par
Lorsque vous installez un programme, il aura besoin de certaines bibliothèques pour fonctionner. Rassurez vous, les bibliothèques s'installent toutes seules lorsque vous sélectionnez un programme dans Synaptic. Et pas de prolifération de différentes versions comme sous Windows, Ubuntu se charge de coordonner tout ce petit monde sans même que vous ayez à y réfléchir\NotePage{Qui a dit ouf ?} !\\
Cette magie s'opère grâce à un outil Debian appelé APT. Synaptic et le programme «~Logithèque Ubuntu~» ne sont que des interfaces graphiques s'appuyant sur \Commande{apt}. Les sources de logiciels -- vous vous souvenez, les adresses web où l'on va chercher les logiciels -- sont listées dans le fichier \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte brut} \Chemin{/etc/apt/sources.list}.\par
Ce système de bibliothèques partagées permet de lancer un programme \AddIndex{Environnement graphique}{-}{KDE}{KDE} dans \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, et inversement, ou d'utiliser un programme \AddIndex{Environnement graphique}{-}{GNOME}{GNOME} dans un autre environnement comme \AddIndex{Environnement graphique}{-}{Xfce}{Xfce}. Cependant, à l'installation d'un seul logiciel \AddIndex{Environnement graphique}{-}{KDE}{KDE}, par exemple, dans \AddIndex{Environnement graphique}{-}{GNOME}{GNOME}, vous installez la quasi-totalité des bibliothèques \AddIndex{Environnement graphique}{-}{KDE}{KDE}, d'une taille de 150 Mio, environ, avec la traduction ! C'est la raison pour laquelle je vous signale à chaque fois, dans le chapitre \ref{RefChapLogiciel} concernant les logiciels si le programme est orienté \AddIndex{Environnement graphique}{-}{KDE}{KDE}. Notez que l'inverse est également vrai --- installation d'une application \AddIndex{Environnement graphique}{-}{GNOME}{GNOME} dans \AddIndex{Environnement graphique}{-}{KDE}{KDE}.
\section{Compléments sur les utilisateurs et les droits}
\AddIndex{-}{Identifiant}{Login}{-}
Nous avons vu que, historiquement, les systèmes Unix étaient de grosses machines pour plusieurs utilisateurs. GNU/Linux a gardé cette architecture, ce qui le dote d'une gestion des droits et des utilisateurs très avancée.\par
Nous avons déjà souligné plusieurs fois que chaque utilisateur possède sa petite maison, protégée par son mot de passe, où il peut faire ce qu'il veut : ce dossier \Chemin{/home/NomUtilisateur}.\\
Par défaut, vous n'êtes pas administrateur de la machine, c'est le fameux root qui a ce privilège. Ubuntu a la particularité d'avoir le compte root désactivé. C'est le premier utilisateur créé sur le système qui a accès aux droits d'administrateur avec son propre mot de passe et la commande \Commande{sudo}.\par
Comme la philosophie de GNU/Linux est «~tout est fichier~», les fichiers doivent être bien gardés entre utilisateurs pour éviter les bêtises.\\
Un fichier ou un dossier peut donc avoir une combinaison de 3 droits : lecture, écriture et exécution. Il porte aussi le nom de son propriétaire et de son groupe de propriétaires. Voyons un fichier avec la commande \Commande{ls -l} -- -l comme long -- qui permet de lister le dossier courant avec un maximum d'informations. Notez que ces informations se retrouvent bien évidemment en mode graphique avec le navigateur de fichier Nautilus :
\Code{-rwxr-xr-- 1 proprio groupe1 20325 2006-11-12 11:21 Coucou}
Nous avons toutes les informations sur le fichier :
\begin{itemize}
\item Le premier tiret de la ligne indique que c'est un fichier. S'il s'agit d'un dossier, le tiret est remplacé par la lettre d et dans le cas d'un lien -- sorte de raccourci -- par la lettre l.
\item Ensuite il y a trois groupements de trois caractères (rwx, r-x, r--) : ce sont les groupements de permission :
\begin{itemize}
\item r (readable) signifie que l'on peut lire le fichier ou lire le contenu d'un dossier.
\item w (writeable) que l'on peut modifier le fichier ou créer / modifier les permissions ou supprimer des fichiers d'un dossier.
\item x (executable) que l'on peut exécuter le fichier ou naviguer dans le dossier (double-clic dans Nautilus).\\
Le premier groupement correspond aux droits du propriétaire (user), le second aux droits du groupe propriétaire (group) et le troisième aux autres (others).\\
Si une lettre est placée, alors l'utilisateur concerné a le droit accordé. Si, à contrario, celle-ci est absente, alors il n'a pas accès au droit concerné.
\end{itemize}
\item Nous avons après le nom du propriétaire du fichier, le groupe auquel appartient le fichier, puis la taille, la date/heure de dernière modification et enfin le nom du fichier lui-même. 
\end{itemize}
Dans notre exemple, le fichier -- premier caractère - -- nommé Coucou est pour l'utilisateur proprio accessible en lecture, écriture et exécution (rwx). Pour les membres du groupe «~groupe1~», celui-ci est accessible seulement en lecture et en exécution (r-x), donc la modification du fichier leur est interdite. Enfin, les autres peuvent y avoir accès en lecture seule (r--). Tout est clair ?\par
GNU/Linux a donc une gestion des droits évoluée et simple à mettre en place. Notons surtout la particularité du droit d'exécution, qui indique si l'on a affaire à un programme ou un script. Ce droit est très pratique car il évite, par exemple, que vous exécutiez vos virus mail en pièces jointes, car ceux-ci n'ont pas le droit d'être utilisés comme programme et sont considérés comme des données.\par
Le système de droits permet une grande modularité dans l'accès à vos données si vous êtes plusieurs à utiliser l'ordinateur.
\begin{nota}
Dans la pratique, pas d'affolement, Ubuntu donne les bons droits à chaque fichier ! Vous n'aurez donc pas à vous en occuper ! Si, dans le cas contraire, vous voulez vous en mêler, la fenêtre «~Propriétés~» accessible par un clic-droit sur un fichier ou sur un dossier permet de les modifier, si vous êtes propriétaire de ceux-ci. De plus, l'application «~Utilisateurs et groupes~» vous permet d'ajouter des utilisateurs, des groupes et de gérer leurs droits facilement. 
\end{nota}
\section{Un shell, ça console ?}
La partie qui fâche. La \RefGlossaire{-}{Terminal}{Console}{console}, le fameux «~Ah ouais ! Mais Linux c'est en mode texte ?~».\par
Je pense que vous avez déjà compris au travers de ce livre que celle-ci n'est absolument pas obligatoire pour une utilisation quotidienne. Cependant, comme je l'ai déjà souligné précédemment, la \RefGlossaire{-}{Terminal}{Console}{console} permet de faire des actions sur son système beaucoup plus rapidement.\\
Vous trouverez la plupart du temps sur l'\RefGlossaire{-}{L'Internet}{Internet}{Internet} des lignes de commande, car c'est souvent plus simple que d'expliquer la même manipulation via une interface graphique, et beaucoup plus sûr, car on a confirmation du bon fonctionnement des commandes, donc une source d'erreur moindre.\\
La \RefGlossaire{-}{Terminal}{Console}{console} vous servira également à configurer plus finement certains paramètres de votre système et de vos applications ; bref elle seule vous permet d'accéder à tous les secrets en tant qu'administrateur\NotePage{Cette fois, je dis, «~attention aux expérimentations douteuses !~»} --- par la commande \Commande{sudo} si vous vous souvenez du premier chapitre de ce livre ! Mais faites attention car cela pourrait vous amener à casser votre système.\\
Comme je l'ai indiqué à de nombreuses reprises, tous les paramétrages et préférences sont stockés dans des fichiers de \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte brut}. C'est-à-dire qu'avec un simple éditeur de texte, il est possible, lorsque l'on connaît la syntaxe du fichier, de modifier ceux-ci. Cela est bien plus rapide d'effectuer ces changements par ligne de commande\NotePage{Oui oui, il y a des éditeurs de texte en ligne de commande} que de le faire de manière graphique, et c'est logiquement cette manière de faire qui est préférée lorsqu'on en a l'habitude.\\
De plus, un grand nombre d'actions plus ou moins complexes peuvent s'exécuter à partir de scripts\NotePage{Suite de lignes de commandes contenues dans un fichier \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte} écrites dans un langage très simple à comprendre} : par exemple, sauvegarde automatique de votre système, tri dans les dossiers par mots clefs, etc. Tout ceci est éditable en ligne de commande parce que ces fichiers sont écrits en \RefGlossaire{Système}{Fichier de configuration}{Texte brut}{texte brut}. On peut y effectuer très simplement des actions très puissantes.\par
La \RefGlossaire{-}{Terminal}{Console}{console} ressemble à une fenêtre MS-DOS, mais ne vous y trompez pas, elle est bien plus performante. Dans celle-ci, s'exécute un programme, appelé shell\NotePage{Donc un terminal/une console, n'est pas équivalent au shell. L'un est le conteneur et l'autre, le contenu} -- bash la plupart du temps, mais il en existe d'autres comme zsh, csh, ksh, dash… -- qui vous permettra d'entrer des commandes. Vous pouvez lancer des programmes en tapant leur nom, bien utile quand il y a une erreur car celle-ci sera indiquée dans la \RefGlossaire{-}{Terminal}{Console}{console}.\par
Un \RefGlossaire{-}{Terminal}{Terminal}{terminal}, lui, est une application qui permet d'ouvrir une console. Le \RefGlossaire{-}{Terminal}{Terminal}{terminal} par défaut d'Ubuntu se nomme gnome-terminal et exécute bash qui propose la complétion automatique, c'est-à-dire qu'avec la touche \Touche{TAB}\NotePage{Tabulation}, vous pouvez compléter ce que vous tapez, très utile pour naviguer dans l'arborescence. On peut même améliorer celle-ci, cf. section \ref{RefAmelioTerminal}.\par
Vous pouvez trouver sur la documentation du site Ubuntu-fr une bonne introduction à l'utilisation de la ligne de commande --- du plus simple au plus complexe :
\begin{itemize}
\item \url{http://doc.ubuntu-fr.org/tutoriel/learn_unix_in_10_minutes}
\item \url{http://doc.ubuntu-fr.org/tutoriel/console_commandes_de_base}
\item \url{http://doc.ubuntu-fr.org/tutoriel/console_ligne_de_commande}
\end{itemize}
N'hésitez pas également à lire un excellent framabook de \Personne{Vincent}{Lozano} qui vous aidra à aller plus loin sur ce sujet intitulé «~Tout ce que vous avez toujours voulu savoir sur UNIX sans jamais oser le demander~».  
\section{Les run levels}
\subsection{Signification}
Le run level, ou niveau de fonctionnement, est une fonction utilisée par le système d'init -- système V -- notamment lors du démarrage de votre système.\par
Il existe différents run levels, qui correspondent chacun à un ensemble d'applications et de \RefGlossaire{Système}{Démon}{Service}{services} à mettre en marche et à arrêter. Ainsi, quand le système est démarré, il passe par le run level 1 puis par le run level 2, et il est possible de configurer les applications et \RefGlossaire{Système}{Service}{Démon}{démons}\NotePage{Surtout ceux de minuit\dots{}} qui seront lancés ou arrêtés à ce moment. Il existe en tout six run levels. Sous Ubuntu\NotePage{Cela est différent pour d'autres distributions comme Mandriva et Red Hat}, les run levels se répartissent ainsi -- à quelques différences près  :
\begin{description}
\item[S] : Runlevel d'initialisation minimale de tous les runlevels (vérification de l'intégrité des systèmes de fichiers par exemple) 
\item[0] : Arrêt 
\item[1] : Mode mono-utilisateur 
\item[2] : Mode multi-utilisateurs avec \AddIndex{Système}{-}{Serveur graphique}{serveur graphique}
\item[3] : Mode multi-utilisateurs avec \AddIndex{Système}{-}{Serveur graphique}{serveur graphique} 
\item[4] : Mode multi-utilisateurs avec \AddIndex{Système}{-}{Serveur graphique}{serveur graphique}
\item[5] : Mode multi-utilisateurs avec \AddIndex{Système}{-}{Serveur graphique}{serveur graphique}
\item[6] : Redémarrage 
\end{description}
Les run levels 0, 1 et 6 sont plus ou moins standardisés et communs à tous les systèmes appliquant le système V. Lorsque vous démarrez votre système en «~Safe-Mode~» -- deuxième ligne de Grub -- vous lancez en fait le runlevel S. Lors d'un démarrage «~normal~», vous passez les niveaux S, puis 2 lorsque GDM se lance. Notons qu'il n'y a pas de hiérarchie ni de chronologie dans les run levels : il n'est pas nécessaire de passer par 3 pour aller de 2 à 5, par exemple --- sur Ubuntu et Debian, 2, 3, 4, 5 sont identiques alors que ce n'est pas le cas sur d'autres distributions auxquelles uniquement le runlevel 5 correspond au niveau graphique.\\
Les niveaux utilisés pour un fonctionnement continu de la machine -- excluant donc ceux permettant de la redémarrer ou de l'arrêter -- vont donc de un à cinq, et il est possible de passer de l'un à l'autre. Pour cela, une simple commande telle \Commande{sudo init 3} fonctionne, mais faites attention à bien avoir enregistré vos données, car aucune confirmation n'est demandée !\par
Par défaut, sur la plupart des systèmes issus de Debian comme Ubuntu, le runlevel par défaut est le runlevel 2 lorsque l'interface graphique est lancée. Notez qu'upstart est en train de remplacer système V et introduit de nouvelles notions que nous n'étudierons pas ici.
\subsection{Les scripts}
C'est bien beau tout cela, mais à quoi cela sert ?\par
Tous les \RefGlossaire{Système}{Démon}{Service}{services} et applications qui doivent être démarrés ou arrêtés lors d'un passage d'un run level à un autre le sont à partir de scripts. Ceux-ci sont regroupés dans le dossier \Chemin{/etc/init.d/}. Ces scripts reçoivent un paramètre qui peut être start, stop, restart, etc.\\
Ils ont généralement la structure suivante :\par
\Code{\#!/bin/sh\\
case \$1 in\\
start) \ldots{}\\
  \ldots{}.\# commandes pour démarrer le service\\
;;\\
stop)\\
  \ldots{}.\# commandes pour arrêter le service\\
;;\\
restart) \# commandes pour redémarrer le service par arrêt et redémarrage !\\
  \$0 stop\\
  sleep 1\\
  \$0 start\\
;;\\
esac}
À chaque niveau correspond un dossier -- typiquement \Chemin{/etc/rc.d/rc2.d} pour le niveau 2 -- contenant des liens symboliques -- en quelque sorte, des raccourcis -- vers les fichiers scripts de \Chemin{/etc/init.d/}. Ces liens symboliques portent des noms commençant par la lettre S ou K, suivie d'un numéro de deux chiffres.\par
Voici ce qui se passe lors d'un changement de run level dans le cas, par exemple, d'un passage du niveau 5 au niveau 3 par la commande \Commande{init 3}~:\par
\begin{itemize}
\item Les scripts dont le nom commence par un K situés dans le dossier correspondant au niveau de fonctionnement courant -- ici 5 -- sont lancés dans l'ordre décroissant des numéros avec le paramètre stop, ce qui a normalement pour effet d'arrêter le \RefGlossaire{Système}{Démon}{Service}{service} correspondant. 
\item Les scripts du nouveau niveau -- ici 3 -- qui commencent par S sont activés -- dans l'ordre croissant des numéros -- avec le paramètre start. 
\end{itemize}
Nous comprenons donc maintenant que les numéros correspondent à une priorité permettant de démarrer un \RefGlossaire{Système}{Démon}{Service}{service} avant un autre --- par exemple, il est préférable de démarrer Xorg avant GDM\ldots{}\par
Maintenant, si vous êtes curieux, vous pouvez aller voir quels \RefGlossaire{Système}{Démon}{Service}{services} sont démarrés à quel niveau de fonctionnement sur votre ordinateur -- clic-droit sur un \RefGlossaire{Système}{Démon}{Service}{service}, puis propriétés -- et désactiver ceux qui ne vous sont pas nécessaires\NotePage{Attention tout de même, vous devez savoir ce que vous faites !} : par exemple, le gestionnaire d'imprimante HP si vous n'avez pas d'imprimante de cette marque. Pour s'adonner à ces optimisations, une seule direction : Système \FlecheDroite Administration \FlecheDroite Services.
