C'est quoi, "compiz standalone" ?

Pour utiliser un bureau graphique sous linux, il existe 2 approches :

  • Soit on utilise un simple gestionnaire de fenêtre, qui ne s'occupera que d'afficher les fenêtres, les déplacer, les fermer, les minimiser, ... et d'autres options plus ou moins nombreuses selon le degré de perfectionnement du gestionnaire en question. Il en existe de nombreux sous linux. On pourra citer twm, kwm, metacity, fluxbox, Ion, Sawfish, ... et Compiz.
  • Soit on utilise un environnement de bureau complet tel que Gnome, KDE ou XFCE. Ces environnement contiennent un gestionnaire de fenêtre, ainsi que toute une ribambelle de service, facilité d'accès, ... qui permettent de lancer facilement des applications. Par exemple, on trouvera dans tous ces environnements une barre des tâches, un système de lanceurs (raccourcis dans la barre des tâches ou sur le bureau), un menu, une zone de notifications, une gestion personnalisée des raccourcis clavier, et plein d'autres.

Évidemment, étant sous linux, vous vous attendez à ce qu'on soit libre de faire ce qu'on veut, même ce qui n'est pas prévu. Et on peut panacher et choisir un environnement de bureau, mais utiliser un autre gestionnaire de fenêtre que celui prévu par l'environnement. Par exemple, il n'est pas rare de voir des systèmes tournant sous gnome et ayant compiz comme gestionnaire de fenêtre, afin de profiter des effets graphiques que l'on sait.

Compiz standalone, pour revenir à nos moutons, consiste à n'utiliser qu'un gestionnaire de fenêtre, Compiz en l'occurence, et utiliser ses options pour lancer les applications, ou utiliser d'autres programmes pour gérer ces applications. Mais pourquoi se casser la tête me direz-vous, puisque gnome ou KDE le font très bien tous seuls ? Pour avoir un système très personnalisé et plus léger. Et aussi, parce que c'est fun !

Comment on fait ?

Je partirai du principe que vous avez une installation de X fonctionnelle et des pilotes de carte graphique compatibles avec Compiz. Pour répondre à cette question, je vous laisse chercher dans la doc de votre distribution.

Une fois ceci fait, il faut installer et configurer compiz. Là encore, je vous renvoie à la doc de votre distribution. Au passage, on utilisera le logiciel fusion-icon pour gérer compiz, pensez donc à l'installer aussi. Maintenant qu'on est prêts, passons aux choses sérieuses.

Le script qui fait tout

Pour cela, il y'a plusieurs méthodes, mais toutes passe par la création d'un script qui se lancera en début de session et restera actif jusqu'à la fin de celle-ci. C'est d'ailleurs même plus fin que ça, puisque c'est ce script là qui gérera la session, et c'est en y mettant fin que vous arrêterez la session. Voici le script de base :

#! /bin/bash
exec fusion-icon

Appelons-le start-compiz.sh, donnons lui les droits d'exécution (chmod +x start-compiz.sh), et déplaçons le à la racine du répertoire utilisateur. Ce petit script, même si court, demande un peu d'explication. Au démarrage de la session, ce script sera lancé (par une méthode que l'on verra ensuite), et exécutera donc la commande exec fusion-icon. Le exec fait que tant que fusion-icon tourne, le script ne s'arrête pas et ne rend pas la main. Ainsi, lorsqu'on quittera fusion-icon, X s'arrêtera et on retombera suivant les cas sur le gestionnaire de connexion (GDM ou KDM, ou autres) ou en mode console.

Dans ce script, on peut rajouter plein de choses que l'on souhaite démarrer en même temps que la session. Voici donc mon script à moi :

#!/bin/bash
exec fusion-icon & 
sleep 7
amixer set Beep mute & #Virer le beep pénible
amixer set Headphone 80% & #Son pas à 0
tint2 &
gnome-settings-daemon &
gnome-terminal --window-with-profile=terminal-desktop --geometry "120x45+266+50" &
sleep 2 && conky &
wicd-client &
/home/gholyocompiz/Utils/Scripts/QuitStatus/quitstatus.py

Là encore plusieurs explications s'imposent. Tout d'abord, je lance fusion-icon comme tout à l'heure, qui lui-même va lancer le gestionnaire de fenêtre compiz, comme souhaité. Ensuite, j'attend quelques temps pour que compiz soit démarré, certaines applications suivantes en ont besoin. Il y a certainement moyen d'améliorer ça, et si une âme charitable de passage pouvait m'indiquer comment faire pour attendre que compiz soit finie de chargé, ça me ferait bien plaisir ! Ensuite, je fais quelques réglages de son, puis je lance tint2, qui est une barre des tâches très légère et bien jolie, gnome-settings-daemon pour gérer l'affichage des applications gtk, un terminal, conky, wicd pour la connexion internet et une application de mon crû, qui permet d'avoir un bouton pour se déconnecter, quitter la session, arrêter ou redémarrer l'ordinateur. Toutes les lignes ou presque ont un & (une éperluette) à la fin de la ligne. Ceci indique que le script doit les lancer en tâche de fond, et lancer la ligne suivante sans attendre. Toutes sauf la dernière (et le sleep, on comprend bien pourquoi). En effet, c'est mon programme qui va dire quand se termine la session, puisque s'il se termine, le script se termine aussi, et donc la session toute entière. Je donnerai plus de détails sur ce petit programme toute à l'heure.

Lancer le script start-compiz.sh

Comme je le disais, 2 manières :

  • Soit vous avez un gestionnaire de connexion (GDM, KDM, Slim, ...), auquel cas, il faut créer une session dans ces gestionnaires. Pour ce faire, il faut créer un fichier compiz.desktop dans le dossier /usr/share/xsessions/. Ce fichier contiendra :
[Desktop Entry]
Encoding=UTF-8
# This is the name you'll see for the session in gdm
Name=Compiz Fusion
# This is the comment
Comment=Compiz Fusion Standalone
# The command
Exec=/usr/local/bin/start-compiz.sh
Type=Application

Et vous aurez pris soin de mettre le script start-compiz.sh dans /usr/local/bin/. Vous aurez maintenant lors de la connexion une entrée appelée Compiz Fusion dans le menu session du gestionnaire de connexion.

  • Soit vous n'utilisez pas de gestionnaire de connexion graphique, auquel cas il faut démarrer la session en même temps que X. Pour cela, il suffit de modifier ou créer le fichier .xinitrc dans le répertoire utilisateur :
#! /bin/bash
exec ck-launch-session /home/aurelcompiz/start-compiz.sh

Quand on lancera X avec startx, il liera ce fichier et lancera le script en question.

Lancer la session au démarrage de l'ordinateur

On peut vouloir démarrer directement en session utilisateur graphique (c'est pas bien pour la sécurité, mais bon). Pour ça, soit on utilise un gestionnaire de connexion, et il faut aller se plonger dans les paramètres de ce gestionnaire, soit on fait comme moi, à la main !

En fait, il suffit de dire au système de booter sur X en se connectant automatiquement à l'utilisateur choisi. Ça se passe dans le fichier /etc/inittab. Commençons par lui dire de booter sur X : pour cela, il suffit de dé-commenter (enlever le # en début de ligne) la ligne id:5:initdefault: et de commenter celle avec un 3 à la place du 5. Cela signifie juste que l'on choisi d'arriver en runlevel 5 au lieu de 3, le runlevel 5 étant réservé pour X. Ce fichier étant assez bien documenté, je vous recommande de lire les commentaires si vous ne comprenez pas ce que je raconte !

Ensuite, il faut se connecter. Pour cela, on va regarder les dernières lignes de ce fichier, qui doivent ressembler à ça :

x:5:respawn:/usr/bin/xdm -nodaemon

Cette ligne signifie que chaque fois (à cause du respawn) que X est arrêté, le programme xdm -nodaemon est lancé. XDM est un gestionnaire de connexion comme GDM ou KDM. Nous ne voulaons pas de ça, et nous allons commenter ces lignes, si ce n'est déjà fait. Et nous allons créer la notre :

x:5:once:/bin/su gholyocompiz -l -c "/bin/bash --login -c /usr/bin/startx >/dev/null 2>&1"

Ouais c'est un poil plus compliqué ! D'abord, il faut bien sur remplacer mon nom d'utilisateur par le votre... Ensuite, étudions cette commande. Au début, il y'a once au lieu de respawn, ce qui veut dire que X ne se relancera pas tout seul si on vient à le tuer. Ensuite, la commande lancée est une commande changement d'utilisateur (su) et c'est elle qui nous fait nous connecter à l'utilisateur choisi. Une fois ceci fait la commande de lancement de X est lancée. Tout est bien comme prévu donc !

C'est un peu noir tout ça non ?

Et oui, quand vous démarrez la première fois sur compiz standalone, c'est tout noir. Ben oui, c'est juste un gestionnaire de fenêtre, c'est tout ! Il faut donc lancer quelques programmes avec fusion-icon dans le script de démarrage afin d'avoir un vrai bureau complet. Je vous en propose quelques uns, ainsi que quelques astuces pour utiliser pleinement Compiz.

Une barre des tâches avec zone de notification : tint2

tint2 est une barre des tâches personnalisable et très légère, qui offre également une zone de notification. Il n'est pas difficile de l'installer, il suffit d'ajouter tint2 dans le script de démarrage, et vous trouverez comment le configurer ici.

Un menu personnalisable : compiz-deskmenu

Compiz-deskmenu est un menu dans lequel vous rentrez tous vos raccourcis de manière graphique et assez simple. Il y'a plusieurs manières de le lancer, en utilisant les fonctions avancées de Compiz. Par exemple, vous pouvez vouloir afficher le menu par un clic droit sur le bureau, ou en allant avec la souris dans un coin du bureau, ou encore avec un raccourci clavier. Pour ce faire, il faut commencer par donner à compiz la commande en question. Pour ça ouvrons le gestionaire de configuration de compiz (ccsm ou bouton droit sur la fusion-icon, et settings-manager), et dans "commandes", entrons compiz-deskmenu dans l'une des cases. Dans les onglets suivants, on peut choisir quels raccourcis clavier lanceront le menu,ou quels actions à la souris. Je vous laisse découvrir !

Une invite de commande légère : gmrun

gmrun.png

C'est une invite de commande comme on en trouve dans tous les environnements de bureau, souvent accessibles via Alt+F2, mais très légère et qui ne fait que ce qu'on lui demande : elle lance une commande. Pour la lier avec un raccourci clavier, il suffit de faire comme dans le point précédent, ouvrir le gestionnaire de configuration de compiz, aller dans "commandes", y entrer gmrun et le lier dans l'onglet suivant au raccourci de votre choix.

Une icone dans la zone de notification pour quitter l'environnement

Pour arrêter l'ordinateur, je devais toujours utiliser la console et taper sudo halt suivi de mon mot de passe. C'est pénible, surtout quand on est sur un bureau graphique. J'ai donc créé cette icone qui se met dans la zone de notification et qui me donne le choix de quitter X, arrêter l'ordinateur ou le redémarrer. Vous pouvez le télécharger QuitStatus.tar.bz2ici. Attention, il faudra le modifier légèrement pour qu'il marche chez vous (notamment les chemins d'icônes ne sont pas les bons). C'est un script python qui se base sur sudo. Si sudo n'est pas configuré correctement, le script ne fonctionnera pas. Mais que faut-il faire donc ? Il faut éditer le fichier /etc/sudoers et ajouter les lignes suivantes (aux endroits appropriés) :

# Cmnd alias specification
Cmnd_Alias SHUTDOWN = /sbin/shutdown
Cmnd_Alias HALT = /sbin/halt
Cmnd_Alias REBOOT = /sbin/reboot

# User privilege specification
gholyocompiz    ALL=NOPASSWD: SHUTDOWN, HALT, REBOOT

Évidemment, il faut remplacer par votre nom d'utilisateur. Ainsi, lorsque le script lancera sudo halt, il n'aura pas besoin du mot de passe pour procéder.

Et plein d'autres trucs !

J'ai mis un conky, un terminal incrusté dans le fond, des raccourcis pour changer le volume sonore, pour lancer un terminal, ou mon navigateur de fichier (PCManFM), ... À vous de faire votre sauce !