Wmii
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.
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.
À 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 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.
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 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 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... etc.
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.
É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..
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.
- 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 ).
- 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.
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.
# 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 :
# Informations de la barre status() { echo -n $(date +"%d/%m/%y - %H:%M:%S") }
affichera la date dans le format : dd/mm/yy - hh/mm/ss.
...en cours... le_fada... toujours à l'ouest ! 26 janvier 2010 à 06:35 (UTC)