Pekwm
PekWM est un gestionnaire de fenêtres très léger ressemblant à OpenBox ou à FluxBox, mais il est totalement dépourvu de barre des tâches contrairement à ces derniers. Il est écrit en C++ et est distribué sous licence GPL.
Sommaire |
Installation
Pekwm a très peu de dépendances, vous pouvez l'installer très facilement de la manière suivante :
pacman -S pekwm
Lancement avec KDM
Pour le moment, PekWM n'apparait pas dans la liste des sessions de KDM. Qu'à cela ne tienne, on va y remédier en recopiant /usr/share/xsessions/pekwm.desktop dans /usr/share/apps/kdm/sessions/:
cp /usr/share/xsessions/pekwm.desktop /usr/share/apps/kdm/sessions/
Configuration
La configuration se fait dans le dossier personnel ~/.pekwm/. Je vous conseille de prendre la configuration par défaut qui se trouve dans /etc/pekwm/. La configuration de PekWM se fait à l'aide de plusieurs fichiers de configuration :
- "config" : fichier de configuration principal (thème, nom des bureaux, comportement des fenêtres, etc...)
- "mouse" : fichier de configuration des raccourcis que l'on souhaite utiliser avec la souris
- "keys" : fichier de configuration des raccourcis clavier
- "menu" : fichier de configuration des menus du bureau ou de la fenêtre
- "vars" : fichier de configuration permettant d'utiliser des variables, ce n'est pas un fichier de configuration proprement dit, d'ailleurs vous ne le trouverez pas dans la documentation de PekWM, il sert cependant à pouvoir réutiliser plusieurs applications aisément sans avoir à changer tous les fichiers à chaque modification.
- "autoproperties" : fichier sans doute le plus complexe mais très puissant
- "start" : fichier permettant de lancer automatiquement des applications au démarrage
Le fichier config
Ce fichier permet de configurer le comportement des fenêtres, le nommage des bureaux par exemple et diverses options. La configuration se fait en plusieurs sous-sections:
Files
Les fichiers à utiliser (je vous conseille de tout simplement laisser par défaut).
Files {
Keys = "~/.pekwm/keys"
Mouse = "~/.pekwm/mouse"
Menu = "~/.pekwm/menu"
Start = "~/.pekwm/start"
AutoProps = "~/.pekwm/autoproperties"
Theme = "~/.pekwm/themes/Lightgrey"
}
Keys, Mouse, Menu, Start, AutoProps: on indique les fichiers à utiliser, laissez ceci par défaut.
Theme: on indique le thème à utiliser en pointant le répertoire de celui ci (il existe un script par défaut qui permet de changer automatiquement cette valeur par le menu).
MoveResize
Comportement des fenêtres lors d'un déplacement/redimensionnement.
MoveResize {
EdgeAttract = "10"
EdgeResist = "10"
WindowAttract = "5"
WindowResist = "5"
OpaqueMove = "true"
OpaqueResize = "false"
}
EdgeAttract: cette valeur est la distance (en pixel) à partir de laquelle la fenêtre "colle" aux bords.
WindowAttract: même chose par rapport aux fenêtres.
OpaqueMove: doit-on dessiner la fenêtre pendant le déplacement.
OpaqueResize: doit-on dessiner la fenêtre pendant le redimensionnement.
Screen
Configuration du placement des fenêtres et des espaces de travail.
Screen {
Workspaces = "6"
WorkspacesPerRow = "2"
WorkspaceNames = "Main;Chat;Music;Web;Games;Code"
ShowFrameList = "true"
ShowStatusWindowCenteredOnRoot = "true"
ShowWorkspaceIndicator = "500"
ShowClientID = "false"
FocusNew = "true"
FocusNewChild = "true"
PlaceNew = "true"
FullscreenAbove = "true"
FullscreenDetect = "true"
EdgeSize = "18 0 0 0"
EdgeIndent = "true"
DoubleClicktime = "200"
Placement {
Model = "CenteredOnParent Smart MouseNotUnder"
Smart {
Row = "false"
TopToBottom = "true"
LeftToRight = "true"
OffsetX = "100"
OffsetY = "100"
}
}
}
Workspace: le nombre de bureaux.
WorkspacesPerRow: le nombre de bureaux par colonne (0 pour mettre en ligne).
ShowFrameList: doit-on afficher la liste des fenêtres lorsque l'on navigue parmi elles.
WorkspaceNames: noms des bureaux séparés par ;.
ShowStatusWindowsCenteredOnRoot: si oui les informations de la fenêtre seront au centre du bureau sinon au centre de la fenêtre.
FocusNew: doit-on mettre automatiquement en avant une nouvelle fenêtre.
EdgeSize: l'espacement par rapport aux bords (dans l'ordre haut bas gauche droite).
EdgeIndent: si oui les fenêtres n'iront pas d'elles même dans l'espacement inscrit dans EdgeSize.
DoubleClickTime: la vitesse de double clic en ms.
Placement {: configuration du placement des fenêtres, regardez la documentation de pekwm pour plus de détails.
Menu
Section permettant de définir l'utilisation du menu (pas son contenu).
Menu {
DisplayIcons = "true"
Icons = "Menu" {
Minimum = "16x16"
Maximum = "16x16"
}
Select = "Motion"
Enter = "Motion"
Exec = "ButtonPress"
}
DisplayIcons: doit-on afficher des icônes.
Icons = "Menu": paramètres à utiliser pour la section "Menu" du fichier ~/.pekwm/menu (voir la configuration du menu).
Select: comment choisir un élément du menu.
Enter: comment entrer dans un sous-menu.
Exec: comment exécuter un élément.
CmdDialog
Section permettant de configurer le lanceur d'applications.
CmdDialog {
HistoryUnique = "true"
HistorySize = "500"
HistoryFile = "~/.pekwm/history"
HistorySaveInterval = "16"
}
HistoryUnique: doit-on afficher qu'une fois une application déjà lancée plusieurs fois.
HistorySize: taille du fichier historique.
HistoryFile: le fichier historique à utiliser.
Harbour
Section pour configurer le dock de pekwm (positionnement,orientation, taille).
Harbour {
OnTop = "True"
MaximizeOver = "False"
Placement = "Right"
Orientation = "TopToBottom"
Head = "0"
DockApp {
SideMin = "64"
SideMax = "0"
}
}
Les fichiers mouse et keys
Ces fichiers servent à configurer les raccourcis et les actions avec la souris et le clavier
X = "Y" { Actions = "command" }
Les différentes opérandes (X)
- pour mouse
- ButtonPress: lors d'un clic.
- Motion: le déplacement.
- ButtonRelease: assez similaire à ButtonPress sauf que c'est au relâchement.
- DoubleClick: lors d'un double clic
- ButtonPress: lors d'un clic.
- pour keys
- KeyPress: lors d'une pression d'une touche.
- Chain: raccourcis supplémentaires utilisés de cette façon par exemple: ctrl + a puis b.
- KeyPress: lors d'une pression d'une touche.
Les différents identificateurs (Y)
- pour mouse
- 1: clic gauche.
- 2: clic du milieu.
- 3: clic droit.
- 4/5: molette haut/molette bas.
- 1: clic gauche.
- pour keys
- Ctrl: touche contrôle.
- Mod1: touche alt.
- Mod4: touche super ou windows.
- Ctrl: touche contrôle.
KeyPress = "#162").
Les sections disponibles
Elles permettent de déterminer sur quel élément va s'appliquer tel ou tel raccourci. La forme d'une section est la suivante:
Section {
X = "Y1" { Actions = "command1" }
X = "Y2" { Actions = "command2" }
X = "Y3" { Actions = "command3" }
...
}
- pour mouse
- Client: sur une fenêtre quelconque.
- Root: sur le bureau.
- FrameTitle: sur la barre de fenêtre.
- ScreenEdges { X {} }: sur les bords de l'écran avec X = Top, Bottom, Right ou Left.
- Client: sur une fenêtre quelconque.
- pour keys
- Global: n'importe quand.
- MoveResize: quand MoveResize est activé (Actions = "MoveResize)
- Global: n'importe quand.
Exemples
Un petit exemple pour que vous ne soyez pas complètement perdu:
- pour mouse
Client {
ButtonPress = "Ctrl Mod1 1" { Actions = "Close" }
Motion = "Mod1 3" { Actions = "Resize" }
}
ScreenEdge {
Down {
ButtonRelease = "3" { Actions = "ShowMenu Root" }
}
}
Border {
TopLeft { ButtonPress = "1" { Actions = "Resize TopLeft" } }
Top { ButtonPress = "1" { Actions = "Move" } }
TopRight { ButtonPress = "1" { Actions = "Resize TopRight" } }
Left { ButtonPress = "1" { Actions = "Resize Left" } }
Right { ButtonPress = "1" { Actions = "Resize Right" } }
BottomLeft { ButtonPress = "1" { Actions = "Resize BottomLeft" } }
Bottom { ButtonPress = "1" { Actions = "Resize Bottom" } }
BottomRight { ButtonPress = "1" { Actions = "Resize BottomRight" } }
}
ButtonPress = "Ctrl Mod1 1" { Actions = "Close" }: Fermer la fenêtre par clic gauche sur une fenêtre tout en pressant Ctrl + Alt.
Motion = "Mod1 3" { Actions = "Resize" }: Redimensionner la fenêtre avec Alt + clic droit.
Les entrées dans Border {} vous permettent de redimensionner une fenêtre par le clic gauche sur une bordure de fenêtre.
- pour keys
INCLUDE = "vars"
Global {
KeyPress = "Mod4 e" { Actions = "Exec $TERMINAL &" }
KeyPress = "#123" { Actions = "Exec $MIXINC &" }
KeyPress = "Mod1 Tab" { Actions = "NextFrame EndRaise" }
Chain = "Mod4 Mod1 M" {
KeyPress = "P" { Actions = "Exec $PLAY &" }
}
}
INCLUDE = "vars": on inclue le fichier vars où on définira certaines applications.
KeyPress = "#123" { Actions = "Exec $MIXINC &" }: sur la pression de la touche 123 identifiée par xev on lance $MIXINC défini dans ~/.pekwm/vars.
Chain = "Mod4 Mod1 M" {: le raccourci Super + Alt + M, à lui seul il donne rien, il faut ensuite rajouter une autre touche.
KeyPress = "P" { Actions = "Exec $PLAY &" }: appuyer P après Super + Alt + M lancera $PLAY défini dans ~/.pekwm/vars.
Ce fichier est certainement le plus simple à comprendre. Il permettra d'éditer le menu du bureau ou des fenêtres.
Il est alors divisé en plusieurs sections:
RootMenu
Le menu du bureau. La syntaxe est facile, la voici:
INCLUDE = "vars"
RootMenu = "Menu" {
Entry = "Terminal" { Actions = "Exec $TERMINAL &" }
Separator {}
Submenu = "Accessoires" {
Entry = "Calculatrice" { Actions = "Exec $CALC &" }
}
}
Ici "Menu" fait allusion aux paramètres que j'ai cité plus haut dans le fichier ~/.pekwm/config.
INCLUDE = "vars": tout comme keys je conseille d'utiliser ce fichier pour définir certaines applications susceptible d'être modifiés.
RootMenu = "Menu" {: le début du menu principal.
Entry = "Terminal" { Actions = "Exec $TERMINAL &" }: entrée nommée Terminal qui lancera $TERMINAL défini dans .pekwm/vars.
Separator {}: un simple séparateur.
Submenu = "Accessoires" {: création du sous menu accessoires.
Entry = "Calculatrice" { Actions = "Exec $CALC &" }: entrée nommée Calculatrice qui lancera $CALC défini dans ~/.pekwm/vars
WindowMenu
Menu par rapport à une fenêtre.
WindowMenu = "Window Menu" {
Entry = "(Un)Stick" { Actions = "Toggle Sticky" }
Entry = "(Un)Shade" { Actions = "Toggle Shaded" }
}
WindowMenu = "Window Menu" {: le menu de fenêtre.
Entry = "(Un)Stick" { Actions = "Toggle Sticky" }: entrée qui permute l'option visible sur tous les bureaux.
Entry = "(Un)Shade" { Actions = "Toggle Shaded" }: entrée qui permute l'option enroulé.
Le fichier vars
Ce fichier tout simple vous permet de définir des applications à utiliser dans vos fichiers de configuration.
Il vous sera utile car si vous définissez un terminal dans votre fichier vars et que vous en faites un raccourci clavier et une entrée du menu
vous n'aurez plus qu'à modifier cette valeur dans le fichiers vars uniquement laissant aussi les autres intactes. Ou par exemple ceci.
$SMALLCMD = "urxvtc -geometry 60x15 -e"
Imaginez que vous vouliez modifier la taille du terminal qui est inscrit une dizaines de fois dans votre menu (vous pourriez toujours utiliser sed mais bon) là il n'y
a qu'une seule valeur à changer ce qui est bien plus pratique.
Voici la manière la plus simple de s'en servir:
$TERMINAL = "urxvtc" $PLAY = "mpc toggle"
Ainsi vous n'auriez plus qu'à utiliser $TERMINAL et $PLAY dans vos fichiers de configuration de pekwm où vous auriez bien évidemment inclu le fichier vars.
Le fichier autoproperties
Nous voilà au fichier le plus complexe de pekwm mais aussi le plus puissant, avec celui ci vous pourrez faire en sorte qu'une application se lance sur tel ou tel bureau, de manière maximisée ou bien groupée avec d'autres.
Tout d'abord vous devez connaître la valeur WM_CLASS de l'application que vous voulez définir. pour cela en terminal faites
xprop WM_CLASS
puis cliquez sur l'application désirée, par exemple firefox -> WM_CLASS(STRING) = "Navigator", "Firefox"
Maintenant admettons que je veuille que firefox démarre sur le bureau 4 automatiquement au lancement je fais ceci:
Property = "Navigator,Firefox" {
ApplyOn = "New Start"
Workspace = "4"
}
Property = "Navigator", "Firefox" {: la propriété visant firefox.
ApplyOn = "New Start": New = quand une nouvelle fenêtre démarre, Start = quand firefox se lance.
Workspace = "4": on dit de lancer firefox sur le bureau 4.
Maintenant si je veux ajouter d'autres applications à démarrer sur le bureau 4 au lieu de tout réecrire je peux faire de cette manière:
Property = "(appli1|appli2), (appli1|appli2)"
Exemple: je veux lancer un terminal automatiquement sur le bureau 4 tout comme firefox je prends WM_CLASS(STRING) = "urxvt", "URxvt" pour le terminal rxvt.
Property = "(Navigator|urxvt), (Firefox|URxvt)" {
ApplyOn = "New Start"
Workspace = "4"
}
Autre exemple je veux grouper automatiquement les fenêtre de conversations de pidgin et gajim ensemble, je prend alors la valeur de la fenêtre de conversation de chacune comme ceci xprop
WM_WINDOW_ROLE puis clic sur chacune des fenêtre de conversation.
voici le code WM_CLASS et WM_WINDOW_ROLE de gajim:
"gajim.py","Gajim.py" ET "messages"
Et celui de pidgin:
"pidgin","Pidgin" ET "conversation"
Je groupe alors comme ceci:
# Gajim.
Property = "^gajim.py,^Gajim.py" {
Role = "^messages"
Workspace = "2"
ApplyOn = "New Start Reload"
Group = "im" { Size = "0"; Global = "true" }
}
# Pidgin.
Property = "^pidgin,^Pidgin" {
Role = "^conversation"
Workspace = "2"
ApplyOn = "New Start Reload"
Group = "im" { Size = "0"; Global = "true" }
}
Si vous avez bien compris la syntaxe on dit d'appliquer ces règles aux fenêtres de Pidgin et Gajim ayant comme role "messages" et "conversation",
Group = "im" { Size = "0"; Global = "true" }: on indique de les grouper automatiquement ensemble, le Size 0 veut dire taille infinie mais on pourrait mettre 2 et global permet sur n'importe quel bureau.
Workspace = "2": j'en profite pour envoyer le tout sur le bureau 2.
# Gajim.
Property = "gajim.py,Gajim.py" {
Role = "messages"
Workspace = "2"
ApplyOn = "New Start Reload"
Group = "im" { Size = "0"; Global = "true" }
}
# Pidgin.
Property = "pidgin,Pidgin" {
Role = "conversation"
Workspace = "2"
ApplyOn = "New Start Reload"
Group = "im" { Size = "0"; Global = "true" }
}
# On lange pidgin et gajim sur le bureau 2
Property = "(gajim.py|pidgin),(Gajim.py|Pidgin)" {
ApplyOn = "New Start Reload"
Workspace = "2"
}
Autre exemple intéressant si vous voulez grouper la fenêtre de gimp avec celle des calques automatiquement:
Property = "^gimp,^Gimp" {
Role = "^(gimp-toolbox|^gimp-dock)"
ApplyOn = "New Start Reload"
Workspace = "6"
Group = "gimp" { Size = "2"; Global = "true" }
}
Le fichier start
Le fichier le plus simple de tout pekwm, il se chargera de lancer automatiquement les applications au démarrage de pekwm
Voici comment le remplir:
#!/bin/sh pidgin & firefox &