Le Gestionnaire de fenêtres Openbox

From Manjaro Linux
Jump to: navigation, search

Retour à l'accueil

Présentation

Openbox est un gestionnaire de fenêtre très léger, qui peut être utilisé en remplacement de celui d'origine dans un environnement de bureau, ou seul.

C'est son utilisation seul qui nous intéresse, car il fait une bonne base pour se créer de toute pièce un environnement très léger qui peut convenir sur une machine un peu ancienne, ou transformer une machine récente en véritable fusée.

Tel quel, il propose un environnement très stable et rapide, qui pourrait presque se suffire à lui-même, bien qu'il lui manque quelques fonctions d'un environnement moderne, mais il suffit de lui ajouter quelques utilitaires pour en faire un environnement complet.

L'installation

On pourrait bien sûr se contenter d'Openbox seul, mais on peut lui ajouter quelques utilitaires utiles:

  • Obconf: pour configurer Openbox graphiquement.
  • Obkey: pour créer et modifier des raccourcis clavier
  • Obmenu: pour modifier le menu; le paquet contient aussi l'utilitaire pour un menu dynamique
  • Oblogout: un script qui affiche une fenêtre pour l'extinction de la machine
  • Openbox-themes: des thèmes supplémentaires
  • Menumaker: utile pour mettre à jour un menu statique (optionnel)

On peut donc lancer:

sudo pacman -S openbox openbox-themes obconf obkey oblogout obmenu menumaker


Lancement d'Openbox

Si on se sert d'un gestionnaire de connexion (Lxdm, Gdm...), Openbox apparaît maintenant dans la liste des environnements; il faut juste le sélectionner et entrer son mot de passe comme d'habitude.

Si par contre on démarre manuellement Xorg avec «startx», il faudra ajouter la ligne suivante dans le fichier ~/.xinitrc :

exec openbox-session


Les fichiers de configuration

Openbox s'appuie sur 4 fichiers principaux pour sa configuration:

  • rc.xml : contient la configuration générale d'Openbox
  • menu.xml : contient toutes les entrées du menu
  • autostart : c'est un script qui permet de lancer des applications au démarrage d'Openbox, mais il est moins utile depuis qu'Openbox supporte le Xdg-autostart (sous réserve d'avoir installé python2-xdg)
  • environnement : contient des variables d'environnement qui seront spécifiques à Openbox et aux applications lancées par son menu; si on laisse vierge, ce sont les variables du système ou de l'utilisateur qui s'appliquent.

La première chose à faire est de copier ces fichiers dans son dossier personnel pour pouvoir les modifier à loisir:

cp /etc/xdg/openbox/* ~/.config/openbox/


Le menu

Au premier lancement d'Openbox, on s'aperçoit que le menu, accessible par un clic-droit sur le bureau, est très incomplet et ne correspond pas avec les applications installées sur la machine : c'est le menu standard d'Openbox. On peut le modifier en éditant ~/.config/openbox/menu.xml, et il ne faudra pas oublier après chaque modification de dire à Openbox de relire les fichiers de configuration:

openbox --reconfigure

Il existe 2 façons de faire; on peut avoir un menu statique ou un menu dynamique.

Le menu statique est entièrement fait à la main. Il a l'avantage d'être plus léger, mais il faudra l'éditer manuellement à chaque fois qu'on ajoutera une application ou se servir d'un utilitaire qui le fait automatiquement (comme Menu-maker).

Le menu dynamique fait appel à un utilitaire qui liste les fichiers *.desktop dans /usr/share/applications et dans ~/.local/share/applications et met à jour le menu en temps réel; il ne sera donc pas nécessaire d'intervenir pour ajouter une nouvelle application.

Il est possible de panacher les deux méthodes: une partie du menu dynamique, et une partie statique.


Le menu statique

Le fichier ~/.config/openbox/menu.xml est en XML et sa syntaxe est assez simple; en premier lieu, il faut entourer tout le menu avec une balise <openbox_menu>:

<openbox_menu>
  ...le reste du menu ici...
</openbox_menu>

Ensuite, le reste du menu est composé comme ceci:

 <menu id="ID du menu" label="TITRE">

  <!-- voici un élément de menu, un lanceur de programme par ex -->
  <item label="LABEL">
    ACTIONS
  </item>

 <!-- un séparateur avec titre -->
  <separator label="TITRE du séparateur" />

 <!-- un lien vers un sous-menu -->
  <menu id="ID" />

 <!-- un séparateur -->
 <separator />

 <!-- un sous-menu -->
  <menu id="ID" label="TITLE">
    <item label="LABEL">
      ACTIONS
    </item>
  </menu>

 <separator />
  <item label="LABEL">
    ACTIONS
 </item>
</menu> 

Voici un exemple concret:

<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu xmlns="http://openbox.org/3.4/menu">
<menu id="applications-menu" label="Applications">
  <item label="Calculator">
    <action name="Execute">
      <command>gnome-calculator</command>
      <startupnotify>
        <enabled>yes</enabled>
      </startupnotify>
    </action>
  </item>
  <item label="Navigateur web">
   <action name="Execute">
     <command>firefox</command>
      <startupnotify>
        <enabled>yes</enabled>
      </startupnotify>
    </action>
  </item>
</menu>

<menu id="root-menu" label="Openbox 3">
 <separator label="Applications" />
 <menu id="applications-menu"/>
 <separator />
  <item label="Log Out">
    <action name="Exit">
      <prompt>yes</prompt>
    </action>
  </item>
 </menu>
</openbox_menu>

On voit ici que si on inclut des sous-menus, on peut les mettre dans un paragraphe séparé et inclure juste leur indentification dans le principal.

Si on pense ne pas s'en sortir avec cette syntaxe, on peut se servir de l'éditeur Obmenu.

On peut aussi générer un menu statique avec l'utilitaire Menumaker; on commence par l'installer:

sudo pacman -S menumaker

Puis on le lance par:

mmaker -v OpenBox3

un fichier menu.xml sera créé; d'autres options sont disponibles:

mmaker --help

Le menu dynamique

Il existe un certain nombre d'utilitaires qui peuvent servir à générer le menu dynamique, mais le paquet Obmenu contient l'utilitaire Obm-xdg qui convient tout à fait (bien que je n'ai pas trouvé comment faire pour qu'il affiche les icônes des applications.

On peut l'utiliser pour générer le menu entier, et dans ce cas, c'est très simple:

<openbox_menu>
 <menu execute="obm-xdg" id="root-menu" label="applications"/>
</openbox_menu>

Le problème c'est qu'on ne pourra plus mettre d'entrées personnalisées (pour des scripts ou autre), à part en créant des fichiers *.desktop qui seront lus par Obm-xdg; donc on peut préférer l'inclure dans un menu statique, en mettant une ligne comme celle-ci dans menu.xml:

<menu execute="obm-xdg" id="xdg-menu" label="Applications"/>

et en l'incluant comme sous-menus, en ajoutant cette ligne en dessous de "root-menu":

<menu id="xdg-menu"/>

Il existe d'autres utilitaires capables de générer un menu dynamiquement:

Configuration générale

Toute la configuration d'Openbox tient dans rc.xml; la syntaxe est là aussi très simple (extrait avec la section "thème"):

 <theme>
  <name>Clearlooks</name>
  <titleLayout>NLIMC</titleLayout>
  <keepBorder>yes</keepBorder>
  <animateIconify>yes</animateIconify>
  
    <name>sans</name>
    <size>8</size>
    <weight>bold</weight>
    <slant>normal</slant>
  
  
    <name>sans</name>
    <size>8</size>
    <weight>bold</weight>
    <slant>normal</slant>
  
  
    <name>sans</name>
    <size>9</size>
    <weight>normal</weight>
    <slant>normal</slant>
  
  
    <name>sans</name>
    <size>9</size>
    <weight>normal</weight>
    <slant>normal</slant>
  
  
    <name>sans</name>
    <size>9</size>
    <weight>bold</weight>
    <slant>normal</slant>
  
</theme>

Toutes les options sont assez claires et on peut aussi le faire graphiquement avec l'outil Obconf; le gestonnaire de configuration de Lxde, Lxappearance convient aussi très bien, et est un peu plus complet.

Paramètres par applications

Un point intéressant du rc.xml est qu'on peut créer des réglages "par application"; la syntaxe n'est pas non-plus très compliquée:

<applications>
  ...
  <application name="NAME" class="CLASS" role="ROLE" title="TITLE" type="TYPE">
    ...PROPERTIES...
  </application>
  ...
</applications>

Pour trouver les "name", "class", "role", etc..., il faut lancer dans un terminal l'utilitaire obxprop; le curseur de souris se transforme en croix, et il suffit de cliquer sur la fenêtre dont on veut obtenir les propriétés pour qu'elles s'affichent dans le terminal; par exemple, pour Firefox:

obxprop
_NET_WM_ICON_GEOMETRY(CARDINAL) = 9, 2, 200, 25
WM_STATE(WM_STATE) = 1, 0
_NET_WM_DESKTOP(CARDINAL) = 0
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 1, 1, 18, 6
_NET_FRAME_EXTENTS(CARDINAL) = 1, 1, 18, 6
_NET_WM_STATE(ATOM) = 
_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_TITLE(UTF8_STRING) = "Mozilla Firefox"
_OB_APP_CLASS(UTF8_STRING) = "Firefox"
_OB_APP_NAME(UTF8_STRING) = "Navigator"
_OB_APP_ROLE(UTF8_STRING) = "browser"
_NET_WM_VISIBLE_ICON_NAME(UTF8_STRING) = "Help:Applications - Openbox - Mozilla Firefox"
_NET_WM_VISIBLE_NAME(UTF8_STRING) = "Help:Applications - Openbox - Mozilla Firefox"
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_CLOSE,   _NET_WM_ACTION_MOVE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW, _OB_WM_ACTION_UNDECORATE
WM_HINTS(WM_HINTS) = 103, 1, 1, 39846056, 0, 0, 0, 39846057, 39845889
_NET_STARTUP_ID(UTF8_STRING) = "awn_task_manager_584_TIME36430900"
WM_WINDOW_ROLE(STRING) = "browser"
XdndAware(ATOM) = BITMAP
_MOTIF_DRAG_RECEIVER_INFO(_MOTIF_DRAG_RECEIVER_INFO) = 108, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0

Les lignes qui nous intéressent sont celles qui commencent par "_OB_APP". Ces indications vont permettre de créer une règle personnalisé pour l'application Firefox.

Plutôt qu'un long discours, voici quelques exemples:

<applications>
   <!-- enlever les décorations de toutes les fenêtres... -->
   <application class="*">
     <decor>no</decor>
   </application>
   <!-- ...et remettre les décorations de l'application Orage -->
   <application class="Orage">
     <decor>yes</decor>
   </application>
   <!-- Xterm s'ouvrira dans le bureau 2, maximisé, et devant les autres applications -->
   <application name="screen">
     <desktop>2</desktop>
     <maximized>yes</maximized>
     <layer>below</layer>
   </application>
   <!-- MPlayer me suit quand je change de bureau -->
   <application class="MPlayer">
     <desktop>all</desktop>
     <layer>above</layer>
   </application>
   <!-- Je veux Gedit toujours maximisé -->
   <application name="gedit">
     <maximized>yes</maximized>
   </application>
 </applications>

Il existe également un outil graphique pour ceci: Obapps, disponible dans AUR (à installer avec Yaourt).

Démarrage automatique des applications

Là encore, nous avons 2 méthodes.

Xdg-autostart

Openbox peut désormais lancer des applications au démarrage de la session de la même façon que les environnements plus gros: grâce au système xdg-autostart.

Concrètement, si vous avez utilisé l'utilitaire "Applications au démarrage" d'un autre environnement, celà a créé des fichiers *.desktop dans ~/.config/autostart; Openbox tient compte de ces fichiers et lancera les applications liées à ceux-ci, ainsi que ceux fournis par les paquets et placés dans /etc/xdg/autostart; par exemple, si vous venez d'installer Network-manager, vous constaterez que son applet (nm-applet) se lance au démarrage d'Openbox sans aucune manipulation particulière.

Il faudra toutefois que les fichiers *.desktop soient visibles pour Openbox, et non blacklistés, ce qui pourrait être le cas pour certaines applications prévues pour un environnement particulier; dans ce cas, les fichiers *.desktop contiendraient des mentions telles que:

NotShowIn=Openbox;
OnlyShowIn=XFCE;

(ne pas montrer dans Openbox; Montrer seulement dans Xfce)


Le fichier autostart

Malgré la récente compatibilité avec Xdg-autostart, Openbox a conservé la possibilité d'utiliser son fichier "autostart".

Astuce: Attention, par le passé, ce fichier s'appelait "autostart.sh", maintenant "autostart" suffit

Le fichier ~/.config/openbox/autostart est un script (bien que la mention "#!/bin/sh" ne soit plus utile au début du fichier), et donc il accepte la syntaxe d'un script shell:

# xdg-user-dirs-update: vérifier si l'utilisateur a des répertoires Documents, Téléchargements, etc.
# Sinon, les créer
if [ -x /usr/bin/xdg-user-dirs-update ] ; then
    /usr/bin/xdg-user-dirs-update
fi

# Lancer Nitrogen pour gérer le fond d'écran
nitrogen --restore &

# Activer le composite (ombres et transparence)
xcompmgr -CcFf &

# quand on n'a plus besoin, un "#" suffit à désactiver la ligne
# pnmixer &

# un économiseur d'écran, si on a un vieil écran
# xscreensaver -no-splash &

# mais pour un écran récent, éteindre au bout de 10mn suffit
xset dpms 0 0 600

# un utilitaire pour le montage des médias amovibles
udiskie &

# le panel Tint
tint2 &
(sleep 1s && tint2 -c ~/.config/tint2/tint2-workspaces) &

(Attention, s'assurer que les applications qu'on lance sont installées)


Personnalisation

Les thèmes Openbox

Il est possible de trouver des thèmes pour Openbox directement dans les dépôts officiels, ou dans AUR, en lançant une recherche sur les mots "openbox" ou "theme" avec Yaourt. On peut aussi télécharger des thèmes sur d'autres sites.

Les thèmes téléchargés devront être extraits dans ~/.themes; on pourra ensuite les sélectionner:

  • Avec Obconf.
  • Avec Lxappearance.
  • En éditant le rc.xml et en modifiant la clé <name> de la section <theme>.

Les curseurs de souris

La gestion des thèmes de curseurs est communes avec tous les environnements de bureau; pour le système, ils sont dans /usr/share/icons, où chaque répertoire porte le nom du thème et contient un sous-répertoire "cursors"; pour l'utilisateur, on trouve le même schéma dans ~/.icons.

Par exemple, on télécharge le thème "machintruc"; on va créer le répertoire ~/.icons/machintruc/cursors et extraire le contenu de l'archive dans ce répertoire; on pourra ensuite se servir de Lxappearance pour le sélectionner.

On trouve des thèmes de curseurs sur les sites habituels (kde-look.org, gnome-look.org, etc...).

Les thèmes Gtk

Les thèmes d'icônes

Les applications légères

Amélioration de l'ergonomie du bureau

Les panneaux et docks

La zone de notification

Les ombres et la transparence

Les autres applications

Retour à l'accueil