logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:environnements:x11:dwm [18/01/2015 17:25]
sogalpunx
doc:environnements:x11:dwm [25/01/2017 08:24] (Version actuelle)
sogal [Installation]
Ligne 3: Ligne 3:
   * Objet : Découvrir et apprendre à installer puis à utiliser dwm   * Objet : Découvrir et apprendre à installer puis à utiliser dwm
   * Niveau requis : {{tag>​avisé}}   * Niveau requis : {{tag>​avisé}}
-  * Commentaires : //Bien que tous peuvent l'​utiliser,​ dwm, de part le dénuement qui fait sa force, s'​adresse d'​avantage à des utilisateurs connaissant bien leur système et désireux d'en avoir un contrôle très fin. // FIXME +  * Commentaires : //Bien que tous peuvent l'​utiliser,​ dwm, de part le dénuement qui fait sa force, s'​adresse d'​avantage à des utilisateurs connaissant bien leur système et désireux d'en avoir un contrôle très fin. //  
-  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) +  * Suivi : {{tag>​à-tester}}  
-  * Suivi : {{tag>en-chantier ​à-tester ​à-placer}} - FIXME Pour choisir, voir les autres Tags possibles dans [[:​atelier:#​tags|l'​Atelier]]. +    * Création par [[user>sogal]] 18/​01/​2015 
-    * Création par [[user>sogalpunx]] 18/​01/​2015 +    * Testé par <...> le <...>  
-    * Testé par <...> le <​...> ​FIXME +  * Commentaires sur le forum : [[http://debian-facile.org/​viewtopic.php?​id=10567 ​| Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
-  * Commentaires sur le forum : [[:url-invalide ​| Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME+
  
 ===== Introduction ===== ===== Introduction =====
 Voici la très bonne et très officielle présentation de dwm, disponible sur son site: http://​dwm.suckless.org Voici la très bonne et très officielle présentation de dwm, disponible sur son site: http://​dwm.suckless.org
 +
 dwm est un gestionnaire de fenêtres dynamique pour X. Il gère les fenêtres selon 3 agencements différents:​ \\ dwm est un gestionnaire de fenêtres dynamique pour X. Il gère les fenêtres selon 3 agencements différents:​ \\
   * tuilage : les fenêtres sont réparties entre une zone principale et une zone d'​empilement. La zone principale contient la fenêtre dans laquelle vous travaillez, la zone d'​empilement contenant les autres;   * tuilage : les fenêtres sont réparties entre une zone principale et une zone d'​empilement. La zone principale contient la fenêtre dans laquelle vous travaillez, la zone d'​empilement contenant les autres;
 +{{http://​images.debian-facile.org/​file-Re214462f60c6902541bf5ad0577e6966.png}}
   * monocle : les fenêtres sont toutes maximisées à la taille de l'​écran (et se masquent donc l'une l'​autre);​   * monocle : les fenêtres sont toutes maximisées à la taille de l'​écran (et se masquent donc l'une l'​autre);​
 +{{http://​images.debian-facile.org/​file-R689e2271b50020d4a6aef48a18a36b79.png}}
   * flottant : dans cet agencement les fenêtres peuvent être redimensionnées et déplacées librement, c'est le comportement que l'on retrouve dans la plupart des autres gestionnaires et environnements de bureaux (XFCE, LXDE, etc...).   * flottant : dans cet agencement les fenêtres peuvent être redimensionnées et déplacées librement, c'est le comportement que l'on retrouve dans la plupart des autres gestionnaires et environnements de bureaux (XFCE, LXDE, etc...).
 +{{http://​images.debian-facile.org/​file-Rab3a115fbc0c1e9b7b2c1d7cd2eb7b73.png}}
  
-Notes : les fenêtres de dialogues ​sont toujours en mode flottant. De plus, dwm est bien un gestionnaire de fenêtres, il ne leur apporte aucune décoration,​ ni bordure avec titres et boutons "​Fermer",​ "​Maximiser"​ ou "​Réduire"​.+Notes : les fenêtres de dialogue ​sont toujours en mode flottant. De plus, dwm est bien un gestionnaire de fenêtres, il ne leur apporte aucune décoration,​ ni bordure avec titres et boutons "​Fermer",​ "​Maximiser"​ ou "​Réduire"​.
  
-dwm (et l'​ensemble des outils du projet suckless.org) adhère à une philosophie minimaliste (voir http://​suckless.org/​philosophy). Il est écrit en C et sa configuration se fait dans un fichier écrit en C avant compilation. Cela peut paraître contraignant mais apporte une grande stabilité et la garantie que des options incompatibles ou erronées n'ont pas été indiquées (sans quoi une erreur empêcherait la compilation).+dwm (et l'​ensemble des outils du projet suckless.org) adhère à une philosophie minimaliste (voir http://​suckless.org/​philosophy). Il est écrit en C et sa configuration se fait dans un fichier écrit en C avant compilation. Cela peut paraître contraignant mais apporte une grande stabilité et la garantie que des options incompatibles ou erronées n'ont pas été indiquées (sans quoi une erreur empêcherait la compilation).\\
  
 +Ceux qui le souhaitent peuvent avoir un aperçu de dwm grâce aux captures d'​écran des utilisateurs disponibles sur la page dédiée du projet: http://​dwm.suckless.org/​screenshots/​
 ===== Installation ===== ===== Installation =====
  
 ==== Prérequis ==== ==== Prérequis ====
  
-L'​idée de compiler soi-même un logiciel aussi important que son gestionnaire de fenêtre ​peut en effrayer certains mais nous verrons pas-à-pas comment procéder et il n'y a pas réellement de difficulté technique majeure.\\+L'​idée de compiler soi-même un logiciel aussi important que son gestionnaire de fenêtres ​peut en effrayer certains mais nous verrons pas-à-pas comment procéder et il n'y a pas réellement de difficulté technique majeure.\\
 Il suffit de savoir utiliser un terminal et de saisir les lignes de commandes indiquées ci-après. En effet, toute la configuration et l'​installation seront faites via le terminal.\\ Il suffit de savoir utiliser un terminal et de saisir les lignes de commandes indiquées ci-après. En effet, toute la configuration et l'​installation seront faites via le terminal.\\
  
Ligne 46: Ligne 50:
  
 === Fichier config.mk === === Fichier config.mk ===
 +
 C'est dans ce fichier que nous pouvons modifier les options de compilation. Celle qui va nous intéresser principalement concerne le répertoire dans lequel nous allons installer dwm: C'est dans ce fichier que nous pouvons modifier les options de compilation. Celle qui va nous intéresser principalement concerne le répertoire dans lequel nous allons installer dwm:
 <code fichier> <code fichier>
Ligne 57: Ligne 62:
  
 === Fichier config.def.h === === Fichier config.def.h ===
 +
 Voici donc notre fichier de configuration,​ dans lequel nous allons modifier ou ajouter les options pour personnaliser notre dwm bien à nous.\\ Voici donc notre fichier de configuration,​ dans lequel nous allons modifier ou ajouter les options pour personnaliser notre dwm bien à nous.\\
 Mais avant cela, il est nécessaire d'​appliquer un patch modifiant les séquences de touches et les adaptant au clavier azerty. Le patch est récupérable à l'​adresse suivante : http://​dwm.suckless.org/​patches/​azertykey . Il s'​applique comme suit (pour rappel, notre répertoire est toujours dwm-6.0) : Mais avant cela, il est nécessaire d'​appliquer un patch modifiant les séquences de touches et les adaptant au clavier azerty. Le patch est récupérable à l'​adresse suivante : http://​dwm.suckless.org/​patches/​azertykey . Il s'​applique comme suit (pour rappel, notre répertoire est toujours dwm-6.0) :
 <​code>​patch -p1 < ../​dwm-azertykey.diff</​code>​ <​code>​patch -p1 < ../​dwm-azertykey.diff</​code>​
 Ce qui devrait vous renvoyer une confirmation de succès: Ce qui devrait vous renvoyer une confirmation de succès:
-<​code>​+<​code ​diff>
 patching file config.def.h patching file config.def.h
 Hunk #1 succeeded at 68 (offset 3 lines). Hunk #1 succeeded at 68 (offset 3 lines).
 Hunk #2 succeeded at 102 (offset 3 lines). Hunk #2 succeeded at 102 (offset 3 lines).
 </​code>​ </​code>​
 +<​note>​01-2017 : il semble que le lien ci-dessus est mort. Vous pouvez tout de même utiliser votre dwm avec un clavier azerty en utilisant les codes pour tags ci-dessous (c'​est-à-dire comme dans l'​exemple de configuration qui suit: </​note>​
 +<code C>
 + TAGKEYS( ​                       XK_ampersand, ​                    0)
 + TAGKEYS( ​                       XK_eacute, ​                       1)
 + TAGKEYS( ​                       XK_quotedbl, ​                     2)
 + TAGKEYS( ​                       XK_apostrophe, ​                   3)
 + TAGKEYS( ​                       XK_parenleft, ​                    4)
 + TAGKEYS( ​                       XK_minus, ​                        5)
 + TAGKEYS( ​                       XK_egrave, ​                       6)
 + TAGKEYS( ​                       XK_underscore, ​                   7)
 + TAGKEYS( ​                       XK_ccedilla, ​                     8)
 +</​code>​
 +
 Nous allons pouvoir passer à la configuration,​ voici une version commentée en français du config.def.h : Nous allons pouvoir passer à la configuration,​ voici une version commentée en français du config.def.h :
-<​code ​fichier>+<​code ​C>
 /* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
    
Ligne 95: Ligne 114:
 static const char *tags[] = { "​1",​ "​2",​ "​3",​ "​4",​ "​5",​ "​6",​ "​7",​ "​8",​ "​9"​ }; static const char *tags[] = { "​1",​ "​2",​ "​3",​ "​4",​ "​5",​ "​6",​ "​7",​ "​8",​ "​9"​ };
  
-/* définition des régles: vous pouvez ici appliquer un agencement par défaut à un logiciel particulier */+/* définition des règles: vous pouvez ici appliquer un agencement par défaut à un logiciel particulier */
 static const Rule rules[] = { static const Rule rules[] = {
  /* class      instance ​   title       tags mask     ​isfloating ​  ​monitor */  /* class      instance ​   title       tags mask     ​isfloating ​  ​monitor */
Ligne 105: Ligne 124:
 static const float mfact      = 0.55; /* facteur de taille de la zone principale [0.05..0.95] */ static const float mfact      = 0.55; /* facteur de taille de la zone principale [0.05..0.95] */
 static const int nmaster ​     = 1;    /* nombre de fenêtres dans la zone principale */ static const int nmaster ​     = 1;    /* nombre de fenêtres dans la zone principale */
-static const Bool resizehints = True; /* True = respecter les indications de taille lors du redimmensionnement ​*/+static const Bool resizehints = True; /* True = respecter les indications de taille lors du redimensionnement ​*/
  
 static const Layout layouts[] = { static const Layout layouts[] = {
Ligne 114: Ligne 133:
 }; };
  
-/* key definitions ​*/+/* key définitions ​*/
 /* définition du modificateur:​ Mod1Mask = touche Alt ; Mod4Mask = touche Super (ou windows) */ /* définition du modificateur:​ Mod1Mask = touche Alt ; Mod4Mask = touche Super (ou windows) */
 #define MODKEY Mod1Mask #define MODKEY Mod1Mask
Ligne 190: Ligne 209:
 Une fois notre configuration faite, nous pouvons compiler et installer dwm avec la commande: Une fois notre configuration faite, nous pouvons compiler et installer dwm avec la commande:
 <code root>​make clean install</​code>​ <code root>​make clean install</​code>​
-Toutefois, comme mentionné plus haut,je recommande l'​utilisation de checkinstall:​+Toutefois, comme mentionné plus haut, je recommande l'​utilisation de checkinstall:​
 <code root>​checkinstall -D</​code>​ <code root>​checkinstall -D</​code>​
 Ceci permet une utilisation interactive,​ vous autorisant notamment à changer le numéro de version pour un code de version personnel et permet de créer un paquet .deb de votre version personnalisé de dwm.\\ Ceci permet une utilisation interactive,​ vous autorisant notamment à changer le numéro de version pour un code de version personnel et permet de créer un paquet .deb de votre version personnalisé de dwm.\\
  
-Une fois installé, vous pouvez le tester en sélectionnant la session adéquate dans votre gestionnaire de session (gdm3, kdm, slim...) ou en ajoutant la ligne: +<note important>​Lors de la première compilation,​ un fichier config.h est créé à partir du config.def.h. C'est ce config.h qui est pris en compte véritablement,​ pensez donc par la suite, soit à le modifier directement,​ soit à modifier le config.def.h puis, juste avant la compilation,​ à le copier sous le nom config.h.</​note>​ 
-<​code ​fichier>exec /​usr/​local/​bin/​dwm</​code>​+ 
 +Une fois installé, vous pouvez le tester en sélectionnant la session adéquate dans votre gestionnaire de session (gdm3, kdm, slim...) ou en ajoutant la ligne:\\ 
 + 
 +<​code ​bash>exec /​usr/​local/​bin/​dwm</​code>​ 
 à votre fichier ~/​.xinitrc.\\ à votre fichier ~/​.xinitrc.\\
 ===== Utilisation ===== ===== Utilisation =====
 +=== Comprendre la notion de tag (étiquettes):​ ===
  
-- fonctionnement ​des tags +dwm ne fonctionne pas sur le modèle ​des espaces de travail, mais sur le principe des étiquettes (tags) que vous attribuez à une ou plusieurs fenêtre(s). C'est par exemple ce que vous faites de façon statique dans le config.def.h,​ mais cela peut être fait de façon dynamique. Ainsi la combinaison de touche [<​key>​Maj</​key>​ + MODKEY + <​key>​é</​key>​] attribuera le 2ème tag à la fenêtre active. Vous pouvez sélectionner les tags grâce à la combinaison MODKEY+touche_correspondante. Pour reprendre notre exemple, si vous faites MODKEY + <​key>​é</​key>​ vous sélectionnez toutes les fenêtres ayant le tag "​é"​ et retrouvez donc celle précédemment étiquetée. 
-- raccourcis clavier +Le fonctionnement des tags est détaillé de fort belle manière ici: [[http://​yeuxdelibad.net/​Logiciel-libre/​Suckless/​dwm/​index.html#​etiquettes|dwm,​ chez thuban]].\\ 
-- utilisation souris+=== Liste des raccourcis clavier ​: ===
  
-===== Astuces =====+^   //​RACCOURCIS CLAVIER// ​ ^   //​RESULTAT// ​  ^  
 +| MODKEY+<​key>​Maj-Entrée</​key>​| ouvre un émulateur de terminal | 
 +| MODKEY + <​key>​b</​key>​ | affiche/​cache la barre des tags | 
 +| MODKEY + <​key>​t</​key>​ | passer en agencement tuilage (tiling) | 
 +| MODKEY + <​key>​f</​key>​ | passer en agencement flottant | 
 +| MODKEY + <​key>​m</​key>​ | passer en agencement monocle, la fenêtre principale est maximisée | 
 +| MODKEY + <​key>​Espace</​key>​ | passe de l'​agencement courant à celui précédemment utilisé | 
 +| MODKEY + <​key>​j</​key>​ | passe le focus à la fenêtre suivante | 
 +| MODKEY + <​key>​k</​key>​ | passe le focus à la fenêtre précédente | 
 +| MODKEY + <​key>​h</​key>​ | réduit la taille de la zone principale | 
 +| MODKEY + <​key>​l</​key>​ | augmente la taille de la zone principale | 
 +| MODKEY + <​key>​Entrée</​key>​ | envoie la fenêtre sélectionnée vers la zone principale (ou l'​envoie dans la pile si elle y est déjà) | 
 +| MODKEY + <​key>​Maj-c</​key>​ | ferme la fenêtre sélectionnée | 
 +| MODKEY + <​key>​Maj-Espace</​key>​ | bascule la fenêtre sélectionnée entre les agencements tuilage et flottant | 
 +| MODKEY + <​key>​Tab</​key>​ | sélectionne la vue précédente | 
 +| MODKEY + <​key>​Maj</​key>​ + [<​key>​1</​key>​..n] | donne à la fenêtre l'​étiquette 1..n | 
 +| MODKEY + <​key>​Maj-0</​key>​ | donner toutes les étiquettes à la fenêtre | 
 +| MODKEY + <​key>​C-Maj</​key>​ + [<​key>​1</​key>​..n] | ajoute/​retire l'​étiquette numéro 1..n à la fenêtre sélectionnée,​ pratique si on veut donner une nouvelle étiquette à une fenêtre sans la faire disparaître. Équivalent à MODKEY + <​key>​Maj</​key>​ puis MODKEY + <​key>​C-n</​key>​ | 
 +| MODKEY + [<​key>​1</​key>​..n] | voir toutes les fenêtres dont l'​étiquette est 1..n | 
 +| MODKEY + <​key>​0</​key>​ | voir toutes les fenêtres, quelle que soient leurs étiquettes | 
 +| MODKEY + <​key>​C</​key>​ + [<​key>​1</​key>​..n] | ajoute/​retire de la vue toutes les fenêtres avec l'​étiquette 1..n | 
 +| MODKEY + <​key>,</​key>​ | change d'​écran,​ si il y en a plusieurs | 
 +| MODKEY + <​key>​Maj-q</​key>​ | quitte dwm (et votre session X par la même occasion) | 
 +| MODKEY + <​key>​d</​key>​ | diminuer le nombre de fenêtres dans la zone principale | 
 +| MODKEY + <​key>​i</​key>​ | augmenter le nombre de fenêtres dans la zone principale | 
 + 
  
-- attribution d'un tag à un programme +=== dwm et la souris ​: ===
-- ajout commande shell et de son raccourci clavier +
-- ajout commande static pour st tabbed +
-- modification du volume avec molette ​souris +
-- présentation dwmstatus+
  
-===== Conclusion =====+Bien qu'​étant conçu pour être piloté intégralement au clavier, il est possible d'​utiliser la souris dans dwm:
  
 +^   //​RACCOURCIS// ​ ^   //​RESULTAT// ​  ^
 +| Clic-gauche sur symbole de l'​agencement | bascule entre agencements précédents |
 +| Clic-milieu sur titre fenêtre | bascule des fenêtres depuis/vers la zone principale |
 +| Clic-milieu sur zone de status | ouvre un nouvel émulateur de terminal |
 +| Clic-gauche + MODKEY sur fenêtre | déplacer la fenêtre |
 +| Clic-droit + MODKEY sur fenêtre | redimensionner la fenêtre |
 +| Clic-milieu + MODKEY sur fenêtre | basculer la fenêtre en agencement flottant |
 +| Clic-gauche sur étiquette | voir les fenêtres possédant l'​étiquette |
 +| Clic-droit sur étiquette | basculer entre les vues sélectionnées |
 +| Clic-gauche + MODKEY | attribuer l'​étiquette cliquée à la fenêtre active |
 +| Clic-droit + MODKEY | basculer entre les étiquettes attribuées à une fenêtre |
 +
 +
 +
 +===== Astuces: =====
 +=== Attribution d'un tag à un programme: ===
 +
 +Si vous souhaitez affecter une étiquette particulière à un programme de façon statique, cela est possible grâce aux règles de fenêtres qui se trouvent dans la partie du config.def.h\\
 +
 +**static const Rule rules[]**
 +
 +Une règle se définit sur le modèle suivant:\\
 +<code C>
 +{ "​Classe_de_la_fenêtre", ​   Instance, ​   Titre, ​   Masque_d'​étiquette, ​   Flottante?, ​   Num_écran },
 +</​code>​
 +dans lequel la classe, l'​instance et le titre sont récupérables en lançant l'​utilitaire xprop et en cliquant sur la fenêtre en question. La plupart du temps la classe suffit et instance et titre ont pour valeur NULL.\\
 +Le masque d'​étiquette répond à une logique particulière:​ 0 représente toutes les étiquettes,​ 1 << 2 représente la 3ème, 1 << 0 la 1ère, 1 << 7 la 8ème, etc... Le paramètre Flottante (isfloating dans le texte) prend pour valeur True ou False selon si la fenêtre doit nativement être flottante ou pas. Enfin Num_écran est le numéro de l'​écran sur lequel s'​affichera la fenêtre. "​-1"​ représente l'​écran actif.\\
 +
 +__**Exemple:​**__
 +<code C>
 +static const Rule rules[] = {
 +/* class        instance ​   title       tags mask     ​isfloating ​  ​monitor */
 +{ "​Dwb", ​             NULL,       ​NULL, ​      1 << 1,       ​False, ​      -1 },
 +{ "​Iceweasel", ​       NULL,       ​NULL, ​      1 << 1,       ​False, ​      -1 },
 +{ "​Gimp", ​            ​NULL, ​      ​NULL, ​      1 << 3,       ​False, ​      -1 },
 +{ "​Inkscape", ​        ​NULL, ​      ​NULL, ​      1 << 3,       ​False, ​      -1 },
 +};
 +</​code>​
 +Toutes les fenêtres ayant pour classe Dwb s'​ouvriront en ayant l'​étiquette 2.\\
 +
 +=== Ajout commande shell et de son raccourci clavier: ===
 +
 +Il est bien entendu possible, et indispensable d'​ailleurs,​ de paramétrer vos propres raccourcis clavier pour exécuter un programme, un script etc... En voici la syntaxe:\\
 +<code C>
 +  { ControlMask|Mod1Mask, ​        ​XK_i, ​          ​spawn, ​         SHCMD("​dwb"​) },
 +  { ControlMask|Mod1Mask, ​        ​XK_m, ​          ​spawn, ​         SHCMD("​st -e mutt -y") },
 +  { ControlMask|Mod1Mask, ​        ​XK_p, ​          ​spawn, ​         SHCMD("​st -e mcabber"​) },
 +  { ControlMask|Mod1Mask, ​        ​XK_g, ​          ​spawn, ​         SHCMD("​gimp"​) },
 +</​code>​
 +On voit que dans un premier temps on définit les touches modificatrices utilisées (ici <​key>​C-A</​key>​) associées à une touche du clavier (notée XK_et-sa-lettre). En bout de ligne, on voit que l'on utilise la fonction de dwm appelé SHCMD pour lancer le programme voulu. En somme, <​key>​C-A-i</​key>​ ouvre dwb, <​key>​C-A-m</​key>​ ouvre mutt dans l'​émulateur de terminal st, <​key>​C-A-p</​key>​ ouvre mcabber dans st également et enfin <​key>​C-A-g</​key>​ lance Gimp.\\
 +
 +Si vous souhaitez utiliser une touche non alpha-numérique (ex: <​key>​ImpÉc</​key>​),​ il faut récupérer son code avec l'​utilitaire xev et le mettre à la place de XK_ et de mettre 0 à la place des modificateurs (en effet, ces touches spéciales s'​emploient souvent seule).\\
 +<code fichier>
 +  { 0,                            0xff61, ​        ​spawn, ​         SHCMD("​scrot -z") },
 +</​code>​
 +Dans cet exemple, j'​utilise la touche <​key>​ImpÉc</​key>​ (PrtScr), pour faire une capture d'​écran à l'aide de scrot. Sur mon clavier, le code de cette touche est 0xff61.\\
 +
 +__Note sur la définition de l'​émulateur de terminal:__ \\
 +
 +Le terminal à utiliser se définit dans le config.def.h grâce à la ligne:\\
 +
 +<code C>
 +/* commande d'​exécution de l'​émulateur de terminal par défaut du système */
 +static const char *termcmd[] ​ = { "​x-terminal-emulator",​ NULL };
 +</​code>​
 +Si vous utilisez Debian, je vous recommande de laisser x-terminal-emulator. Cela vous permettra par la suite de choisir le terminal par défaut grâce au système d'"​alternatives"​ de Debian (commande root update-alternatives --config x-terminal-emulator). Vous y gagnerez en souplesse et ne serez plus obligé de modifier la configuration de dwm et de le compiler à chaque changement.\\
 +
 +=== Ajout commande static pour st tabbed: ===
 +
 +Pour les utilisateurs de l'​émulateur de terminal st et de tabbed, une interface générique à onglet, il est intéressant de définir une constante permettant de lancer l'un dans l'​autre directement,​ sans utiliser la fonction interne SHCMD. Cela nous économise le lancement d'un processus de /bin/sh supplémentaire. Il suffit de rajouter cette ligne en dessous de celle définissant l'​émulateur de terminal :\\
 +
 +<code C>
 +static const char *tabbedst[] = { "​tabbed",​ "​-c",​ "​-r",​ "​2",​ "​st",​ "​-w",​ "''",​ NULL };
 +</​code>​
 +
 +=== Modification du volume avec molette de la souris: ===
 +
 +Il est possible de modifier le volume sonore simplement en faisant jouer la molette de la souris dans la zone de statuts de la barre de dwm. Pour cela, ajoutez les lignes suivantes à la fin du fichier de configuration,​ dans la section "​buttons définitions":​\\
 +<code C>
 +   { ClkStatusText, ​       0,              Button4, ​       spawn, ​         SHCMD("​amixer -q set Master 2dB+ unmute"​) },
 +   { ClkStatusText, ​       0,              Button5, ​       spawn, ​         SHCMD("​amixer -q set Master 2dB- unmute"​) },
 +</​code>​
 +
 +=== Changer l'​opacité des fenêtres avec la souris (ou le pad) ===
 +
 +Il faudra pour que cela fonctionne que le logiciel **transset** soit installé. Il est disponible dans le paquet **x11-apps**.
 +<code C>
 + { ClkClientWin, ​        ​MODKEY|ControlMask, ​  ​Button4, ​ spawn, ​         SHCMD("​transset -a --inc 0.1") },
 + { ClkClientWin, ​        ​MODKEY|ControlMask, ​  ​Button5, ​ spawn, ​         SHCMD("​transset -a --dec 0.1") },
 +</​code>​
 +Ainsi en maintenant les touches Super (si c'est celle que vous avez choisi en tant que MODKEY) et Control et en scrollant la roulette de la souris au dessus d'une fenêtre, vous pouvez augmenter ou diminuer l'​opacité de celle-ci.
 +
 +===== Présentation dwmstatus: =====
 +
 +dwmstatus est un petit programme permettant d'​afficher toutes sortes d'​informations utiles dans la zone de statut de la barre. La version téléchargeable sur le site du projet suckless n'est qu'un squelette vous permettant d'en faire ce que bon vous semble. Voici le code de celui que j'​utilise,​ il est constitué d'​exemples trouvés ici et là et adapté à mon ordinateur:​\\
 +
 +<code C>
 +/* Made by sogal, last update: 20141224
 +**
 +** Compile with:
 +** gcc -Wall -pedantic -std=c99 -lX11 status.c
 +*/
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +#include <​unistd.h>​
 +#include <​time.h>​
 +#include <​X11/​Xlib.h>​
 +#include <​stdarg.h>​
 +#include <​string.h>​
 +#include <​strings.h>​
 +#include <​sys/​sysinfo.h>​
 +#include <​sys/​types.h>​
 +#include <​sys/​stat.h>​
 +#include <​dirent.h>​
 +#include <​locale.h>​
 +#include <​fcntl.h>​
 +#include <​errno.h>​
 +#include <​math.h>​
 +
 +static Display *dpy;
 +
 +void setstatus(char *str) {
 + XStoreName(dpy,​ DefaultRootWindow(dpy),​ str);
 + XSync(dpy, False);
 +}
 +
 +char *
 +smprintf(char *fmt, ...)
 +{
 +  va_list fmtargs;
 +  char *buf = NULL;
 +
 +  va_start(fmtargs,​ fmt);
 +  if (vasprintf(&​buf,​ fmt, fmtargs) == -1){
 +    fprintf(stderr,​ "​malloc vasprintf\n"​);​
 +    exit(1);
 +  }
 +  va_end(fmtargs);​
 +
 +  return buf;
 +}
 +
 +char*
 +runcmd(char* cmd) {
 +  FILE* fp = popen(cmd, "​r"​);​
 +  if (fp == NULL) return NULL;
 +  char ln[50];
 +  fgets(ln, sizeof(ln)-1,​ fp);
 +  pclose(fp);
 +  ln[strlen(ln)-1]='​\0';​
 +  return smprintf("​%s",​ ln);
 +}
 +
 +char *
 +loadavg(void)
 +{
 +    double avgs[3];
 +
 +    if (getloadavg(avgs,​ 3) < 0) {
 +        perror("​getloadavg"​);​
 +        exit(1);
 +    }
 +
 +    return smprintf("​%.2f %.2f %.2f", avgs[0], avgs[1], avgs[2]);
 +}
 +
 +char *getdatetime() {
 + char *buf;
 + time_t result;
 + struct tm *resulttm;
 +
 + if((buf = malloc(sizeof(char)*65)) == NULL) {
 + fprintf(stderr,​ "​Cannot allocate memory for buf.\n"​);​
 + exit(1);
 + }
 + result = time(NULL);
 + resulttm = localtime(&​result);​
 + if(resulttm == NULL) {
 + fprintf(stderr,​ "Error getting localtime.\n"​);​
 + exit(1);
 + }
 + if(!strftime(buf,​ sizeof(char)*65-1,​ "%d %h %H:​%M:​%S",​ resulttm)) {
 + fprintf(stderr,​ "​strftime is 0.\n"​);​
 + exit(1);
 + }
 +
 + return buf;
 +}
 +
 +int getbattery() {
 + FILE *fd;
 + int energy_now, energy_full;​
 +
 + fd = fopen("/​sys/​class/​power_supply/​BAT0/​energy_now",​ "​r"​);​
 + if(fd == NULL) {
 + fprintf(stderr,​ "Error opening energy_now.\n"​);​
 + return -1;
 + }
 + fscanf(fd, "​%d",​ &​energy_now);​
 + fclose(fd);​
 +
 +
 + fd = fopen("/​sys/​class/​power_supply/​BAT0/​energy_full",​ "​r"​);​
 + if(fd == NULL) {
 + fprintf(stderr,​ "Error opening energy_full.\n"​);​
 + return -1;
 + }
 + fscanf(fd, "​%d",​ &​energy_full);​
 + fclose(fd);​
 +
 + return (((float)energy_now / (float)energy_full) * 100);
 + }
 +
 +int
 +getvolume() {
 +  int volume;
 +  sscanf(runcmd("​amixer | grep -A 6 Master | grep '​Playback'​\
 +| grep -o '​[0-9%]*%'"​),​ "​%i%%",​ &​volume);​
 +  return volume;
 +
 +}
 +
 +
 +int main(void) {
 + char *status;
 +    char *avgs = NULL;
 + char *datetime;
 + int bat0;
 + int volume = 0;
 +
 +
 + if (!(dpy = XOpenDisplay(NULL))) {
 + fprintf(stderr,​ "​Cannot open display.\n"​);​
 + return 1;
 + }
 +
 + if((status = malloc(200)) == NULL)
 + exit(1);
 +
 +
 + for (;;​sleep(1)) {
 +        avgs = loadavg();
 + datetime = getdatetime();​
 + bat0 = getbattery();​
 + volume = getvolume();​
 + snprintf(status,​ 200, "%s | %s | Ω %d%% | ♫ %d%%", avgs, datetime, bat0, volume);
 +
 +        free(avgs);
 + free(datetime);​
 + setstatus(status);​
 + }
 +
 +    free(status);​
 + XCloseDisplay(dpy);​
 +
 + return 0;
 +}
 +</​code>​
 +Il affiche la charge système, la date et l'​heure,​ le niveau de batterie et le volume.\\
 +
 +Il est également possible d'​obtenir quelque chose de similaire sans avoir recours au C mais simplement avec un script shell:
 +
 +Afin d'​afficher des informations diverses dans la barre de dwm (la date, le nombre de mails...), la procédure est extrêmement simple. En effet, dwm affiche ce que vous passez à la commande **xsetroot**. Exemple : 
 +
 +<code bash>
 +    xsetroot -name "​Coucou"​
 +</​code>​
 +
 +Bien sûr, vous ce qui vous intéresse c'est la date ou autres choses. Il suffit alors de lancer cette commande toute les secondes. Pour cela, avant de lancer dwm, exécutez un script shell de ce type : \\
 +<code bash>
 +    while true; do
 +        xsetroot -name "​$(date) $(uptime | sed '​s/​.*,//'​)"​
 +        sleep 1
 +    done &
 +</​code>​
 +
 +Voici un autre exemple plus complet (qui affiche la chanson jouée, le niveau de batterie, le volume sonore et l'​heure):​\\
 +
 +<code bash>
 +#!/bin/sh
 +
 +    mus() {
 +        if [ "$(mpc |grep playing)"​ ]; then
 +            INFO="​$(mpc |head -n1)"
 +            L="​$(mpc |grep -Eo '​[0-9]+:​[0-9]+/​[0-9]+:​[0-9]+'​)"​
 +            MUS="[ ♫ $INFO - $L] ";
 +        else
 +            MUS="";​
 +        fi
 +    }
 +
 +    bat() {
 +        BAT="​[B : $(acpi -b | awk '​sub(/,/,""​) {print $3, $4}'​)]"​
 +    }
 +    vol() {
 +        VOL="​$(amixer -c0 sget Master |grep -Eo '​[0-9]+%'​)"​
 +    }
 +    getdate() {
 +        DATE="​$(date '​+%d/​%m/​%y %H:​%M'​)"​
 +    }
 +
 +    while true; do
 +        mus
 +        bat
 +        vol
 +        getdate
 +        xsetroot -name "$MUS $BAT [Vol:$VOL] [$DATE]"​
 +        sleep 2s
 +    done
 +</​code> ​   ​
 +//Merci à Thuban pour cette remarque et pour cet exemple.//
 +===== Conclusion: =====
 +
 +dwm est un excellent gestionnaire de fenêtre, je l'​utilise au quotidien et l'​apprécie particulièrement. La gestion des fenêtres est très bonne, grâce aux commandes clavier, il est extrêmement simple de les déplacer, de les étiquetter,​ de les rappeler, de les basculer d'un écran à l'​autre. dwm est très sobre en ressources et d'une stabilité à toute épreuve. Sa mise en place est un peu délicate et peut rebuter toutefois (configuration pré-compilation,​ manipulation de fichiers source en C, dénuement apparent). J'​espère que ce tutoriel et les sources dont il s'​inspire saura vous aider à l'​apprivoiser.\\
  
 --- //​[[sogalpunx@volted.net|Sogal '​Seb'​ Punx]] 18/01/2015 17:24// --- //​[[sogalpunx@volted.net|Sogal '​Seb'​ Punx]] 18/01/2015 17:24//
Ligne 220: Ligne 579:
 http://​yeuxdelibad.net/​Logiciel-libre/​Suckless/​dwm/​index.html http://​yeuxdelibad.net/​Logiciel-libre/​Suckless/​dwm/​index.html
 http://​dwm.suckless.org/​dwmstatus/​ http://​dwm.suckless.org/​dwmstatus/​
- 
doc/environnements/x11/dwm.1421598306.txt.gz · Dernière modification: 18/01/2015 17:25 par sogalpunx

Pied de page des forums

Propulsé par FluxBB