Artisan Numérique

/système/démarrage/xinitrc/xorg/ Bureau Minimaliste - démarrage de session

Dans l'idée de construire un bureau minimal et efficace, la première victime est le gestionnaire de session. En effet, ce dernier n'apporte pas grand chose de bien utile si ce n'est s'authentifier, ce que permet déjà une console GNU/Linux de base, lancer la session graphique, ce que l'on peut faire avec un simple startx et maintenir cette session active jusqu'à la déconnexion, ce que nous allons apprendre à faire grâce au script ~/.xinitrc.

Script de base

~/.xinitrc est un script lu par la commande startx une fois que l'environnement graphique est chargé. Sa particularité est qu'il ne se termine pas immédiatement. Il doit rester actif tout au long de la session. S'il s'arrête, c'est la session graphique qui va elle aussi être stoppée pour retomber en console.

Une version simpliste de ce script consiste par exemple à lancer un terminal initial, généralement xterm. Ainsi, au lancement de la session, nous disposons d'une console permettant de lancer d'autres applications. Pour fermer la session il suffit donc de fermer la console initiale.

#! /bin/bash

# console initiale
xterm
~/.xinitrc minimaliste

Pour tester cela, vous devez arrêter votre gestionnaire de session (/etc/xinit.rc/gdm stop), vous authentifier dans une console, et enfin lancer la session graphique par la commande startx. Quasi instantanément vous devrez voir apparaître xterm mais sans décoration de fenêtres, ouch...

En effet, par défaut, X ne décore car c'est le rôle d'un gestionnaire de fenêtres comme metacity. Si ce dernier est installé sur votre machine, vous pouvez donc modifier votre script pour régler ce problème.

#! /bin/bash

# lancement du gestionnaire de fenêtres
metacity&

# console initiale
xterm
~/.xinitrc avec décoration

Metacity est lancé en arrière de plan, suivi par xterm. Maintenant au prochain startx, la console devrait être décorée.

Lancement de l'artillerie

Maintenant, il nous faut lancer l'artillerie moderne pour que tout fonctionne proprement. Cela comprend bien évidement DBUS, mais aussi une session ConsoleKit dont le rôle est de fournir aux applications des informations utiles sur les différentes sessions. Cette brique est notamment utile à PolicyKit en charge de la gestion des autorisations par exemple sur les périphériques de stockages amovibles.

Pour lancer ConsoleKit et DBUS dans la même foulée, nous allons utiliser la commande ck-launch-session

#! /bin/bash

# Lancement groupé de dbus, metacity et xterm dans une session ConsoleKit
exec ck-launch-session dbus-launch metacity xterm & xtermpid=$!

# et on attends la mort de xterm
wait $wmpid
~/.xinitrc en mode artillerie

ck-launch-session va ainsi permettre de lancer une série de commandes. On récupère ici l'identifiant du processus de la dernière lancée (xterm) et on va sagement attendre sa mort.

Session complète

A ce stade, nous disposons d'un environnement complet. Il est bien évidement possible d'aller beaucoup plus loin, par exemple en lançant des applications par défaut, ou encore en opérant certains paramétrages

#! /bin/bash

# Lancement groupé de dbus, metacity et xterm dans une session ConsoleKit
exec ck-launch-session dbus-launch metacity xterm & xtermpid=$!

# chargement d'un fond d'écran (pour ceux qui aiment ça...)
feh --bg-center mon_beau_papier_peint&

# activation du pavé numérique
numlockx on&

# chargement d'un gestionnaire de presse papiers
parcellite&

# lancement de mutt
mutt &

# lancement d'IRSSI
irssi &

# et on attends la mort de xterm
wait $wmpid
~/.xinitrc minimaliste

Synchronisation sur le gestionnaire de fenêtres

Après c'est à votre imagination et à vos besoins. Vous pouvez ainsi lancer un panel, une synchronisation avec unison, ou encore vous débarrasser de xterm. Mais pour cela il nous faut un gestionnaire de fenêtre plus costaud que Metacity qui qui propose notamment la possibilité de le quitter. Personnellement j'utilise WMFS (il n'est pas dans les dépôts Debian mais se compile très facilement). Du coup, c'est maintenant lui qu'il va falloir attendre :

#! /bin/bash

# Lancement groupé de dbus, metacity et xterm dans une session ConsoleKit
exec ck-launch-session dbus-launch metacity wmfs & wmfspid=$!

# chargement d'un fond d'écran (pour ceux qui aiment ça...)
feh --bg-center mon_beau_papier_peint&

# activation du pavé numérique
numlockx on&

# Synchronisation de la sélection primaire et du presse papier
autocutsel -selection CLIPBOARD -fork
autocutsel -selection PRIMARY -fork

# lancement de mutt
mutt &

# lancement d'IRSSI
irssi &

# et on attends la mort de xterm
wait $wmfspid
~/.xinitrc minimaliste

Maintenant notre session est parfaite et il suffit de quitter WMFS pour en sortir. Si vous souhaitez cependant expérimenter avec Metacity, il est aussi possible d'attendre le processus d'un Panel comme fbpanel pour arriver au même résultat.

Sécurité

Comme me le faisait remarquer très justement Yann Meow (cf commentaires), lancer X en mode console peut présenter un risque de piratage de votre session. Un vilain peu en effet repasser en console via CTRL-ALT-F1 et arrêterait X pour avoir ainsi accès à votre compte. Ce type de problématique n'a évidemment pas de sens si vous travaillez seul chez vous (ce qui est mon cas) mais devient important dans un environnement "hostile" comme un bureau à la pause clope. Ne rigolez pas, je connais des clients qui se sont retrouvés ainsi à insulter de tiers personnes à leur insu...

Pour y remédier, il suffit de verrouiller la console virtuelle après avoir lancé X. L'utilitaire vlock (apt-get install vlock) est justement conçu pour cet usage. Une fois installé, il vous suffit donc de lancer X de la manière suivante :

gastonstartx & vlock
Lancement sécurisé de X

De cette manière X se lance en tâche de fond et donne directement la main à vlock qui va verrouiller la console.

Pour compléter le dispositif, il est évidement nécessaire de verrouiller aussi votre session X, ce qui se fait cette fois par la commande i3lock -d (paquet i3more) ou encore slock (paquet slock).

Conclusion

Voilà, premier petit pas vers un bureau minimaliste réalisé. Prochaine étape, une console qui tienne la route et paramétrée aux petits oignons. Il s'agira bien évidemment d'urxvt.