URL: https://linuxfr.org/users/fleny68/journaux/ma-simple-session-avec-compiz-et-cairo-dock
Title: Ma simple session avec Compiz et Cairo-dock
Authors: fleny68
Date: 2011年07月17日T17:44:27+02:00
License: CC By-SA
Tags: bidouille, personnalisation, desktop, policykit, sudo, cairodock et compiz
Score: 18
Je continue mon exploration de [ma nouvelle machine](https://linuxfr.org/users/fleny68/journaux/nouvelle-machine-ubuntu-live-debian), et j'ai (dès le départ)
profité de Compiz pour agrémenter l'expérience utilisateur. Ce que j'aime dans Compiz c'est le placement des fenêtres sur la moitié droite et la moitié gauche en un raccourci clavier, le cube avec les engrenages, et les fenêtres qui se déforment. C'est gadget, sauf le placement. Mais mon précédent ordinateur avec une nvidia non supporté, il marchait sans 3D.
Je n'ai pas eu de mal avec compiz, il y a juste une commande absconse à taper pour dire à gnome de l'utiliser:
```text
gconftool-2 --type string --set /desktop/gnome/session/required_components/windowmanager compiz
```
Et puis j'ai aussi découvert [cairo-dock](http://glx-dock.org/). Et là je dois avouer que j'ai été assez épaté. Je me suis donc dit: adieu gnome, au revoir xfce4, je me mets un bureau compiz et cairo-dock, le plus simple possible.
Une session compiz & cairo-dock
=============================
On pourrait se dire c'est trop facile, on installe le packet cairo-dock-compiz-session, et basta! Mais je n'ai pas trouvé un tel packet.
Ce que j'ai trouvé, c'est un tas de solutions pour faire tourner compiz et cairo-dock sous xfce4 ou sous gnome (par exemple: tuer xfwm4 et lancer compiz dans une action automatique au démarrage, lancer cairo-dock de même).
Mais non, je ne veux pas vraiment une session xfce4 ou gnome (ou kde) sans panels mais avec cairo-dock à la place. Je veux un truc simple: une session compiz avec cairo-dock. Paramétrer les gestionnaires de session de gnome ou xfce4 pour obtenir ça ne semble pas très simple.
Avec lxsession
--------------
J'ai fini par trouver une solution: [lxsession](http://wiki.lxde.org/fr/LXSession). C'est un gestionnaire de session tout simple (celui de LXDE). La configuration tient en deux fichiers, à placer dans un répertoire _Compiz_ sous /etc/xdg/lxsession:
Le premier fichier contient la liste des programmes à lancer au démarrage. on place un '@' devant s'il doit être relancé en cas de crah (si j'ai bien compris):
```text
$ cat /etc/xdg/lxsession/Compiz/autostart
@xscreensaver -no-splash
@cairo-dock -o -e xfce
@/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1
```
Le fichier pour LXDE m'a servi de modèle. Je ne sais pas à quoi peut bien servir le _/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1_ et je sens que je vais essayer sans (plus c'est simple mieux ça marche).
Le second fichier contient la configuration du WM, on peut y ajouter le thème de GTK par exemple:
```text
$ cat /etc/xdg/lxsession/Compiz/desktop.conf
[Session]
window_manager=compiz
[GTK]
sNet/ThemeName=Clearlooks
sNet/IconThemeName=nuoveXT2
sGtk/FontName=Sans 10
iGtk/ToolbarStyle=3
iGtk/ButtonImages=1
iGtk/MenuImages=1
iGtk/CursorThemeSize=18
iXft/Antialias=1
```
Une fois qu'on a fait ça on peut lancer la session par
```text
lxsession -s Compiz
```
Plus qu'à demander à à GDM3 de proposer ça comme choix. Deux fichiers sont nécessaires. Le premier semble devoir se placer dans /usr/share/xsessions/ (je ne suis pas arrivé à le faire marcher en le plaçant sous /usr/local/share/xsessions/, ce qui aurait été l'endroit normal pour moi)
```text
$ cat /usr/share/xsessions/compiz.desktop
[Desktop Entry]
Version=1.0
Name=Compiz Session
Name[fr]=Session Compiz
Comment=Use this session to run Xfce as your desktop environment
Comment[fr]=Utilisez cette session pour exécuter Compiz comme environnement de bureau
Exec=startCompiz
Icon=
Type=Application
```
Le second est le script de lancement indiqué, lui fonctionne sous /usr/local
```sh
$ cat /usr/local/bin/startCompiz
#!/bin/bash
cd $HOME
eval `dbus-launch --sh-syntax --exit-with-session`
/usr/bin/X :0.0 -br -audit 0 -nolisten tcp vt7 &
export DISPLAY=:0.0
sleep 1
#compiz-manager decoration move resize> /tmp/compiz.log 2>&1 &
# add more apps here if necessary or start another panel, tray like pypanel, bmpanel, stalonetray
ck-launch-session lxsession -s Compiz
```
(J'ai piqué ça [chez Arch](https://wiki.archlinux.org/index.php/Compiz#As_a_Standalone_Window_Manager)), je ne sais pas si le dbus-launch est nécessaire.
Faire marcher cairo-dock
========================
Il ne vous aura pas échappé que cairo-dock est lancé par lxsession avec une option de compatibilité avec XFCE:
```text
cairo-dock -o -e xfce
```
En effet sans une telle option (en gros xfce/gnome/kde) l'applet qui affiche les raccourcis reste vide. J'ai choisis xfce parce que je présume que c'est la solution la moins lourde entre les trois. En attendant lxde, qui aurait l'avantage d'être léger et compatible avec lxsession.
En effet il y a un problème: il est impossible de se déloguer avec l'applet idoine: elle appelle _xfce4-session-logout_ qui ne marche pas avec lxsession. On peut bien sûr remplir à la main la configuration de l'applet et forcer _lxsession-logout_, mais chaque utilisateur devra faire de même; j'ai choisi plus simplement de détourner _xfce4-session-logout_.
Détournement de _xfce4-session-logout_
--------------------------------------
Sous debian le détournement de fichier se fait ainsi:
```text
dpkg-divert --divert /usr/bin/xfce4-session-logout.real --rename /usr/bin/xfce4-session-logout
```
Ça revient à un _mv /usr/bin/xfce4-session-logout /usr/bin/xfce4-session-logout.real_ en plus costaud.
Plus qu'à installer à la place du fichier détourné un script qui appelle le bon programme de sortie:
```sh
$ cat /usr/bin/xfce4-session-logout
#!/bin/sh
if pidof lxsession 2>&1> /dev/null ;
then
lxsession-logout ;
else
xfce4-session-logout.real $@ ;
fi
```
Avant les droits sous unix, c'était simple
==========================================
Voilà, en théorie ça devrait marcher. Et ça marche! J'obtiens bien le menu de lxsession-logout avec ses nombreux boutons, mais suspendre et hiberner ne marchent pas. Et le problème semble connu, j'ai toutefois eu du mal à le contourner. Je vous donne le truc.
Le problème provient de [UPower](http://upower.freedesktop.org/). Ce bidule utilise pour gérer les droits un truc parfaitement abscon: [PoliciKit](http://hal.freedesktop.org/docs/PolicyKit/). lxsession-logout ne semble pas s'y identifier comme une session active, et seules les sessions actives peuvent utiliser UPower. J'ai du autoriser les sessions inactives dans _/usr/share/polkit-1/actions/org.freedesktop.upower.policy_ (un autre fichier de configuration qui n'est pas dans /etc ?)
```xml
$ cat /usr/share/polkit-1/actions/org.freedesktop.upower.policy