doc

noDE -- fluxbox -- doc

noDE aka no Desktop Environment ...
quelques informations à propos de fluxbox.

présentation

Fluxbox est un gestionnaire de fenêtre extrêmement léger et rapide. Dans la lignée des *box, il peut à lui tout seul constituer un environnement de bureau très complet. Par ailleurs, il présente quelques avantages intéressants devant le plus connu openbox.

Quelques avantages non exhaustifs :

  • Syntaxe de configuration simple (ce n'est pas du xml).
  • Possibilité de configuration par de simples menus
  • Tout est présent par défaut : barre des tâches, systray, horloge, menu.
  • Raccourcis claviers facilement configurables
  • Rapide
  • Possibilité de regrouper les fenêtres en onglets, rendant la gestion des fenêtres plus pratique
  • Lanceur de commande intégré (type gmrun) : Alt+f2
  • Définitions de règles pour les fenêtres très complètes.
  • Pseudo-transparence

Quelques inconvénients :

  • Il n'y a pas la possibilité de définir une marge où les fenêtres ne pourront aller.
  • Pas de pipemenus, mais des menus listant les répertoires avec possiblité de lancer une commande personnalisée.

configuration graphique

Fluxbox permet une configuration fine depuis son menu : clic-droit sur le bureau > menu > configuration...

configuration manuelle

Fluxbox peut être configuré via le menu accessible par un clic-droit sur le bureau. La barre des tâches peut être configurée de la même façon. Cependant, nous pouvons configurer fluxbox encore un peu plus.

Démarrage automatique de programmes

Pour lancer des programmes automatiquement au démarrage de fluxbox, complétez le fichier '~/.fluxbox/startup'. Une seule règle : ne pas oublier d'ajouter un '&' après chaque commande.

Exemple :

 numlockx &
xset -display :0 s off -dpms &
sleep 3 && ~/bin/bin/wallpaper.sh &
gtk-redshift -l 47.13:1.33 -t 5500:4000 &
unclutter -noevents &
mpd &
xautolock -time 10 -locker slock &
sleep 3 && conky -c ~/.conkyrcflux &
gajim &

Raccourcis clavier et souris

Vous pouvez configurer des raccourcis clavier et souris dans le fichier '~/.fluxbox/keys'. La syntaxe est la suivante :

 Modificateur touche :commande [arguments...]
  • Un modificateur est une touche spéciale, comme Shift, Control ou Alt (Mod1). Pour en connaître la liste, lancez la commande xmodmap -pm dans un terminal. Il existe des modificateurs spéciaux, comme :
    • 'OnDesktop' lorsque le curseur est sur le bureau.
    • 'OnToolbar' lorsque le curseur est sur la barre des tâches.
    • 'OnWindow' lorsque le curseur est au-dessus d'une fenêtre.
    • 'OnTitlebar' lorsque le curseur est au-dessus la barre de titre d'une fenêtre.
    • 'OnTab' lorsque le curseur est sur un onglet
    • 'Double' lors d'un double clic.
  • Le nom d'une touche peut être par exemple 'a', 'b' ou 'space'. Vous pouvez aussi utiliser un code, récupéré en lançant la commande 'xev' dans un terminal, puis en appuyant sur la touche dont on souhaite connaître le code. Ce dernier apparaîtra dans votre terminal (exemple '38' ou '0xf3').
  • Les commandes sont très nombreuses, comme déplacer une fenêtre sur un espace de travail, l'agrandir... Pour simplement lancer une application, vous aurez besoin de la commande Exec :
     Mod1 Shift L :Exec mpc next

Sachez aussi que vous pouvez appliquer des conditions sur ces raccourcis, mais cet usage avancé, permettant de contrôler totalement votre environnement, nécessite une lecture du lien ci-dessous.

La liste des commandes est disponible ici.

Règles sur les fenêtres.

vous pouvez remplir ce fichier par le menu des fenêtres en spécifiant 'se souvenir...'. mais toutes les options ne sont pas accessibles depuis le menu. pour plus de configuration, il faut éditer le fichier '~/.fluxbox/apps'. la syntaxe est simple et quelques exemples vous seront donnés en fin de section:

 [app]/[group] (app-name) {count - optional}
[Property1]  {value1}
[Property2]  {value2}
    ...
[end]

une application est identifiée grâce à la commande xprop et peut être déterminé par

  • 'name' - nom de la fenêtre (première partie de WM_CLASS)
  • 'class' - classe de la fenêtre (seconde partie de WM_CLASS)
  • 'title' - titre de la fenêtre ( WM_NAME )
  • 'role' - rôle de la fenêtre ( WM_WINDOW_ROLE )

l'option [app]...[end] détermine les propriétés d'une seule application.
cette section débute avec '[app] (pattern) {count}' avec 'pattern' qui peut être un ou plusieurs identifiants (voir la section 'pattern'). 'count' est optionnel et détermine le nombre maximum de fenêtres concernées par la règle. si il est omit, toutes les fenêtres répondant à 'pattern' seront concernées.
cette première ligne est suivie d'une série de propriétés (voir la section 'settings') et se termine par [end].

l'option [group]...[end] détermine les propriétés de plusieurs application pour les regrouper en onglets.
cette section débute avec '[group] (pattern) {count}' avec 'pattern' optionnel qui peut être un ou plusieurs identifiants (voir la section 'pattern'). 'count' est optionnel et détermine le nombre maximum de fenêtres concernées par la règle. si il est omit, toutes les fenêtres répondant à 'pattern' seront concernées.
cette première ligne est suivie d'autant de ligne [app] que d'applications que vous souhaitez grouper. cette section se termine par [end].

les settings sont les propriétés appliqués aux fenêtres répondant à 'pattern'
le format est simple '[setting] {value}'
voici la liste des 'settings':

  • [Workspace] {number}: ouverture de l'applications sur un bureau spécifique. le 'number' commence à 0
  • [Jump] {bool}: se rendre au bureau spécifié, à utiliser avec [Workspace]
  • [Head] {number}: écran d'ouverture de l'application
  • [Layer] {number}: niveau de profondeur de la fenêtre.valeur 2-au-dessus du dock, 4-au niveau du dock, 6-au-dessus, 8-normal, 10-en-dessous, 12-sur le bureau.
  • [Dimensions] {width height}: taille de la fenêtre avec hauteur largeur en pixels
  • [Position] (anchor) {X Y}: placement de la fenêtre. 'anchor' est optionnel et peut être TopLeft, Left, BottomLeft, Top, Center, Bottom, TopRight, Right ou BottomRight pour déterminer le point de départ de {X Y}, en pixels. si 'anchor' est omit, {X Y} sont comptés à partir du coin supérieur gauche.
  • [Deco] {value}: configure le type de décoration des fenêtres. les valeurs possibles :
    • NORMAL: décoration classique
    • NONE: pas de décorations, sauf en onglet
    • Border: simple bordure comme décoration
    • TINY: barre de titre avec un bouton 'iconifier'
    • TOOL: uniquement la barre de titre
  • [Shaded] {bool}: la fenêtre est ouverte 'enroulée' sur la barre de titre
  • [Tab] {bool}: la fenêtre a des onglets
  • [FocusNewWindow] {bool}: le fenêtre prends le focus, ou pas
  • [FocusHidden] {bool}: si true, la fenêtre n'apparait pas dans la liste des fenêtres du menu
  • [IconHidden] {bool}: si true, la fenêtres n'apparait pas dans le boite à icone de la barre de tache
  • [Hidden] {bool}: [FocusHidden]+[IconHidden]
  • [Sticky] {bool}: visible sur tous les bureaux, ou pas
  • [Minimized] {bool}: la fenêtre démarre minimisée
  • [Maximized] {value}: la fenêtre apparait maximisée. 'value' peut être {yes} maximisée, {horz} maximisation horizontale, {vert} maximisation verticale ou {none} non maximisée.
  • [Fullscreen] {bool}: fenêtre en plein écran, sans décorations
  • [Close] {bool}: sauver les 'settings' lors de la fermeture de la fenêtre.
  • [Alpha] {value [value]}: opacité de la fenêtre focus|unfocus entre 0 et 255(opaque).

les pattern sont les caractéristiques désignant les fenêtres.
une 'pattern' ressemble à ça:

 ([propertyname[!]=]regexp)

les propriétés successives sont placées entre ().
si 'propertyname' est omit, il est remplacé par 'name'.
'propertyname' n'est pas sensible à la casse, tandis que regexp l'est.
si vous spécifiez plusieurs regexp, le "AND" est implicite: toutes les 'pattern' doivent correspondre pour que la propriété s'applique.
on utilise '=' pour égal ou '!=' pour inégal.
les 'propertyname' acceptés par fluxbox:

  • Name: expression, correspond à CLASSNAME (la première partie de WM_CLASS depuis xprop).
  • Class: expression, correspond à CLASSCLASS (la seconde partie de WM_CLASS depuis xprop).
  • Title: expression, correspond à WM_NAME depuis xprop).
  • Role: expression, correspond à WM_WINDOW_ROLE depuis xprop(1)).
  • Transient: yes/no, correspond à une fenêtre de transition (généralement une fenêtre popup).
  • Maximized: yes/no, correspond à une fenêtre maximisée ou non.
  • Minimized: yes/no, correspond à une fenêtre minimisée ou non.
  • Shaded: yes/no, correspond à une fenêtre enroulée ou non.
  • Stuck: yes/no, correspond à une fenêtre sticky (visible sur tous les bureaux) ou non.
  • FocusHidden: yes/no, correspond à une fenêtre à laquelle on a demandé de ne pas apparaitre dans la liste des fenêtres, ou non.
  • IconHidden: yes/no, correspond à une fenêtre à laquelle on a demandé de ne pas apparaitre dans la liste des icones, ou non.
  • Urgent: yes/no, correspond à une fenêtre urgente.
  • Workspace: un nombre, correspond au numéro du bureau dans lequel la fenêtre se trouve. les bureaux commencent à 0. vous pouvez utiliser [current] pour sélectionner les fenêtres du bureau actif.
  • WorkspaceName: expression, correspond au nom du bureau dans lequel la fenêtre se trouve.
  • Head: un nombre, correspond au numéro de l'écran sur lequel la fenêtre se trouve. vous pouvez utiliser [mouse] pour sélectionner les fenêtres sur l'écran où se trouve la souris.
  • Layer: expression, correspond au nom du niveau de la fenre: AboveDock, Dock, Top, Normal, Bottom ou Desktop
  • Screen: un nombre, correspond au numéro de l'écran actif.
  • @XPROP: expression, correspond à toute expression issue de xprop.

exemples:

  • afficher les deux premières fenêtres nommées *term ou *Term sur le bureau 1:
     [app] (name=.*[tT]erm) {2}
    [Workspace]   {1}
    [end]
  • affiche geany centré avec une taille spécifique, et ajuster cette valeur à la fermeture de l'application:
     [app] (name=geany)
    [Dimensions]  {1022 747}
    [Position]    (CENTER) {0 0}
    [Close]       {yes}
    [end]
  • pour luakit, on se place d'abord sur le bureau 1 puis on lance l'application.
     [app] (name=luakit)
    [Workspace]   {1}
    [Jump]        {yes}
    [end]
  • lancer toutes les sessions de aterm sans décorations de fenêtres.
     [app] (name=aterm)
    [Deco]        {NONE}
    [end]
  • un groupe formé par les fenêtres de gimp s'ouvrent en derrière les autres fenêtres.
     [group]
    [app] (name=gimp) (role=gimp-dock)
    [app] (name=gimp) (role=gimp-toolbox)
    [Layer]       {4}
    [end]
  • un terminal en fond d'écran:
     [app] (Title=urxvt-bg)
    [Layer]{12}
    [Deco]{NONE}
    [Maximized]{yes}
    [Hidden]{yes}
    [Sticky]{yes}
    [end]

    Afin que cela ne s'applique pas sur tous les terminaux que je lance, j'ai rajouté ceci au démarrage de la session pour toujours avoir un terminal en arrière plan, totalement transparent :
    urxvt -T urxvt-bg -sh 100 &
    Et voilà le travail :

urxvt en arriere plan transparent

Un menu déjà bien rempli est proposé par défaut sous debian. Cependant, vous pourriez souhaiter créer votre propre menu. Ici aussi, la syntaxe est des plus simple :

 [etiquette] (titre) {commande} <'icone'>

Vous pouvez donc créer des entrées pour lancer une commande, par exemple :

 [exec] (Internet) {firefox}
.

Vous pouvez aussi créer des sous-menus. Attention, dans ce cas, il faudra ensuite ajouter '[end]' :

 [submenu] (Capture d'écran)
[exec] (... maintenant) {scrot -e 'mv $f ~/shots'}
[exec] (... avec sélection) {scrot -s -e 'mv $f ~/shots'}
[exec] (... dans 10s) {scrot -s -d 10 -e 'mv $f ~/shots'}
[exec] (... dans 5s) {scrot -s -d 5 -e 'mv $f ~/shots'}
[exec] (... puis upload) {~/bin/bin/sscrot}
[end]

Il existe des sections particulières. En voici quelques unes, mais je vous invite à lire la section dédiée sur le site officiel :

  • [separator] : ajoute une barre de séparation.
  • [wallpaper] (répertoire) {commande} : malgré son nom, ce menu n'est pas forcément utile pour définir le fond d'écran. Il permet de lister les fichiers d'un répertoire, puis de lancer une commande sur le fichier choisi. Par exemple, dans un dossier contenant des notes diverses, afin de pouvoir les ouvrir avec gvim :
     [wallpapers] (~/notes/) {gvim}
  • [workspaces] (Bureaux) : ajoute un menu de sélection des fenêtres sur tous les bureaux :

Aperçu menu fluxbox

Configurer la barre de tâches.

Afin de changer l'ordre des éléments présent dans la barre des tâches (choix du bureau, liste des fenêtres, horloge, systray), éditez le fichier

 ~/.fluxbox/init
. Ensuite, modifiez à votre guise la ligne suivante :

 session.screen0.toolbar.tools:  prevworkspace, workspacename, nextworkspace, prevwindow, nextwindow, iconbar, systemtray, clock

Ce fichier contient de nombreuses options à modifier à souhait.

astuce : pour insérer un bouton de menu dans la barre de tâches, ajouter

 RootMenu
dans la ligne de configuration de la toolbar.

Les styles

Pour installer de nouveaux styles, placez-les dans

 ~/.fluxbox/styles
. Cependant, si vous ne voulez pas que le style impose certaines options, alors définissez les vôtres dans le fichier
 ~/.fluxbox/overlay
. Par exemple, pour choisir la police, ne pas appliquer de fond d'écran et choisir la taille de la barre :

 background: none
*font: DejaVu Sans -9
toolbar.height: 20