« Wmii » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
m (→‎Configuration par défaut : chg "dossier" par "répertoire")
 
(44 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
'''Wmii''' ( Window Manager Improved 2 ) est un gestionnaire de fenêtres en mosaïque. A ce titre, il s'occupe automatiquement du placement des fenêtres ; en utilisant le maximum d'espace possible ; sans que celles-ci ne se chevauchent. Il est majoritairement pilotable au clavier, grâce à des raccourcis modifiables, mais permet également l'utilisation de la souris.
'''Wmii''' ( Window Manager Improved 2 ) est un gestionnaire de fenêtres en mosaïque. A ce titre, il s'occupe automatiquement du placement des fenêtres en utilisant le maximum d'espace possible, sans que celles-ci ne se chevauchent. Il est entièrement pilotable au clavier, grâce à des raccourcis modifiables, mais permet également l'utilisation de la souris.


Attention, ce n'est pas un environnement de bureau, il n'installera donc aucune autre application, ne gère pas le bureau, n'y place ni icône ni fond d'écran. Bien entendu tout ceci peut être fait, depuis Wmii, par des applications extérieures.
Attention, ce n'est pas un environnement de bureau, il n'installera donc aucune autre application, ne gère pas le bureau, n'y place ni icône ni fond d'écran ; sur les portables, il n'éteindra pas votre ordinateur lorsque la batterie sera vide. Bien entendu tout ceci peut être fait, depuis Wmii, par des applications extérieures.
 
== À quoi ressemble t-il ? ==
<gallery>
Fichier:Wmii1.png|[[Avec plusieurs applications ouvertes sur 3 colonnes]]
Fichier:Wmii2.png|[[Bureau nu avec un fond d'écran et Conky]]
Fichier:Wmii3.png|[[Avec The Gimp en mode flottant]]
Fichier:Wmii4.png|[[Avec The Gimp en mosaïque]]
</gallery>


== À quoi ressemble t'il ? ==
[[Fichier:Wmii1.png|200px|thumb|left|Avec plusieurs applications ouvertes sur 3 colonnes]]
[[Fichier:Wmii2.png|200px|thumb|left|Bureau nu avec un fond d'écran et Conky]]
[[Fichier:Wmii3.png|200px|thumb|left|Avec The Gimp en mode flottant]]
[[Fichier:Wmii4.png|200px|thumb|left|Avec The Gimp en mosaïque]]
<br/>
== Installation ==
== Installation ==
Wmii est disponible dans toutes les branches de Debian ( stable, testing et unstable ), dans la section "main". Il vous suffit donc de passer par votre installateur de paquet préféré, ou en console par un simple :
Wmii est disponible dans toutes les branches de Debian (stable, testing et unstable), dans la section "main". Il vous suffit donc de passer par votre installateur de paquet préféré, ou en console par un simple :
 
# aptitude install wmii
* '''# aptitude install wmii'''


Une nouvelle entrée sera ajoutée dans votre gestionnaire de connection. Si vous n'utilisez pas de gestionnaire de connection, vous devrez éditer '''~/.xinitrc''', y ajouter '''exec wmii''' et commenter la ligne concernant votre session actuelle.
Une nouvelle entrée sera ajoutée dans votre gestionnaire de connexion. Si vous n'utilisez pas de gestionnaire de connexion, vous devrez éditer le fichier '''~/.xinitrc''', y ajouter '''exec wmii''' et commenter la ligne concernant votre session actuelle.


== Configuration par défaut ==
== Configuration par défaut ==
Lors de son installation Wmii crée le fichier '''/etc/X11/wmii-3.5/wmiirc'''. Celui-ci est un script exécutable contenant la configuration par défaut prévue par l'équipe de développement du projet.
Lors de son installation Wmii crée le fichier '''/etc/X11/wmii-3.5/wmiirc'''. Celui-ci est un script exécutable contenant la configuration par défaut prévue par l'équipe de développement du projet.
Ce script est exécuté automatiquement à l'ouverture de Wmii, sauf s'il existe dans votre dossier personnel un fichier '''/.wmii-3.5/wmiirc'''. Ce dernier sera alors prioritaire, manière commode de réaliser une configuration personnelle sans détruire la configuration de base, ainsi que d'avoir un comportement par utilisateur.
Ce script est exécuté automatiquement à l'ouverture de Wmii, sauf s'il existe dans votre répertoire personnel un fichier '''/.wmii-3.5/wmiirc'''. Ce dernier sera alors prioritaire, manière commode de réaliser une configuration personnelle sans détruire la configuration de base, ainsi que d'avoir un comportement par utilisateur.


Ce fichier n'étant pas créé par défaut, créez le vous même par une simple copie de l'original :
Ce fichier n'étant pas créé par défaut, créez-le vous même par une simple copie de l'original :
  * '''$ cp /etc/X11/wmii-3.5/wmiirc ~/.wmii-3.5/wmiirc'''
  $ cp /etc/X11/wmii-3.5/wmiirc ~/.wmii-3.5/wmiirc


et rendez le exécutable par :  
et rendez le exécutable par :  
  * '''$ chmod +x ~/.wmii-3.5/wmiirc'''
  $ chmod +x ~/.wmii-3.5/wmiirc
=== Terminologie ===
=== Terminologie ===
==== Clients ====
==== Clients ====
Un client est un programme fournissant une interface graphique, par exemple votre navigateur internet, un terminal, un éditeur de texte... etc.
Un client est un programme fournissant une interface graphique, par exemple votre navigateur internet, un terminal, un éditeur de texte, ...
==== Focus ====
==== Focus ====
Le client qui a le focus est celui qui peut recevoir une action d'entrée, par exemple si vous tapez une commande dans votre terminal, c'est lui qui a le focus. Un seul client à la fois peut avoir le focus.
Le client qui a le focus est le client activé, c'est-à-dire celui qui peut recevoir une action d'entrée, par exemple si vous tapez une commande dans votre terminal, c'est lui qui a le focus. Un seul client à la fois peut avoir le focus.
==== Événements ====
==== Événements ====
C'est un message, généré par le serveur X, à l'intention de qui a le focus. Par exemple en cliquant dans une fenêtre, vous générez un événement à destination de cette fenêtre..
C'est un message, généré par le serveur X, à l'intention du client qui a le focus. Par exemple en cliquant dans une fenêtre, vous générez un événement à destination de cette fenêtre..
==== Tag ou Label ====
==== Tag ou Label ====
Un tag est une chaîne de caractères, un label, un nom, associé à un ou plusieurs clients. Si, par exemple, vous étiquetez votre navigateur de fichiers et votre éditeur de texte du label "Mon bureau" et que vous demandez à voir tous les clients portant ce label ; Wmii ouvrira automatiquement ceux-ci dans la vue " Mon bureau " et créera cette vue si nécessaire. Il est possible d'associer plusieurs labels à un seul et même client... ou de n'associer un client à aucun label.
Un tag est une chaîne de caractères, un label, un nom, associé à un ou plusieurs clients. Si, par exemple, vous étiquetez votre navigateur de fichiers et votre éditeur de texte du label "Mon bureau" et que vous demandez à voir tous les clients portant ce label ; Wmii ouvrira automatiquement ceux-ci dans la vue " Mon bureau " et créera cette vue si nécessaire. Il est possible d'associer plusieurs labels à un seul et même client... ou de n'associer un client à aucun label.
==== Vues ====
==== Vues ====
Une vue est l'ensemble des clients portant le même label, on peut la rapprocher de " l'espace de travail " d'autres gestionnaires de fenêtres, mais en plus puissant ! Vous ne pouvez voir qu'une seule vue à la fois. Si un client possède un label, Wmii créera une vue portant ce label pour afficher ce client, et refusera d'ouvrir ce client dans une autre vue que celle-là. Quand vous fermez le dernier programme d'une vue, celle-ci est détruite.
Une vue est l'ensemble des clients portant le même label, on peut la rapprocher de ''l'espace de travail'' d'autres gestionnaires de fenêtres, mais en plus puissant ! Vous ne pouvez voir qu'une seule vue à la fois. Si un client possède un label, Wmii créera une vue portant ce label pour afficher ce client, et refusera d'ouvrir ce client dans une autre vue que celle-là. Quand vous fermez le dernier programme d'une vue, celle-ci est détruite.
==== Colonnes ====
==== Colonnes ====
Une colonne est une partie distincte d'une vue où les clients sont automatiquement disposés verticalement. Si vous ouvrez un deuxième client dans une vue, vous pouvez choisir de ne garder qu'une seule colonne ; ces deux clients seront alors disposés l'un au dessus de l'autre. Vous pouvez aussi choisir d'ouvrir une seconde colonne ; les deux clients seront alors disposés côte à côte.
Une colonne est une partie distincte d'une vue où les clients sont automatiquement disposés verticalement. Si vous ouvrez un deuxième client dans une vue, vous pouvez choisir de ne garder qu'une seule colonne ; ces deux clients seront alors disposés l'un au dessus de l'autre. Vous pouvez aussi choisir d'ouvrir une seconde colonne ; les deux clients seront alors disposés côte à côte.
Ligne 41 : Ligne 42 :
Il y a trois façons de mettre en page les clients dans une colonne :
Il y a trois façons de mettre en page les clients dans une colonne :


* Par défaut : Chaque client d'une colonne est réparti verticalement de façon égale dans la colonne.
* '''Par défaut''' : Chaque client d'une colonne est réparti verticalement de façon égale dans la colonne.
* Maximisé  : Le client maximisé occupe toute la colonne, seul ce client est visible dans cette colonne.
* '''Maximisé'''   : Le client maximisé occupe toute la colonne, seul ce client est visible dans cette colonne.
* Empilé    : Les clients d'une même colonne sont empilés les uns au dessus des autres, mais seul celui possédant le focus est visible entièrement. Les autres ne montrent que leur barre de titre.  
* '''Empilé'''     : Les clients d'une même colonne sont empilés les uns au dessus des autres, mais seul celui possédant le focus est visible entièrement. Les autres ne montrent que leur barre de titre.  


Il existe aussi le mode " plein écran " où on ne peut parler de colonne puisque le programme maximisé occupe tout l'écran, sans même montrer sa barre de titre.
Il existe aussi le mode '''plein écran''' où on ne peut pas parler de colonne puisque le programme maximisé occupe tout l'écran, sans même montrer sa barre de titre.


Enfin le mode " flottant " permet d'avoir un affichage classique des applications.
Enfin le mode '''flottant''' permet d'avoir un affichage classique des applications.
=== Raccourcis clavier par défaut ===
=== Raccourcis clavier par défaut ===
Les raccourcis clavier sont composés d'une touche de modification, qu'on notera " Mod ", à laquelle on associe une ou plusieurs touches. Par défaut Wmii propose d'utiliser la touche " Alt ". On verra plus tard que tout ceci est facilement modifiable.
Les raccourcis clavier sont composés d'une touche de modification, qu'on notera " Mod ", à laquelle on associe une ou plusieurs touches. Par défaut Wmii propose d'utiliser la touche " Alt ". On verra plus tard que tout ceci est facilement modifiable.


* Mod-entrée : ouverture d'un terminal
* Mod-entrée : Ouverture d'un terminal
* Mod-p : ouverture d'un menu dans la barre du bas. Tapez le début du nom du programme à lancer pour faire le tri.
* Mod-p : Ouverture d'un menu dans la barre du bas. Tapez le début du nom du programme à lancer pour faire le tri. "Echap" ou "Esc" pour annuler.
* Mod-d : Mode d'affichage par défaut.
* Mod-d : Mode d'affichage par défaut.
* Mod-s : Mode empilé.
* Mod-s : Mode empilé.
Ligne 58 : Ligne 59 :
* Mod-j : Donner le focus à la fenêtre plus bas, ou basculer le focus s'il n'y a que 2 clients dans la colonne.
* Mod-j : Donner le focus à la fenêtre plus bas, ou basculer le focus s'il n'y a que 2 clients dans la colonne.
* Mod-k : Donner le focus à la fenêtre plus haut, ou basculer le focus s'il n'y a que 2 clients dans la colonne.
* Mod-k : Donner le focus à la fenêtre plus haut, ou basculer le focus s'il n'y a que 2 clients dans la colonne.
* Mod-shift-j : déplacer la fenêtre vers le bas.
* Mod-shift-j : Déplacer la fenêtre vers le bas.
* Mod-shift-k : déplacer la fenêtre vers le haut.
* Mod-shift-k : Déplacer la fenêtre vers le haut.
* Mod-a : menu des actions disponibles ( par exemple " quit " pour quitter Wmii.
* Mod-a : Menu des actions disponibles ( par exemple " quit " pour quitter Wmii ).Les actions affichées comprennent, outre celles spécifiques à Wmii, tous les fichiers exécutables situés dans ~/wmii-3.5."Echap" pour annuler.
* Mod-shift-h : Envoyer la fenêtre qui a le focus dans la colonne de gauche.
* Mod-shift-h : Envoyer la fenêtre qui a le focus dans la colonne de gauche.
* Mod-shift-l : Envoyer la fenêtre qui a le focus dans la colonne de droite.
* Mod-shift-l : Envoyer la fenêtre qui a le focus dans la colonne de droite.
* Mod-shift-espace : Basculer la fenêtre qui a le focus en mode flottant ou inversement. La navigation ne se fera plus que dans la couche flottante.
* Mod-shift-espace : Basculer la fenêtre qui a le focus en mode flottant ou inversement. La navigation ne se fera plus que dans la couche flottante.
* Mod-espace : passer de la couche flottante à la couche normale.
* Mod-espace : Passer de la couche flottante à la couche normale.
* Mod-shift-c : Fermer le client qui a le focus.
* Mod-shift-c : Fermer le client qui a le focus.
'''Nota''' : Le terminal qui s'ouvre en faisant '''Mod-entrée''' est celui définit dans :
<pre>
WMII_TERM="x-terminal-emulator"
</pre>
rien ne vous empêche de le changer par celui que vous préférez. Par exemple :
<pre>
WMII_TERM="roxterm"
</pre>
=== Actions de la souris ===
Lorsque vous ouvrez deux clients dans une colonne, ceux-ci sont disposés verticalement l'un au dessus de l'autre et chacun occupe une moitié de l'écran. Pour modifier la hauteur d'un client, il suffit de cliquer avec le bouton gauche de la souris dans le petit carré situé à l'extrémité gauche de la barre de titre et de faire glisser.
De même, cliquer avec le bouton gauche de la souris sur la séparation entre deux colonnes et faire glisser permet de modifier la largeur de celles-ci.
Pour déplacer une fenêtre en mode flottant il suffit d'appuyer sur la touche Mod et de faire glisser cette fenêtre.
Enfin, un clic droit sur une barre de titre fait apparaître un menu.


== Personnaliser Wmii ==
== Personnaliser Wmii ==
Ligne 363 : Ligne 381 :


WMII_BACKGROUND est la couleur du papier peint et WMII_FONT la police de caractère utilisée dans les barres de titre et de statut.
WMII_BACKGROUND est la couleur du papier peint et WMII_FONT la police de caractère utilisée dans les barres de titre et de statut.
Pour fixer votre police de caractère vous pouvez vous aider d'outil comme '''xfontsel''' ( à lancer dans une console ). La dénomination utilisée est celle d'XWindow (X Logical Font Description), les '''*''' représentent des champs non définis. Ceux-ci sont, entre autres, le nom du fondeur, le nom de la police, la graisse ... etc.
Pour fixer votre police de caractère, vous pouvez vous aider d'outils comme '''xfontsel''' ( à lancer dans une console ). La dénomination utilisée est celle d'XWindow (X Logical Font Description), les '''*''' représentent des champs non définis. Ceux-ci sont, entre autres, le nom du fondeur, le nom de la police, la graisse ... etc.


Il est à noter que la taille de la police de caractère joue sur la hauteur des barres de titre et de statut. Plus la police sera grande, plus les barres seront hautes.
Il est à noter que la taille de la police de caractère joue sur la hauteur des barres de titre et de statut. Plus la police sera grande, plus les barres seront hautes.
Ligne 373 : Ligne 391 :
!
!
</pre>
</pre>
'''58+42''' indique que, lorsque vous créez une deuxième colonne, la première occupera 58 % de la largeur de votre écran et la seconde 42 %. C'est, bien entendu, une affaire de gout personnel. La seule chose qui compte est que la somme des deux chiffres fasse 100.
'''58+42''' indique que, lorsque vous créez une deuxième colonne, la première occupera 58 % de la largeur de votre écran et la seconde 42 %. C'est, bien entendu, une affaire de goût personnel. La seule chose qui compte est que la somme des deux chiffres fasse 100. Ceci sont les valeurs par défaut à l'ouverture, la largeur des colonnes peut être modifiée à la souris avec "clic gauche et faire glisser".
<pre>
<pre>
# Proportionnalité des colonnes
# Proportionnalité des colonnes
Ligne 380 : Ligne 398 :
!
!
</pre>
</pre>
[[Catégorie:Gestionnaires de fenêtres]]
 
...en cours... [[Utilisateur:Le fada|le_fada... toujours à l&#39;ouest !]] 26 janvier 2010 à 06:35 (UTC)
==== Mode de placement des clients ====
<pre>
# Tagging Rules
wmiir write /tagrules <<!
/XMMS.*/ -> ~
/MPlayer.*/ -> ~
/.*/ -> sel
/.*/ -> 1
!
</pre>
Ici on peut assigner à des clients particuliers des règles particulières. Ci-dessus, on peut voir que toutes les fenètres dont le nom commence par XMMS et MPlayer s'ouvriront en mode flottant. C'est la signification du tilde " ~ ". On peut combiner plusieurs règles. Par exemple en écrivant '''/MPlayer.*/ -> ~+Multimédia''', MPlayer s'ouvrira dans une vue nommée Multimédia '''et''' en mode flottant.
Les deux dernières lignes, /.*/ -> sel et /.*/ -> 1, indiquent que par défaut un client n'ayant aucun label particulier s'ouvrira dans la vue courante et que, s'il n'y a aucune vue active, celle qui s'ouvrira se nommera " 1 ".
<pre>
# Règles de label et de placement particulières
wmiir write /tagrules <<!
/XMMS.*/ -> ~
/MPlayer.*/ -> ~+Multimédia
/.*/ -> sel
/.*/ -> 1
!
</pre>
 
==== Les informations de la barre de statut ====
<pre>
# Status Bar Info
status() {
echo -n $(uptime | sed 's/.*://; s/,//g') '|' $(date)
}
</pre>
La fonction status() se "contente" de réaliser la commande située entre les deux crochets. Le résultat est affiché dans la barre, en bas à droite.
 
Par défaut, les informations sont la charge moyenne du processeur sur les 1, 5 et 15 dernières minutes ainsi que la date.
C'est, bien sûr, personnalisable. On peut même y inclure ses propres scripts :
<pre>
# Informations de la barre
status() {
echo -n 'Nous sommes le' $(date +"%d/%m/%Y et il est %H:%M:%S ")'***' Messages Gmail : $(~/.scripts/get_gmail.sh)  non lu'(s) ***'
}
</pre> affichera par exemple la date dans un format plus convivial et le nombre de messages non lus sur votre messagerie Gmail.
[[Fichier:wmii_mail.png]]
 
Pour information, cette dernière fonction peut être réalisée, entre autres, par le script get_gmail.sh
<pre>#!/bin/bash                                                                                                                                                           
gmail_login="votre_login"
gmail_password="votre_mot_de_passe"                                                                                                                                     
                                                                                                                                                                       
dane="$(wget --secure-protocol=TLSv1 --timeout=3 -t 1 -q -O - https://${gmail_login}:${gmail_password}@mail.google.com/mail/feed/atom --no-check-certificate )"   
line="$(echo "$dane" | grep 'fullcount')"
gmail="$(echo "$line" | sed "s/<fullcount>\(.*\)<\/fullcount>/\1/")"
if [ -z "$gmail" ]; then                                           
        echo "Indisponible"                                                                                                                                                       
else                                                                                                                                                                   
        echo "$gmail"                                                                                                                                                   
fi
</pre> placé, ici, dans le dossier caché .scripts du dossier personnel... ( À modifier, bien entendu, avec vos propres identifiants )
 
Voici un autre exemple de personnalisation de la barre de statut qui affiche le morceau joué par [http://fr.wikipedia.org/wiki/Music_Player_Daemon mpd] et le statut de la batterie (pour un ordinateur portable donc) en plus des options par défaut :
# Status Bar Info
status() {
echo -n $(mpc | grep "-") `mpc | grep "%)" | cut -d '#' -f 1` `mpc | grep "%)" | cut -d '(' -f 2 | cut -d ')' -f 1` '|'$(uptime | sed 's/.*://; s/,//g') '|' $(cat /sys/$
)
}
 
==== Gestion des évenements ====
<pre># Event processing                                      # Gestion des évenements par Wmii
#  Processed later by `wmiiloop' and evaled.
#  Duplicate the eval line and replace 'eval' with 'echo' for details.
eventstuff() {
cat <<'!'
# Events
Event Start
case "$1" in
wmiirc)
exit;
esac
Event Key
fn=$(echo "$@" | sed 's/[^a-zA-Z_0-9]/_/g')
Key_$fn "$@"
Event CreateTag
echo "$WMII_NORMCOLORS" "$@" | wmiir create "/lbar/$@"
Event DestroyTag
wmiir remove "/lbar/$@"
Event FocusTag
wmiir xwrite "/lbar/$@" "$WMII_FOCUSCOLORS" "$@"
Event UnfocusTag
wmiir xwrite "/lbar/$@" "$WMII_NORMCOLORS" "$@"
Event UrgentTag
shift
wmiir xwrite "/lbar/$@" "*$@"
Event NotUrgentTag
shift
wmiir xwrite "/lbar/$@" "$@"
Event LeftBarClick
shift
wmiir xwrite /ctl view "$@"
# Actions qui s'affichent avec Mod-a
Action quit                                # pour quitter Wmii
wmiir xwrite /ctl quit
Action exec
wmiir xwrite /ctl exec "$@"
Action rehash                              # mise à jour du menu qui s'affiche avec Mod-p
proglist $PATH >$progsfile
Action status
set +xv
if wmiir remove /rbar/status 2>/dev/null; then
sleep 2
fi
echo "$WMII_NORMCOLORS" | wmiir create /rbar/status
while status | wmiir write /rbar/status; do
sleep 1
done
</pre>
==== Compléter le menu du clic droit sur la barre de titre ====
<pre>Event ClientMouseDown
client=$1; button=$2
case "$button" in
3)
do=$(eval $WMII_9MENU -initial "${menulast:-SomeRandomName}" Nop Delete Fullscreen)
case "$do" in
Delete)
wmiir xwrite /client/$client/ctl kill;;
Fullscreen)
wmiir xwrite /client/$client/ctl Fullscreen on;;
esac
menulast=${do:-"$menulast"}
esac
</pre>
Quand vous faites un clic droit sur la barre de titre d'un client, vous voyez apparaitre un menu comprenant les éléments "Nop, Delete et Fullscreen". Comme vous pouvez vous en douter "Nop" ne fait rien, "Delete" ferme la fenètre et "Fullscreen" met le client en plein écran.
 
On peut facilement franciser ce menu et lui ajouter quelques éléments, car, même si la gestion au clavier est productive, quelques actions à la souris sont parfois bien utiles.
 
Ce qui pourrait donner :
<pre>
Event ClientMouseDown                                                # Le bouton droit
client=$1; button=$2                                # de la souris est pressé
case "$button" in                                    # sur la barre de titre
3)
do=$(eval $WMII_9MENU -initial "${menulast:-SomeRandomName}" Annuler Fermer PleinEcran Vers_la_droite Vers_la_gauche Vers_le_bas Vers_le_haut) # affiché avec un clic-droit sur la barre  de titre
case "$do" in
Fermer)
wmiir xwrite /client/$client/ctl kill;;                        # on tue le client
PleinEcran)
wmiir xwrite /client/$client/ctl Fullscreen on;;              # on le met en plein écran
Vers_la_droite)
wmiir xwrite /tag/sel/ctl send sel right;;                    # on l'envoie dans la colonne de droite qu'on crée si besoin
Vers_la_gauche)
wmiir xwrite /tag/sel/ctl send sel left;;                      # on l'envoie dans la colonne de gauche qu'on crée si besoin
                        Vers_le_bas)
                                wmiir xwrite /tag/sel/ctl send sel down;;                      # on l'envoie vers le bas
                        Vers_le_haut)
                                wmiir xwrite /tag/sel/ctl send sel up;;                        # on l'envoie vers le haut
esac
menulast=${do:-"$menulast"}
esac
</pre>
À noter que Wmii utilise la fonction wmiir pour lire et écrire dans le pseudo système de fichier utilisé, Plan9 :
<pre>
$ wmiir ls /
client/
colrules
ctl
event
keys
lbar/
rbar/
tag/
tagrules
</pre>
 
==== Ajouter des raccourcis clavier et un menu personnel ====
<pre># Key Bindings
Key $MODKEY-Control-t
case $(wmiir read /keys | wc -l | tr -d ' \t\n') in
0|1)
echo -n $Keys | tr ' ' '\012' | wmiir write /keys
wmiir xwrite /ctl grabmod $MODKEY;;
*)
wmiir xwrite /keys $MODKEY-Control-t
wmiir xwrite /ctl grabmod Mod3;;
esac
Key $MODKEY-space                                                    # passer de la couche flottante et vice-versa
wmiir xwrite /tag/sel/ctl select toggle
Key $MODKEY-d
wmiir xwrite /tag/sel/ctl colmode sel default                # revenir au mode par défaut
Key $MODKEY-s
wmiir xwrite /tag/sel/ctl colmode sel stack
Key $MODKEY-m                                                        # maximiser le client qui a le focus
wmiir xwrite /tag/sel/ctl colmode sel max
Key $MODKEY-a                                                        # afficher le menu des actions
Action $(actionlist | eval $WMII_MENU) &
Key $MODKEY-p                                                        # afficher le menu des applications
sh -c "$(eval $WMII_MENU <$progsfile)" &
Key $MODKEY-t                                                        # entrer un label pour une nouvelle vue et l'afficher
wmiir xwrite /ctl "view $(tagsmenu)" &
Key $MODKEY-Return                                                    # ouvrir le terminal défini par défaut.
eval $WMII_TERM &
Key $MODKEY-Shift-space                                              # mettre le client qui a le focus en mode flottant.
wmiir xwrite /tag/sel/ctl send sel toggle
Key $MODKEY-f                                                        # mettre le client qui a le focus en plein écran, sans barre de titre et vice-versa.
wmiir xwrite /client/sel/ctl Fullscreen toggle
Key $MODKEY-Shift-c                                                  # fermer le client qui a le focus.
wmiir xwrite /client/sel/ctl kill
Key $MODKEY-Shift-t                                                  # renommer la vue active.
wmiir xwrite "/client/$(wmiir read /client/sel/ctl)/tags" "$(tagsmenu)" &
Key $MODKEY-$LEFT                                                    # mettre le focus sur le client situé à gauche s'il existe.
wmiir xwrite /tag/sel/ctl select left
Key $MODKEY-$RIGHT                                                    # mettre le focus sur le client situé à droite s'il existe.
wmiir xwrite /tag/sel/ctl select right
Key $MODKEY-$DOWN                                                    # mettre le focus sur le client situé plus bas s'il existe.
wmiir xwrite /tag/sel/ctl select down
Key $MODKEY-$UP                                                      # mettre le focus sur le client situé plus haut s'il existe.
wmiir xwrite /tag/sel/ctl select up
Key $MODKEY-Shift-$LEFT                                              # envoyer le client qui a le focus vers la colonne de gauche, la créer si besoin.
wmiir xwrite /tag/sel/ctl send sel left
Key $MODKEY-Shift-$RIGHT                                              # envoyer le client qui a le focus vers la colonne de droite, la créer si besoin.
wmiir xwrite /tag/sel/ctl send sel right
Key $MODKEY-Shift-$DOWN                                              # envoyer le client qui a le focus vers le bas.
wmiir xwrite /tag/sel/ctl send sel down
Key $MODKEY-Shift-$UP                                                # envoyer le client qui a le focus vers le haut.
wmiir xwrite /tag/sel/ctl send sel up
!
for i in 0 1 2 3 4 5 6 7 8 9; do
cat <<!
Key $MODKEY-$i                                                        # afficher la vue n° "i", avec i compris entre 0 et 9.
wmiir xwrite /ctl view "$i"
Key $MODKEY-Shift-$i                                                  # envoyer le client qui a le focus vers la vue n°i, avec i compris entre 0 et 9. La créer si besoin.
wmiir xwrite /client/sel/tags "$i"
!
done
}
</pre>
On peut voir que la syntaxe est toujours identique. Donc, si l'on veut, par exemple, créer un raccourci Mod-i qui ouvre Iceweasel, il suffit de rajouter :
<pre>
        Key $MODKEY-i
                iceweasel &
</pre>
Attention à bien respecter les tabulations ; celles-ci ont leur importance. Pour que le nouveau raccourci soit pris en compte il faut relire le fichier wmiirc par '''Mod-a''' puis '''wmiirc'''.
 
===== Un menu avec ses applications préférées =====
Le menu affiché par Mod-p est pratique. Il suffit de taper une partie du nom de l'application que l'on veut lancer pour qu'il fasse le tri et n'affiche plus que les programmes dont le nom comprend la chaîne de caractères que l'on vient de taper. Ce menu affiche la multitude d'applications présente sur votre disque dur.
 
On peut créer son propre menu personnel, avec ses applications préférées et lui assigner un raccourci :
<pre>
        Key $MODKEY-x
sh -c "$(eval $WMII_MENU <~/.wmii-3.5/liste_programme)" &
</pre>
On vient donc de fabriquer un menu qui s'affichera avec '''Mod-x'''. La liste des programmes (en fait la commande qui les lance) sera dans un simple fichier texte, que vous devez créer et que j'ai nommé ici '''~/.wmii-3.5/liste_programme'''. La seule contrainte de ce fichier est qu'il ne contienne qu'une seule commande par ligne. Par exemple :
<pre>
openoffice.org
iceweasel
roxterm
nitrogen ~/fonds
roxterm
vlc
gimp
xfwrite
</pre>
Rien ne vous empêche d'ajouter des arguments à ces commandes, comme vous le feriez en lançant ces applications à partir d'un terminal.
==== Lancer des applications au démarrage ====
Pour lancer des applications au démarrage de Wmii il suffit de les placer '''avant''' la section
<pre>
# Stop any running instances of wmiirc
echo Start wmiirc | wmiir write /event || exit 1
 
wmiir read /event |
while read event; do
 
.... etc
</pre>
 
Si, par exemple on veut lancer iceweasel au démarrage il suffit d'ajouter :<br> iceweasel & <br>
 
On peut aussi créer dans le répertoire '''~/.wmii-3.5/''' un fichier exécutable '''autostart.sh''' qui se chargera de la tâche et rajouter dans le '''wmiirc''' :
<pre>
#  Lancement de programme(s) au démarrage
cd $HOME/.wmii-3.5/ # On se place dans le bon répertoire
./autostart.sh & # On lance le script contenant les programmes à démarrer
cd $HOME # On revient dans notre HOME
</pre>
 
autostart.sh contiendra un programme à lancer par ligne, avec éventuellement leurs arguments. Par exemple :
<pre>
nitrogen --restore      # restaure le dernier fond d'écran
conky &                  # lance conky sur le fond d'écran
</pre>
 
==== Ajouter un fond d'écran ====
 
Wmii ne gérant pas le fond d'écran vous devez utiliser un programme externe pour le faire. Ils sont nombreux et on peut citer feh, wmsetbg, bsetbg, nitrogen, qiv...etc.
===== Fond d'écran classique =====
Vous remplacerez (ou simplement commenterez) dans le fichier de configuration de wmii (~/.wmii-3.5/wmiirc) :
<pre>
# Misc
progsfile="$WMII_NS_DIR/.proglist"
Action status &
proglist $PATH >$progsfile &
 
xsetroot -solid "$WMII_BACKGROUND" &
</pre>
la ligne '''xsetroot -solid "$WMII_BACKGROUND" &''' par une commande permettant de fixer fond d'écran. Par exemple avec feh :
<pre>
feh --bg-scale /chemin/vers/votre/image &
</pre>
L'inconvenient réside dans le fait que pour changer de fond d'écran, il faut modifier le chemin vers votre image.
 
Pour ma part je préfère donc utiliser '''nitrogen''' qui propose une interface graphique pour changer le papier-peint. En le plaçant dans mon menu personnel avec en argument le répertoire dans lequel il doit chercher des images, (nitrogen ~/fonds), je choisis le nouvel arrière-plan en seulement 2 clics de souris.
Il suffit de le mettre dans la liste des programme à démarrer automatiquement avec l'argument '''nitrogen --restore''' pour retrouver automatiquement le dernier fond choisi.
 
===== Fond d'écran dynamique =====
 
[http://spiegl.de/qiv/ qiv] permet d'obtenir un fond d'écran dynamique.
 
Après avoir installer qiv, modifiez le fichier ~/.wmii-3.5/wmiirc en commentant la ligne contenant '''xsetroot''' et en rajoutant une ligne pour qiv :
#xsetroot -solid "$WMII_BACKGROUND" &
qiv -xtsrud 600 /home/utilisateur/images/fond\ d\'écran/ &
 
Cette commande qiv met en fond d'écran centré (x), en redimensionnant les images pour qu'elles ne dépassent pas de l'écran (t), selon un diaporama (s), aléatoire (r), d'une durée de 600 secondes par image (d), les images du dossier /home/utilisateur/images/fond\ d\'écran/ et de ses sous-dossiers (u). Ainsi, toutes les 10 minutes (600 secondes), le fond d'écran change et il suffit de rajouter des images au dossier spécifié pour qu'elles deviennent des fonds d'écran.
 
== Pour aller plus loin ==
 
Wmii ne se modifie pas uniquement par l'utilisation de scripts 'sh' ( compatibles Posix ), il y a d'autres langages permettant de programmer le comportement de Wmii comme Ruby, Python, Haskell... Ceci peut se réaliser par l'application de "patchs" ou de modules externes à Wmii.
 
== Liens utiles  ==
 
'''(en)''' [http://wmii.suckless.org/ Le site officiel de Wmii]<br>
'''(en)'''[http://wmii.googlecode.com/hg/doc/wmii.pdf Guide de Wmii en pdf]
 
[[Catégorie:Gestionnaires_de_fenetres]]
[[Catégorie:Tillings]]

Dernière version du 20 août 2014 à 04:59

Wmii ( Window Manager Improved 2 ) est un gestionnaire de fenêtres en mosaïque. A ce titre, il s'occupe automatiquement du placement des fenêtres en utilisant le maximum d'espace possible, sans que celles-ci ne se chevauchent. Il est entièrement pilotable au clavier, grâce à des raccourcis modifiables, mais permet également l'utilisation de la souris.

Attention, ce n'est pas un environnement de bureau, il n'installera donc aucune autre application, ne gère pas le bureau, n'y place ni icône ni fond d'écran ; sur les portables, il n'éteindra pas votre ordinateur lorsque la batterie sera vide. Bien entendu tout ceci peut être fait, depuis Wmii, par des applications extérieures.

À quoi ressemble t-il ?

Installation

Wmii est disponible dans toutes les branches de Debian (stable, testing et unstable), dans la section "main". Il vous suffit donc de passer par votre installateur de paquet préféré, ou en console par un simple :

# aptitude install wmii

Une nouvelle entrée sera ajoutée dans votre gestionnaire de connexion. Si vous n'utilisez pas de gestionnaire de connexion, vous devrez éditer le fichier ~/.xinitrc, y ajouter exec wmii et commenter la ligne concernant votre session actuelle.

Configuration par défaut

Lors de son installation Wmii crée le fichier /etc/X11/wmii-3.5/wmiirc. Celui-ci est un script exécutable contenant la configuration par défaut prévue par l'équipe de développement du projet. Ce script est exécuté automatiquement à l'ouverture de Wmii, sauf s'il existe dans votre répertoire personnel un fichier /.wmii-3.5/wmiirc. Ce dernier sera alors prioritaire, manière commode de réaliser une configuration personnelle sans détruire la configuration de base, ainsi que d'avoir un comportement par utilisateur.

Ce fichier n'étant pas créé par défaut, créez-le vous même par une simple copie de l'original :

$ cp /etc/X11/wmii-3.5/wmiirc ~/.wmii-3.5/wmiirc

et rendez le exécutable par :

$ chmod +x ~/.wmii-3.5/wmiirc

Terminologie

Clients

Un client est un programme fournissant une interface graphique, par exemple votre navigateur internet, un terminal, un éditeur de texte, ...

Focus

Le client qui a le focus est le client activé, c'est-à-dire celui qui peut recevoir une action d'entrée, par exemple si vous tapez une commande dans votre terminal, c'est lui qui a le focus. Un seul client à la fois peut avoir le focus.

Événements

C'est un message, généré par le serveur X, à l'intention du client qui a le focus. Par exemple en cliquant dans une fenêtre, vous générez un événement à destination de cette fenêtre..

Tag ou Label

Un tag est une chaîne de caractères, un label, un nom, associé à un ou plusieurs clients. Si, par exemple, vous étiquetez votre navigateur de fichiers et votre éditeur de texte du label "Mon bureau" et que vous demandez à voir tous les clients portant ce label ; Wmii ouvrira automatiquement ceux-ci dans la vue " Mon bureau " et créera cette vue si nécessaire. Il est possible d'associer plusieurs labels à un seul et même client... ou de n'associer un client à aucun label.

Vues

Une vue est l'ensemble des clients portant le même label, on peut la rapprocher de l'espace de travail d'autres gestionnaires de fenêtres, mais en plus puissant ! Vous ne pouvez voir qu'une seule vue à la fois. Si un client possède un label, Wmii créera une vue portant ce label pour afficher ce client, et refusera d'ouvrir ce client dans une autre vue que celle-là. Quand vous fermez le dernier programme d'une vue, celle-ci est détruite.

Colonnes

Une colonne est une partie distincte d'une vue où les clients sont automatiquement disposés verticalement. Si vous ouvrez un deuxième client dans une vue, vous pouvez choisir de ne garder qu'une seule colonne ; ces deux clients seront alors disposés l'un au dessus de l'autre. Vous pouvez aussi choisir d'ouvrir une seconde colonne ; les deux clients seront alors disposés côte à côte.

Mise en page

Il y a trois façons de mettre en page les clients dans une colonne :

  • Par défaut : Chaque client d'une colonne est réparti verticalement de façon égale dans la colonne.
  • Maximisé  : Le client maximisé occupe toute la colonne, seul ce client est visible dans cette colonne.
  • Empilé  : Les clients d'une même colonne sont empilés les uns au dessus des autres, mais seul celui possédant le focus est visible entièrement. Les autres ne montrent que leur barre de titre.

Il existe aussi le mode plein écran où on ne peut pas parler de colonne puisque le programme maximisé occupe tout l'écran, sans même montrer sa barre de titre.

Enfin le mode flottant permet d'avoir un affichage classique des applications.

Raccourcis clavier par défaut

Les raccourcis clavier sont composés d'une touche de modification, qu'on notera " Mod ", à laquelle on associe une ou plusieurs touches. Par défaut Wmii propose d'utiliser la touche " Alt ". On verra plus tard que tout ceci est facilement modifiable.

  • Mod-entrée : Ouverture d'un terminal
  • Mod-p : Ouverture d'un menu dans la barre du bas. Tapez le début du nom du programme à lancer pour faire le tri. "Echap" ou "Esc" pour annuler.
  • Mod-d : Mode d'affichage par défaut.
  • Mod-s : Mode empilé.
  • Mod-m : Mode maximisé. On revient par Mod-d ou Mod-s
  • Mod-j : Donner le focus à la fenêtre plus bas, ou basculer le focus s'il n'y a que 2 clients dans la colonne.
  • Mod-k : Donner le focus à la fenêtre plus haut, ou basculer le focus s'il n'y a que 2 clients dans la colonne.
  • Mod-shift-j : Déplacer la fenêtre vers le bas.
  • Mod-shift-k : Déplacer la fenêtre vers le haut.
  • Mod-a : Menu des actions disponibles ( par exemple " quit " pour quitter Wmii ).Les actions affichées comprennent, outre celles spécifiques à Wmii, tous les fichiers exécutables situés dans ~/wmii-3.5."Echap" pour annuler.
  • Mod-shift-h : Envoyer la fenêtre qui a le focus dans la colonne de gauche.
  • Mod-shift-l : Envoyer la fenêtre qui a le focus dans la colonne de droite.
  • Mod-shift-espace : Basculer la fenêtre qui a le focus en mode flottant ou inversement. La navigation ne se fera plus que dans la couche flottante.
  • Mod-espace : Passer de la couche flottante à la couche normale.
  • Mod-shift-c : Fermer le client qui a le focus.

Nota : Le terminal qui s'ouvre en faisant Mod-entrée est celui définit dans :

WMII_TERM="x-terminal-emulator"

rien ne vous empêche de le changer par celui que vous préférez. Par exemple :

WMII_TERM="roxterm"

Actions de la souris

Lorsque vous ouvrez deux clients dans une colonne, ceux-ci sont disposés verticalement l'un au dessus de l'autre et chacun occupe une moitié de l'écran. Pour modifier la hauteur d'un client, il suffit de cliquer avec le bouton gauche de la souris dans le petit carré situé à l'extrémité gauche de la barre de titre et de faire glisser.

De même, cliquer avec le bouton gauche de la souris sur la séparation entre deux colonnes et faire glisser permet de modifier la largeur de celles-ci.

Pour déplacer une fenêtre en mode flottant il suffit d'appuyer sur la touche Mod et de faire glisser cette fenêtre.

Enfin, un clic droit sur une barre de titre fait apparaître un menu.

Personnaliser Wmii

Le fichier wmiirc d'origine

#!/bin/sh -f
# Configure wmii

# Configuration Variables
MODKEY=Mod1
UP=k
DOWN=j
LEFT=h
RIGHT=l

# Colors tuples: "<text> <background> <border>"
WMII_NORMCOLORS='#888888 #222222 #333333'
WMII_FOCUSCOLORS='#ffffff #285577 #4c7899'

WMII_BACKGROUND='#333333'
WMII_FONT='fixed'

set -- $(echo $WMII_NORMCOLORS $WMII_FOCUSCOLORS)
WMII_MENU="dmenu -b -fn '$WMII_FONT' -nf '$1' -nb '$2' -sf '$4' -sb '$5'"
WMII_9MENU="wmii9menu -font '$WMII_FONT' -nf '$1' -nb '$2' -sf '$4' -sb '$5' -br '$6'"
WMII_TERM="x-terminal-emulator"

# Column Rules
wmiir write /colrules <<!
/.*/ -> 58+42
!

# Tagging Rules
wmiir write /tagrules <<!
/XMMS.*/ -> ~
/MPlayer.*/ -> ~
/.*/ -> sel
/.*/ -> 1
!

# Status Bar Info
status() {
	echo -n $(uptime | sed 's/.*://; s/,//g') '|' $(date)
}

# Event processing
#  Processed later by `wmiiloop' and evaled.
#  Duplicate the eval line and replace 'eval' with 'echo' for details.
eventstuff() {
	cat <<'!'
	# Events
	Event Start
		case "$1" in
		wmiirc)
			exit;
		esac
	Event Key
		fn=$(echo "$@" | sed 's/[^a-zA-Z_0-9]/_/g')
		Key_$fn "$@"
	Event CreateTag
		echo "$WMII_NORMCOLORS" "$@" | wmiir create "/lbar/$@"
	Event DestroyTag
		wmiir remove "/lbar/$@"
	Event FocusTag
		wmiir xwrite "/lbar/$@" "$WMII_FOCUSCOLORS" "$@"
	Event UnfocusTag
		wmiir xwrite "/lbar/$@" "$WMII_NORMCOLORS" "$@"
	Event UrgentTag
		shift
		wmiir xwrite "/lbar/$@" "*$@"
	Event NotUrgentTag
		shift
		wmiir xwrite "/lbar/$@" "$@"
	Event LeftBarClick
		shift
		wmiir xwrite /ctl view "$@"
	# Actions
	Action quit
		wmiir xwrite /ctl quit
	Action exec
		wmiir xwrite /ctl exec "$@"
	Action rehash
		proglist $PATH >$progsfile
	Action status
		set +xv
		if wmiir remove /rbar/status 2>/dev/null; then
			sleep 2
		fi
		echo "$WMII_NORMCOLORS" | wmiir create /rbar/status
		while status | wmiir write /rbar/status; do
			sleep 1
		done
	Event ClientMouseDown
		client=$1; button=$2
		case "$button" in
		3)
			do=$(eval $WMII_9MENU -initial "${menulast:-SomeRandomName}" Nop Delete Fullscreen)
			case "$do" in
			Delete)
				wmiir xwrite /client/$client/ctl kill;;
			Fullscreen)
				wmiir xwrite /client/$client/ctl Fullscreen on;;
			esac
			menulast=${do:-"$menulast"}
		esac
	# Key Bindings
	Key $MODKEY-Control-t
		case $(wmiir read /keys | wc -l | tr -d ' \t\n') in
		0|1)
			echo -n $Keys | tr ' ' '\012' | wmiir write /keys
			wmiir xwrite /ctl grabmod $MODKEY;;
		*)
			wmiir xwrite /keys $MODKEY-Control-t
			wmiir xwrite /ctl grabmod Mod3;;
		esac
	Key $MODKEY-space
		wmiir xwrite /tag/sel/ctl select toggle
	Key $MODKEY-d
		wmiir xwrite /tag/sel/ctl colmode sel default
	Key $MODKEY-s
		wmiir xwrite /tag/sel/ctl colmode sel stack
	Key $MODKEY-m
		wmiir xwrite /tag/sel/ctl colmode sel max
	Key $MODKEY-a
		Action $(actionlist | eval $WMII_MENU) &
	Key $MODKEY-p
		sh -c "$(eval $WMII_MENU <$progsfile)" &
	Key $MODKEY-t
		wmiir xwrite /ctl "view $(tagsmenu)" &
	Key $MODKEY-Return
		eval $WMII_TERM &
	Key $MODKEY-Shift-space
		wmiir xwrite /tag/sel/ctl send sel toggle
	Key $MODKEY-f
		wmiir xwrite /client/sel/ctl Fullscreen toggle
	Key $MODKEY-Shift-c
		wmiir xwrite /client/sel/ctl kill
	Key $MODKEY-Shift-t
		wmiir xwrite "/client/$(wmiir read /client/sel/ctl)/tags" "$(tagsmenu)" &
	Key $MODKEY-$LEFT
		wmiir xwrite /tag/sel/ctl select left
	Key $MODKEY-$RIGHT
		wmiir xwrite /tag/sel/ctl select right
	Key $MODKEY-$DOWN
		wmiir xwrite /tag/sel/ctl select down
	Key $MODKEY-$UP
		wmiir xwrite /tag/sel/ctl select up
	Key $MODKEY-Shift-$LEFT
		wmiir xwrite /tag/sel/ctl send sel left
	Key $MODKEY-Shift-$RIGHT
		wmiir xwrite /tag/sel/ctl send sel right
	Key $MODKEY-Shift-$DOWN
		wmiir xwrite /tag/sel/ctl send sel down
	Key $MODKEY-Shift-$UP
		wmiir xwrite /tag/sel/ctl send sel up
!
	for i in 0 1 2 3 4 5 6 7 8 9; do
		cat <<!
	Key $MODKEY-$i
		wmiir xwrite /ctl view "$i"
	Key $MODKEY-Shift-$i
		wmiir xwrite /client/sel/tags "$i"
!
	done
}

# WM Configuration
wmiir write /ctl << EOF
font $WMII_FONT
focuscolors $WMII_FOCUSCOLORS
normcolors $WMII_NORMCOLORS
grabmod $MODKEY
border 1
EOF

export WMII_MENU WMII_9MENU WMII_FONT WMII_TERM
export WMII_FOCUSCOLORS WMII_SELCOLORS WMII_NORMCOLORS

# Feed events to `wmiiloop' for processing
eval "$(eventstuff | sed 's/^[	]//' | { . wmiiloop; })"

echo "$Keys" | tr ' ' '\n' | wmiir write /keys

# Functions
Action() {
	action=$1; shift
	if [ -n "$action" ]; then
		Action_$action "$@" \
		|| conf_which $action "$@"
	fi
}

proglist() {
	paths=$(echo "$@" | sed 'y/:/ /')
	ls -lL $paths 2>/dev/null \
		| awk '$1 ~ /^[^d].*x/ && NF > 2 { print $NF }' \
		| sort | uniq
}

# Misc
progsfile="$WMII_NS_DIR/.proglist"
Action status &
proglist $PATH >$progsfile &

xsetroot -solid "$WMII_BACKGROUND" &

# Setup Tag Bar
seltag="$(wmiir read /tag/sel/ctl 2>/dev/null)"
wmiir ls /lbar |
while read bar; do
	wmiir remove "/lbar/$bar"
done
wmiir ls /tag | sed -e 's|/||; /^sel$/d' |
while read tag; do
	if [ "X$tag" = "X$seltag" ]; then
		echo "$WMII_FOCUSCOLORS" "$tag" | wmiir create "/lbar/$tag" 
	else
		echo "$WMII_NORMCOLORS" "$tag" | wmiir create "/lbar/$tag"
	fi
done

# More functions
tagsmenu() {
        wmiir ls /tag | sed 's|/||; /^sel$/d' | eval $WMII_MENU
}

actionlist() {
	{	proglist $WMII_CONFPATH
		echo -n $Actions | tr ' ' '\012'
	} | sort | uniq
}

conf_which() {
	which=$(which which)
	prog=$(PATH="$WMII_CONFPATH" $which $1); shift
	[ -n "$prog" ] && $prog "$@"
}

# Stop any running instances of wmiirc
echo Start wmiirc | wmiir write /event || exit 1

wmiir read /event |
while read event; do
	set -- $event
	event=$1; shift
	Event_$event $@
done 2>/dev/null

Détaillons, personnalisons et francisons wmiirc

Si, comme conseillé plus haut, vous avez pris soin de copier le wmiirc de base dans le dossier caché /.wmii-3.5 de votre répertoire personnel, il vous suffit de modifier ce fichier.

Pour tester vos différents essais, vous relancerez la lecture de la configuration, sans quitter Wmii ni aucune des applications ouvertes grâce au raccourci

* Mod-a puis choix wmiirc que vous sélectionnez avec les flèches du clavier ou en tapant wm + entrée.

Touches de base

#!/bin/sh -f
# Configure wmii

# Configuration Variables
MODKEY=Mod1 # la touche "Alt"
UP=k
DOWN=j
LEFT=h
RIGHT=l

pourrait se transformer en

#!/bin/sh -f
# Configuration de wmii

# Définition des Variables
MODKEY=Mod4 # On remplace Alt par la touche "windows", on pourrait aussi mettre numlock : Mod2 ou la touche Menu : Mod5
UP=Up       # On utilise les flèches de déplacement
DOWN=Down   # que je trouve visuellement
LEFT=Left   # plus pratiques d'emploi
RIGHT=Right # que les touches h,j,k et l

Couleurs et police de caractère

# Colors tuples: "<text> <background> <border>"
WMII_NORMCOLORS='#888888 #222222 #333333'
WMII_FOCUSCOLORS='#ffffff #285577 #4c7899'

WMII_BACKGROUND='#333333'
WMII_FONT='fixed'

se traduit par

# Couleurs de la barre de titre: "<texte> <arrière-plan> <bordure>"
WMII_NORMCOLORS='#888888 #222222 #333333'
WMII_FOCUSCOLORS='#ffffff #285577 #4c7899'

WMII_BACKGROUND='#333333'
WMII_FONT='-*-fixed-medium-r-*-*-14-*-*-*-*-*-*-*'

Les couleurs sont définies par leur code hexadécimal. WMII_NORMCOLORS représente les couleurs de la barre de titre d'un client qui n'a pas le focus et WMII_FOCUSCOLORS celles du client qui a le focus.

WMII_BACKGROUND est la couleur du papier peint et WMII_FONT la police de caractère utilisée dans les barres de titre et de statut. Pour fixer votre police de caractère, vous pouvez vous aider d'outils comme xfontsel ( à lancer dans une console ). La dénomination utilisée est celle d'XWindow (X Logical Font Description), les * représentent des champs non définis. Ceux-ci sont, entre autres, le nom du fondeur, le nom de la police, la graisse ... etc.

Il est à noter que la taille de la police de caractère joue sur la hauteur des barres de titre et de statut. Plus la police sera grande, plus les barres seront hautes.

Largeurs des colonnes

# Column Rules
wmiir write /colrules <<!
/.*/ -> 58+42
!

58+42 indique que, lorsque vous créez une deuxième colonne, la première occupera 58 % de la largeur de votre écran et la seconde 42 %. C'est, bien entendu, une affaire de goût personnel. La seule chose qui compte est que la somme des deux chiffres fasse 100. Ceci sont les valeurs par défaut à l'ouverture, la largeur des colonnes peut être modifiée à la souris avec "clic gauche et faire glisser".

# Proportionnalité des colonnes
wmiir write /colrules <<!
/.*/ -> 66+34     # grosso-modo 2/3 et 1/3...
!

Mode de placement des clients

# Tagging Rules
wmiir write /tagrules <<!
/XMMS.*/ -> ~
/MPlayer.*/ -> ~
/.*/ -> sel
/.*/ -> 1
!

Ici on peut assigner à des clients particuliers des règles particulières. Ci-dessus, on peut voir que toutes les fenètres dont le nom commence par XMMS et MPlayer s'ouvriront en mode flottant. C'est la signification du tilde " ~ ". On peut combiner plusieurs règles. Par exemple en écrivant /MPlayer.*/ -> ~+Multimédia, MPlayer s'ouvrira dans une vue nommée Multimédia et en mode flottant. Les deux dernières lignes, /.*/ -> sel et /.*/ -> 1, indiquent que par défaut un client n'ayant aucun label particulier s'ouvrira dans la vue courante et que, s'il n'y a aucune vue active, celle qui s'ouvrira se nommera " 1 ".

# Règles de label et de placement particulières
wmiir write /tagrules <<!
/XMMS.*/ -> ~
/MPlayer.*/ -> ~+Multimédia
/.*/ -> sel
/.*/ -> 1
!

Les informations de la barre de statut

# Status Bar Info
status() {
	echo -n $(uptime | sed 's/.*://; s/,//g') '|' $(date)
}

La fonction status() se "contente" de réaliser la commande située entre les deux crochets. Le résultat est affiché dans la barre, en bas à droite.

Par défaut, les informations sont la charge moyenne du processeur sur les 1, 5 et 15 dernières minutes ainsi que la date. C'est, bien sûr, personnalisable. On peut même y inclure ses propres scripts :

# Informations de la barre
status() {
echo -n 'Nous sommes le' $(date +"%d/%m/%Y et il est %H:%M:%S ")'***' Messages Gmail : $(~/.scripts/get_gmail.sh)  non lu'(s) ***'
}

affichera par exemple la date dans un format plus convivial et le nombre de messages non lus sur votre messagerie Gmail.

Pour information, cette dernière fonction peut être réalisée, entre autres, par le script get_gmail.sh

#!/bin/bash                                                                                                                                                             
gmail_login="votre_login" 
gmail_password="votre_mot_de_passe"                                                                                                                                       
                                                                                                                                                                        
dane="$(wget --secure-protocol=TLSv1 --timeout=3 -t 1 -q -O - https://${gmail_login}:${gmail_password}@mail.google.com/mail/feed/atom --no-check-certificate )"     
line="$(echo "$dane" | grep 'fullcount')"
gmail="$(echo "$line" | sed "s/<fullcount>\(.*\)<\/fullcount>/\1/")" 
 
if [ -z "$gmail" ]; then                                             
        echo "Indisponible"                                                                                                                                                        
else                                                                                                                                                                    
        echo "$gmail"                                                                                                                                                    
fi

placé, ici, dans le dossier caché .scripts du dossier personnel... ( À modifier, bien entendu, avec vos propres identifiants )

Voici un autre exemple de personnalisation de la barre de statut qui affiche le morceau joué par mpd et le statut de la batterie (pour un ordinateur portable donc) en plus des options par défaut :

# Status Bar Info
status() {
echo -n $(mpc | grep "-") `mpc | grep "%)" | cut -d '#' -f 1` `mpc | grep "%)" | cut -d '(' -f 2 | cut -d ')' -f 1` '|'$(uptime | sed 's/.*://; s/,//g') '|' $(cat /sys/$
)
}

Gestion des évenements

# Event processing                                       # Gestion des évenements par Wmii
#  Processed later by `wmiiloop' and evaled.
#  Duplicate the eval line and replace 'eval' with 'echo' for details.
eventstuff() {
	cat <<'!'
	# Events
	Event Start
		case "$1" in
		wmiirc)
			exit;
		esac
	Event Key
		fn=$(echo "$@" | sed 's/[^a-zA-Z_0-9]/_/g')
		Key_$fn "$@"
	Event CreateTag
		echo "$WMII_NORMCOLORS" "$@" | wmiir create "/lbar/$@"
	Event DestroyTag
		wmiir remove "/lbar/$@"
	Event FocusTag
		wmiir xwrite "/lbar/$@" "$WMII_FOCUSCOLORS" "$@"
	Event UnfocusTag
		wmiir xwrite "/lbar/$@" "$WMII_NORMCOLORS" "$@"
	Event UrgentTag
		shift
		wmiir xwrite "/lbar/$@" "*$@"
	Event NotUrgentTag
		shift
		wmiir xwrite "/lbar/$@" "$@"
	Event LeftBarClick
		shift
		wmiir xwrite /ctl view "$@"
	# Actions qui s'affichent avec Mod-a
	Action quit                                 # pour quitter Wmii
		wmiir xwrite /ctl quit
	Action exec
		wmiir xwrite /ctl exec "$@"
	Action rehash                               # mise à jour du menu qui s'affiche avec Mod-p
		proglist $PATH >$progsfile
	Action status
		set +xv
		if wmiir remove /rbar/status 2>/dev/null; then
			sleep 2
		fi
		echo "$WMII_NORMCOLORS" | wmiir create /rbar/status
		while status | wmiir write /rbar/status; do
			sleep 1
		done

Compléter le menu du clic droit sur la barre de titre

Event ClientMouseDown
		client=$1; button=$2
		case "$button" in
		3)
			do=$(eval $WMII_9MENU -initial "${menulast:-SomeRandomName}" Nop Delete Fullscreen)
			case "$do" in
			Delete)
				wmiir xwrite /client/$client/ctl kill;;
			Fullscreen)
				wmiir xwrite /client/$client/ctl Fullscreen on;;
			esac
			menulast=${do:-"$menulast"}
		esac

Quand vous faites un clic droit sur la barre de titre d'un client, vous voyez apparaitre un menu comprenant les éléments "Nop, Delete et Fullscreen". Comme vous pouvez vous en douter "Nop" ne fait rien, "Delete" ferme la fenètre et "Fullscreen" met le client en plein écran.

On peut facilement franciser ce menu et lui ajouter quelques éléments, car, même si la gestion au clavier est productive, quelques actions à la souris sont parfois bien utiles.

Ce qui pourrait donner :

Event ClientMouseDown                                                # Le bouton droit
		client=$1; button=$2                                 # de la souris est pressé
		case "$button" in                                    # sur la barre de titre
		3)
			do=$(eval $WMII_9MENU -initial "${menulast:-SomeRandomName}" Annuler Fermer PleinEcran Vers_la_droite Vers_la_gauche Vers_le_bas Vers_le_haut) # affiché avec un clic-droit sur la barre   de titre
			case "$do" in
			Fermer)
				wmiir xwrite /client/$client/ctl kill;;                        # on tue le client
			PleinEcran)
				wmiir xwrite /client/$client/ctl Fullscreen on;;               # on le met en plein écran
			Vers_la_droite)
				wmiir xwrite /tag/sel/ctl send sel right;;                     # on l'envoie dans la colonne de droite qu'on crée si besoin
			Vers_la_gauche)
				wmiir xwrite /tag/sel/ctl send sel left;;                      # on l'envoie dans la colonne de gauche qu'on crée si besoin
                        Vers_le_bas)
                                wmiir xwrite /tag/sel/ctl send sel down;;                      # on l'envoie vers le bas
                        Vers_le_haut)
                                wmiir xwrite /tag/sel/ctl send sel up;;                        # on l'envoie vers le haut
			esac
			menulast=${do:-"$menulast"}
		esac

À noter que Wmii utilise la fonction wmiir pour lire et écrire dans le pseudo système de fichier utilisé, Plan9 :

$ wmiir ls /
client/
colrules
ctl
event
keys
lbar/
rbar/
tag/
tagrules

Ajouter des raccourcis clavier et un menu personnel

# Key Bindings
	Key $MODKEY-Control-t
		case $(wmiir read /keys | wc -l | tr -d ' \t\n') in
		0|1)
			echo -n $Keys | tr ' ' '\012' | wmiir write /keys
			wmiir xwrite /ctl grabmod $MODKEY;;
		*)
			wmiir xwrite /keys $MODKEY-Control-t
			wmiir xwrite /ctl grabmod Mod3;;
		esac
	Key $MODKEY-space                                                     # passer de la couche flottante et vice-versa
		wmiir xwrite /tag/sel/ctl select toggle
	Key $MODKEY-d
		wmiir xwrite /tag/sel/ctl colmode sel default                 # revenir au mode par défaut
	Key $MODKEY-s
		wmiir xwrite /tag/sel/ctl colmode sel stack
	Key $MODKEY-m                                                         # maximiser le client qui a le focus
		wmiir xwrite /tag/sel/ctl colmode sel max
	Key $MODKEY-a                                                         # afficher le menu des actions
		Action $(actionlist | eval $WMII_MENU) &
	Key $MODKEY-p                                                         # afficher le menu des applications
		sh -c "$(eval $WMII_MENU <$progsfile)" &
	Key $MODKEY-t                                                         # entrer un label pour une nouvelle vue et l'afficher
		wmiir xwrite /ctl "view $(tagsmenu)" &
	Key $MODKEY-Return                                                    # ouvrir le terminal défini par défaut.
		eval $WMII_TERM &
	Key $MODKEY-Shift-space                                               # mettre le client qui a le focus en mode flottant.
		wmiir xwrite /tag/sel/ctl send sel toggle
	Key $MODKEY-f                                                         # mettre le client qui a le focus en plein écran, sans barre de titre et vice-versa.
		wmiir xwrite /client/sel/ctl Fullscreen toggle
	Key $MODKEY-Shift-c                                                   # fermer le client qui a le focus.
		wmiir xwrite /client/sel/ctl kill
	Key $MODKEY-Shift-t                                                   # renommer la vue active.
		wmiir xwrite "/client/$(wmiir read /client/sel/ctl)/tags" "$(tagsmenu)" &
	Key $MODKEY-$LEFT                                                     # mettre le focus sur le client situé à gauche s'il existe.
		wmiir xwrite /tag/sel/ctl select left
	Key $MODKEY-$RIGHT                                                    # mettre le focus sur le client situé à droite s'il existe.
		wmiir xwrite /tag/sel/ctl select right
	Key $MODKEY-$DOWN                                                     # mettre le focus sur le client situé plus bas s'il existe.
		wmiir xwrite /tag/sel/ctl select down
	Key $MODKEY-$UP                                                       # mettre le focus sur le client situé plus haut s'il existe.
		wmiir xwrite /tag/sel/ctl select up
	Key $MODKEY-Shift-$LEFT                                               # envoyer le client qui a le focus vers la colonne de gauche, la créer si besoin.
		wmiir xwrite /tag/sel/ctl send sel left
	Key $MODKEY-Shift-$RIGHT                                              # envoyer le client qui a le focus vers la colonne de droite, la créer si besoin.
		wmiir xwrite /tag/sel/ctl send sel right
	Key $MODKEY-Shift-$DOWN                                               # envoyer le client qui a le focus vers le bas.
		wmiir xwrite /tag/sel/ctl send sel down
	Key $MODKEY-Shift-$UP                                                 # envoyer le client qui a le focus vers le haut.
		wmiir xwrite /tag/sel/ctl send sel up
!
	for i in 0 1 2 3 4 5 6 7 8 9; do
		cat <<!
	Key $MODKEY-$i                                                        # afficher la vue n° "i", avec i compris entre 0 et 9.
		wmiir xwrite /ctl view "$i"
	Key $MODKEY-Shift-$i                                                  # envoyer le client qui a le focus vers la vue n°i, avec i compris entre 0 et 9. La créer si besoin.
		wmiir xwrite /client/sel/tags "$i"
!
	done
}

On peut voir que la syntaxe est toujours identique. Donc, si l'on veut, par exemple, créer un raccourci Mod-i qui ouvre Iceweasel, il suffit de rajouter :

        Key $MODKEY-i
                iceweasel &

Attention à bien respecter les tabulations ; celles-ci ont leur importance. Pour que le nouveau raccourci soit pris en compte il faut relire le fichier wmiirc par Mod-a puis wmiirc.

Un menu avec ses applications préférées

Le menu affiché par Mod-p est pratique. Il suffit de taper une partie du nom de l'application que l'on veut lancer pour qu'il fasse le tri et n'affiche plus que les programmes dont le nom comprend la chaîne de caractères que l'on vient de taper. Ce menu affiche la multitude d'applications présente sur votre disque dur.

On peut créer son propre menu personnel, avec ses applications préférées et lui assigner un raccourci :

        Key $MODKEY-x								
		sh -c "$(eval $WMII_MENU <~/.wmii-3.5/liste_programme)" &

On vient donc de fabriquer un menu qui s'affichera avec Mod-x. La liste des programmes (en fait la commande qui les lance) sera dans un simple fichier texte, que vous devez créer et que j'ai nommé ici ~/.wmii-3.5/liste_programme. La seule contrainte de ce fichier est qu'il ne contienne qu'une seule commande par ligne. Par exemple :

openoffice.org
iceweasel
roxterm
nitrogen ~/fonds
roxterm
vlc
gimp
xfwrite

Rien ne vous empêche d'ajouter des arguments à ces commandes, comme vous le feriez en lançant ces applications à partir d'un terminal.

Lancer des applications au démarrage

Pour lancer des applications au démarrage de Wmii il suffit de les placer avant la section

# Stop any running instances of wmiirc
echo Start wmiirc | wmiir write /event || exit 1

wmiir read /event |
while read event; do

.... etc

Si, par exemple on veut lancer iceweasel au démarrage il suffit d'ajouter :
iceweasel &

On peut aussi créer dans le répertoire ~/.wmii-3.5/ un fichier exécutable autostart.sh qui se chargera de la tâche et rajouter dans le wmiirc :

#  Lancement de programme(s) au démarrage
cd $HOME/.wmii-3.5/			# On se place dans le bon répertoire 
./autostart.sh &			# On lance le script contenant les programmes à démarrer
cd $HOME				# On revient dans notre HOME

autostart.sh contiendra un programme à lancer par ligne, avec éventuellement leurs arguments. Par exemple :

nitrogen --restore      # restaure le dernier fond d'écran
conky &                  # lance conky sur le fond d'écran

Ajouter un fond d'écran

Wmii ne gérant pas le fond d'écran vous devez utiliser un programme externe pour le faire. Ils sont nombreux et on peut citer feh, wmsetbg, bsetbg, nitrogen, qiv...etc.

Fond d'écran classique

Vous remplacerez (ou simplement commenterez) dans le fichier de configuration de wmii (~/.wmii-3.5/wmiirc) :

# Misc
progsfile="$WMII_NS_DIR/.proglist"
Action status &
proglist $PATH >$progsfile &

xsetroot -solid "$WMII_BACKGROUND" &

la ligne xsetroot -solid "$WMII_BACKGROUND" & par une commande permettant de fixer fond d'écran. Par exemple avec feh :

feh --bg-scale /chemin/vers/votre/image &

L'inconvenient réside dans le fait que pour changer de fond d'écran, il faut modifier le chemin vers votre image.

Pour ma part je préfère donc utiliser nitrogen qui propose une interface graphique pour changer le papier-peint. En le plaçant dans mon menu personnel avec en argument le répertoire dans lequel il doit chercher des images, (nitrogen ~/fonds), je choisis le nouvel arrière-plan en seulement 2 clics de souris. Il suffit de le mettre dans la liste des programme à démarrer automatiquement avec l'argument nitrogen --restore pour retrouver automatiquement le dernier fond choisi.

Fond d'écran dynamique

qiv permet d'obtenir un fond d'écran dynamique.

Après avoir installer qiv, modifiez le fichier ~/.wmii-3.5/wmiirc en commentant la ligne contenant xsetroot et en rajoutant une ligne pour qiv :

#xsetroot -solid "$WMII_BACKGROUND" &
qiv -xtsrud 600 /home/utilisateur/images/fond\ d\'écran/ &

Cette commande qiv met en fond d'écran centré (x), en redimensionnant les images pour qu'elles ne dépassent pas de l'écran (t), selon un diaporama (s), aléatoire (r), d'une durée de 600 secondes par image (d), les images du dossier /home/utilisateur/images/fond\ d\'écran/ et de ses sous-dossiers (u). Ainsi, toutes les 10 minutes (600 secondes), le fond d'écran change et il suffit de rajouter des images au dossier spécifié pour qu'elles deviennent des fonds d'écran.

Pour aller plus loin

Wmii ne se modifie pas uniquement par l'utilisation de scripts 'sh' ( compatibles Posix ), il y a d'autres langages permettant de programmer le comportement de Wmii comme Ruby, Python, Haskell... Ceci peut se réaliser par l'application de "patchs" ou de modules externes à Wmii.

Liens utiles

(en) Le site officiel de Wmii
(en)Guide de Wmii en pdf