noDE -- spectrwm -- doc
spectrwm est un gestionnaire de fenêtres de type tiling inspiré par xmonad et dwm. spectrwm a été écrit par des hackers pour des hackers et tente de rester rapide, léger et compact.
spectrwm est en constant développement et demande encore quelques améliorations, mais ça ne l'empêche pas d'être un gestionnaire de fenêtres très rapide et hautement configurable.
spécificités
- support du multi écran grâce à xrandr & xinerama
- navigation à la souris ou au clavier
- status bar personnalisable
- fichier de configuration en mode texte
- rechargement de la configuration sans quitter la wm (on-the-fly-reloading)
- lanceur de menu (dmenu)
- disposition tile/bottomstack/fullscreen
- manipulation des clients master/stack/screen facilité
- support des clients libres
- définition possible de “régions” sur l'écran
- personnalisation des raccourcis et lanceurs
- utilisation des “quirks”
- support multi-OS(*BSD, Linux, OSX, Windows/cygwin)
installation
spectrwm est présent dans les dépôts Debian, ou sur les sources git.
- installation depuis les dépôts :
apt-get install spectrwm
- installation depuis les sources git :
git clone https://github.com/conformal/spectrwm.git cd spectrwm/linux make make install
lancement
spectrwm se lance simplement depuis votre ~/.xinitrc grâce à :
#launch window manager
exec spectrwm
configuration
la configuration de spectr/scrotwm passe par l'édition de son fichier de configuration ~/spectrwm.conf ou ~/.scrotwm.conf selon la version installée.
on commence par récupérer le fichier de conf donné en exemple :
cp /etc/scrotwm.conf ~/.scrotwm.conf
ou
cp ~/spectrwm/spectrwm.conf ~/.spectrwm.conf
vous pouvez aussi récupérer le fichier de raccourcis adapté à votre clavier (Debian/Sources) :
cp /usr/share/doc/spectrwm/examples/scrotwm_fr.conf ~/.scrotwm_fr.conf
ou
cp ~/spectrwm/spectrwm_fr.conf ~/.spectrwm_fr.conf
la syntaxe du fichier de conf est du type "keyword" = "setting". ex :
color_focus = red
les lignes précédées d'un "#" sont des commentaires. si vous désirez afficher un "#", vous devez inscrire
"\#"
options de configuration
option | description |
---|---|
autorun | lance une application au démarrage. format ws[ |
bar_action | script externe à lancer pour un affichage dans la status bar. |
bar_at_bottom | place la status bar en bas de l'écran. |
bar_border[x] | couleur de la bordure de la status bar sur l'écran x. |
bar_border_unfocus[x] | couleur de la bordure de la status bar de la région en arrière plan sur l'écran x. |
bar_border_width | épaisseur de la bordure de la status bar. pas de bordure si 0. |
bar_color[x] | couleur de fond de la status bar sur l'écran x. |
bar_enabled | afficher la barre. |
bar_enabled_ws[x] | afficher la barre sur l'espace de travail x; par defaut 1. |
bar_font | police utilisée pour la status bar. format Xft ou X Logical Font Description(XLFD). vous pouvez spécifier plusieurs polices séparées par “,”. si une des polices est en XFT, elle sera utilisée par défaut. notez que dmenu n'utilise pas les polices XFT. ex: bar_font = profont-medium-11,Terminus:pixelsize=14,clean-medium-12-. |
bar_font_color[x] | couleur de la police de la status bar pour l'écran x. |
bar_format | définit le format de la status bar en écrasant toutes les autres options. le format utilise la syntaxe strftime(3). séquences disponibles en fin de tableau. |
bar_justify | alignement du texte de la status bar. valeurs: left, center, et right. |
bind[x] | associer une touche au programme x. voir la section raccourcis plus bas. |
border_width | épaisseur de la bordure des clients. pas de bordures si 0. |
clock_enabled | affiche l'heure dans la status bar. |
color_focus | couleur de la bordure du client ayant le focus. |
color_unfocus | couleur de la bordure des clients en arrière plan. |
dialog_ratio | redimensionnement des fenêtres type dialog. ex: 0.6 = 60% de l'écran. |
disable_border | n'affiche pas la bordure si la status bar est masquée et qu'il n'y a qu'un seul client. |
focus_close | dirige le focus à la fermeture d'un client. valeurs: first, next, previous (défaut) et last. |
focus_close_wrap | donne le focus au dernier clients lors de la fermeture d'un client. |
focus_default | client ayant le focus par défaut. valeurs: first et last (défaut). |
focus_mode | mode du focus. valeurs: default, follow et manual. |
keyboard_mapping | charge une disposition de clavier. voir la section KEYBOARD MAPPING FILES plus bas. |
layout | sélection de la disposition par défaut. valeurs: vertical, vertical_flip, horizontal, horizontal_flip et fullscreen. |
modkey | touche de modification. Mod1=ALT, Mod4=windows. |
program[p] | définir une action “p” à lancer. voir la section PROGRAMS plus bas. |
quirk[c:n] | ajoute une règle “quirk” pour le client de class ‘c’ et nommé ‘n’. voir la section QUIRKS plus bas. |
region | définir des régions sur l'écran, en écrasant toute auto-détection. format: screen[ |
region_padding | espace libre entre les régions. |
spawn_position | placement des nouveaux clients. valeurs: first, next, previous et last (default). |
stack_enabled | afficher la disposition dans la status bar. |
term_width | définir une taille moinimale pour xterm (le seul supporté pour le moment). |
tile_gap | espace libre entre les clients. |
title_class_enabled | afficher la class du client dans la status bar |
title_name_enabled | afficher le titre du client dans la status bar. |
urgent_enabled | notification des clients urgents. |
verbose_layout | précise l'affiche de la disposition dans la status bar. |
window_name_enabled | affiche le nom du client, limité à 64 caractères. |
workspace_limit | définir le nombre d'espace de travfail disponible. Minimum=1, maximum=22, défaut=10. |
séquences de la barre
Character sequence | Replaced with |
---|---|
+< | un espace |
+A | résultat d'un script externe |
+C | "Window class" du client |
+D | nom de l'espace de travail |
+F | indicateur de client libre |
+I | index des espaces de travail |
+N | numéro de l'écran |
+M | nombre de clients minimisés |
+P | "Window class" et titre du client séparés par “:” |
+S | disposition |
+T | titre du client |
+U | indicateur d'application urgente |
+V | version du programme |
+W | nom du client |
++ | un "+" |
toutes les séquences sont limitées en nombre de caractères, par exemple +64A.
keyboard mapping files
Keyboard mapping files sont des fichiers de configuration reprenant les raccourcis claviers adaptés à votre disposition.
ces fichiers peuvent être chargés dans spectrwm.conf avec l'option 'keyboard_mapping“. ces fichiers sont situés dans les sources ou, si vous avez installé spectrwm depuis Debian, dans /usr/share/doc/spectrwm/examples/.
spectrwm_cz.conf Czech Republic keyboard layout
spectrwm_es.conf Spanish keyboard layout
spectrwm_fr.conf French keyboard layout
spectrwm_fr_ch.conf Swiss French keyboard layout
spectrwm_se.conf Swedish keyboard layout
spectrwm_us.conf United States keyboard layout
quirks aka règles
spectrwm peut définir des “quirks” ou règles à certains clients selon leur class et leur titre. voici les règles par défaut :
Firefox-bin:firefox-bin TRANSSZ
Firefox:Dialog FLOAT
Gimp:gimp FLOAT + ANYWHERE
MPlayer:xv FLOAT + FULLSCREEN + FOCUSPREV
OpenOffice.org 2.4:VCLSalFrame FLOAT
OpenOffice.org 3.1:VCLSalFrame FLOAT
pcb:pcb FLOAT
xine:Xine Window FLOAT + ANYWHERE
xine:xine Panel FLOAT + ANYWHERE
xine:xine Video Fullscreen Window FULLSCREEN + FLOAT
Xitk:Xitk Combo FLOAT + ANYWHERE
Xitk:Xine Window FLOAT + ANYWHERE
XTerm:xterm XTERM_FONTADJ
syntaxe des règles :
- FLOAT : client libre.
- TRANSSZ : ajuste la taille du client en fonction du ratio (à définir dans le fichier de configuration).
- ANYWHERE : autorise le client à se positionner où il veut, non centré.
- XTERM_FONTADJ : ajuste la police xterm lors du redimensionnement (seulement avec xterm).
- FULLSCREEN : remplir la totalité de la "région" sans bordures.
- FOCUSPREV : lors de la fermeture du client, force le focus sur le dernier client ayant eu le focus.
vous pouvez ajouter ou enlever des règles avec la syntaxe :
quirk["class":"name"] = "quirk" [+ "quirk" ...]
- "class" et "name" définissent le client auquel s'appliqué la règle (depuis "xprop"),
- "quirk" est l'une des règles décrites ci-dessus.
par exemple :
quirk[MPlayer:xv] = FLOAT + FULLSCREEN + FOCUSPREV
quirk[pcb:pcb] = NONE # enlève la règle par défaut
spectrwm attribue également des règles automatiques pour certains clients en se basant sur les propriétés NET_WM_WINDOW_TYPE* :
NET_WM_WINDOW_TYPE_DOCK FLOAT + ANYWHERE
NET_WM_WINDOW_TYPE_TOOLBAR FLOAT + ANYWHERE
NET_WM_WINDOW_TYPE_UTILITY FLOAT + ANYWHERE
NET_WM_WINDOW_TYPE_SPLASH FLOAT
NET_WM_WINDOW_TYPE_DIALOG FLOAT
note les règles spécifiés dans le ~/.spectrwm.conf écrasent les règles par défaut.
normes EWMH
spectrwm respecte partiellement les normes EWMH (Extended Window Manager Hints). vous pouvez utiliser wmctrl et xdotool pour envoyer des messages sur certains clients.
identification du client avec _NET_ACTIVE_WINDOW, ce qui permet d'afficher le nom de ce client grâce à xprop et grep :
WINDOWID=`xprop -root _NET_ACTIVE_WINDOW | grep -o "0x.*"`
xprop -id $WINDOWID WM_NAME | grep -o “\”.*\“”
un client peut obtenir le focus en envoyant un message de type NET_ACTIVE_WINDOW. par exemple, avec wmctrl(1) pour lancer le message (avec ID client = 0x4a0000b) :
wmctrl -i -a 0x4a0000b
fermeture d'un client avec un message de type NET_CLOSE_WINDOW :
wmctrl -i -c 0x4a0000b
libère ou tile le client en ajoutant/enlevant NET_WM_STATE_ABOVE du NET_WM_STATE. on envoi un message du type NET_WM_STATE. code pour libérer/attacher un client :
wmctrl -i -r 0x4a0000b -b toggle NET_WM_STATE_ABOVE
déplacement/redimensionnement d'un client libre :
wmctrl -i -r 0x4a0000b -e 0,100,50,640,480
déplace le client (100,50) et le redimensionne (640×480). les messages de type _NET_MOVERESIZE_WINDOW sont ignorés par les clients attachés.
raccourcis clavier
programs
spectrwm vous permet de spécifier des séquences d'actions à associer à des combinaisons de touches.
les programmes par défaut :
term xterm
screenshot_all screenshot.sh full
screenshot_wind screenshot.sh window
lock xlock
initscr initscreen.sh
menu dmenu_run -fn $bar_font -nb $bar_color -nf $bar_font_color -sb $bar_border -sf $bar_color
synatxe des programmes :
program["name"] = "progpath" ["arg" [... "arg"]]
avec :
- "name" identifier le prgramme, prenez garde à ne pas donner un nom existant dans les fonctions de spectrwm
- "progpath" le programme à lancer
- "arg" =0 ou les arguments à passer au programmer
les variables suivantes seront reconnues dans les programmes à lancer :
- $bar_border
- $bar_color
- $bar_font
- $bar_font_color
- $color_focus
- $color_unfocus
- $region_index
- $workspace_index
Exemple:
program[ff] = /usr/local/bin/firefox http://spectrwm.org/
bind[ff] = Mod+Shift+b # Mod+Shift+B lance firefox
pour effacer le programme précédent:
bind[] = Mod+Shift+b
program[ff] =
bindings
M=Alt, S=Shift, M1=bouton1, M2=bouton2, M3=bouton3
action de la souris | description |
---|---|
M1 | donne le focus |
M-M1 | déplace le client |
M-M3 | redimensionne le client |
M-S-M3 | redimensionne le client depuis le centre |
action du clavier | program/fonction | description |
---|---|---|
M-S- | term | ouvre le programme définit par "term" |
M-p | menu | lance la commande de "menu" |
M-S-q | quit | quitte spectrwm |
M-q | restart | relance spectrwm |
M- | cycle_layout | change la disposition |
M-S-<> | flip_layout | échange la zone master avec le stack |
M-S-"Space" | stack_reset | rétablit la proportion stack/master |
M-h | master_shrink | réduit la taille du master |
M-l | master_grow | agrandit la taille du master |
M-, | master_add | ajoute un client dans le master |
M-. | master_del | enlève un client du master |
M-S-, | stack_inc | ajoute un client dans le stack |
M-S-. | stack_dec | enlève un client du stack |
M- | swap_main | échange le client avec le master |
M-j, M- | focus_next | donne le focus au client suivant |
M-k, M-S- | focus_prev | donne le focus au client précédent |
M-m | focus_main | donne le focus au master |
M-S-j | swap_next | échange le client avec le client suivant |
M-S-k | swap_prev | échange le client avec le client précédent |
M-b | bar_toggle | affiche/masque la barre |
M-S-b | bar_toggle_ws | affiche/masque la bar sur l'espace de travail courant |
M-x | wind_del | ferme le client |
M-S-x | wind_kill | tue le client |
M-"1-9,0,F1-F12" | ws<1-22> | rejoint l'espace de travail <1-22> |
M-S-"1-9,0,F1-F12" | mvws<1-22> | envoi le client sur l'espace de travail <1-22> |
M-"Keypad 1-9" | rg<1-9> | rejoint la region <1-9> |
M-S-"Keypad 1-9" | mvrg<1-9> | envoi le client dans la region <1-9> |
M-"Right" | ws_next | rejoint l'espace de travail occupé suivant |
M-"Left" | ws_prev | rejoint l'espace de travail occupé précédent |
M-"Up" | ws_next_all | rejoint l'espace de travail suivant |
M-"Down" | ws_prev_all | rejoint l'espace de travail précédent |
M-a | ws_prior | rejoint le dernier espace de travail visité |
M-S-"Right" | rg_next | rejoint la region suivante |
M-S-"Left" | rg_prev | rejoint la region précédente |
M-s | screenshot_all | capture d'écran |
M-S-s | screenshot_wind | capture du client |
M-S-v | version | affiche la version dans la barre |
M-t | float_toggle | libère/attache le client |
M-S- | lock | vérouille l'écran |
M-S-i | initscr | script défini par "initscr" |
M-w | iconify | minimise |
M-S-w | uniconify | restaure |
M-S-r | always_raise | permettre aux clients attaché de passer au-dessus des clients libres |
M-v | button2 | simule un clic central |
M– | width_shrink | réduit la largeur du client libre |
M-= | width_grow | augmente la largeur du client libre |
M-S– | height_shrink | réduit la hauteur du client libre |
M-S-= | height_grow | augmente la hauteur du client libre |
M-[ | move_left | déplace le client libre sur la gauche |
M-] | move_right | déplace le client libre sur la droite |
M-S-[ | move_up | déplace le client libre vers le haut |
M-S-] | move_down | déplace le client libre vers le bas |
M-S-/ | name_workspace | nomme l'espace de travail courant |
M-/ | search_workspace | recherche un espace de travail |
M-f | search_win | recherche un client dans l'espace de travail courant |
syntaxe des raccourcis:
bind["action"] = "keys"
-
une des actions décrites ci-dessus (ou vide pour effacer une règle) -
une touche de modification (MOD, Mod1, Shift, etc.) et une ou plusieurs touches (b, space, etc.), séparés par un "+".
exemple:
bind[reset] = Mod4+q # associer la touche 'windows + q' à l'action 'reset'
bind[] = Mod1+q # effacer la règle précédente
pour spécifier la touche de modification par défaut, utiliser "MOD". plusieurs raccourcis peuvent être associés à la même action.
pour associer les caractères spéciaux, utiliser xev afin d'identifier la touche.