Automatiser son bureau: wmctrl

Description

wmctrl est une commande compatible EWMH and NetWM et, destinée au contrôle de votre gestionnaire de fenêtres.

Automatiser ces commandes permet à châque ouverture de session de lancer ses applications habituelles et les disposer aux coordonnées voulues sur les différents bureaux.

Installation

Classique:

yum install wmctrl

Options

Toutes les options ne seront pas décrites ici :

  • man wmctrl
  • wmctrl -h

On peut par exemple, basculer vers un bureau, une fenêtre, fermer une fenêtre, changer le nombre de bureaux, changer l'état, l'emplacement, la taille d'une fenêtre, etc...

Lister les bureaux

[toto@machine-a-toto ~]$ wmctrl -d
0 * DG: 1680x1050 VP: 0,0 WA: 0,24 1680x999 Espace de travail 1
1 - DG: 1680x1050 VP: N/A WA: 0,24 1680x999 Espace de travail 2
2 - DG: 1680x1050 VP: N/A WA: 0,24 1680x999 Espace de travail 3
3 - DG: 1680x1050 VP: N/A WA: 0,24 1680x999 Espace de travail 4
  • On distingue les 4 bureaux identifiés de 0 à 3.
  • L'astérisque représente le bureau par defaut.
  • Le 3eme champ donne la taille de châque bureau.

Lister les fenêtres

[toto@machine-a-toto ~]$ wmctrl -l
0x0140001e -1 c38pctoto x-nautilus-desktop
0x04800003 3 c38pctoto Calculatrice - Mode programmation
0x00e00049 1 c38pctoto Courrier entrant - Mozilla Thunderbird
0x01402302 3 c38pctoto / - Navigateur de fichiers
0x04000003 0 c38pctoto ninux.jpg
0x0420000c 2 c38pctoto Google - Opera
0x03c00049 2 c38pctoto wmctrl | - Mozilla Firefox
0x01200028 -1 c38pctoto Bottom Panel
0x01200003 -1 c38pctoto Top Panel
0x03e0043f 0 c38pctoto c38toto@c38pctoto:~ - Terminal

On retrouve dans l'ordre:

  • l'ID de châque fenêtre.
  • le numéro d'ordre du bureau et le nom de la fenetre. Ce nom servira à spécifier les différentes fenêtres avec l'option -r

Pas de casse des charactères. Un morceau de la chaine de charactère suffira à l'identifier. Attention toutefois aux redondances de noms, la première occurence trouvée sera choisie.

On voit donc:

  • 2 fenêtres sur le premier bureau : Un terminal et une image.jpg.
  • Thunderbird sur le 2eme.
  • Opera et Firefox sur le 3eme ...

Certaines fenêtre ont un ID de bureau à -1. Ce sont les parties statiques communes à tous les bureaux.

Exemples

Pour basculer sur le bureau et activer la fenetre de Thunderbird :

wmctrl -a Courrier

Pour passer Thunderbird sur le bureau 4 :

wmctrl -r <win> -t <desk>
wmctrl -r Thunderbird -t 3

La suite de l'article traite un cas un peu plus particulier, il sera facile de le simplifier pour ramener les opérations à un bureau standard.

Avec Compiz

Avec Compiz on a un seul bureau.

[root@machine-a-toto ~]# wmctrl -d
0 * DG: 13440x1050 VP: 11760,0 WA: 0,24 1680x999 Espace de travail 1

On voit ci-dessus sa taille : 13440x1050. C'est en fait le multiple de mes 8 bureaux d'une largeur de 1680px chacun. Ce qui nous fait un seul bureau bien ... large.

Il sera donc nécéssaire de calculer les valeurs des ordonnées pour se positionner sur le bureau virtuel choisi. Le premier bureau utilisant l'espace de 1 à 1680, le deuxieme de 1681 à 3360, etc ...

Tableau mémo pour ma résolution de 1680x1050 :

Positions 0-1680 1681-3360 3361-5040 5041-6720 6721-8400 8401-10080 10081-11760 11761-13440 13441-15120 15121-16800 16801-18480 18481-20160

Bureau N° 1 2 3 4 5 6 7 8 1 2 3 4

J'ai volontairement affiché plus de valeurs que les 8 bureaux. On retrouvera plus loin ces valeurs.

BUG ? Considérons que l'on peut courber ces bureaux sur une piste circulaire pour en joindre les extrémités.

Affichons à nouveau la liste des fenêtres. Une option supplémentaire : -G affichera la taille effective de la fenêtre.

[toto@machine-a-toto ~]$ wmctrl -G -l
0x01200003 -1 0 0 1680 24 c38pctoto Top Panel
0x01200028 -1 0 2046 1680 27 c38pctoto Bottom Panel
0x0140001e 0 0 0 1680 1050 c38pctoto x-nautilus-desktop
0x03c00049 0 6720 86 1680 980 c38pctoto Google - Mozilla Firefox
0x00e00049 0 3360 86 1680 980 c38pctoto Courrier entrant - Mozilla Thunderbird
0x04000003 0 10080 86 1680 980 c38pctoto ninux.jpg
0x0420000c 0 16800 86 1680 980 c38pctoto Erreur! - Opera
0x046002e1 0 20160 86 1680 980 c38pctoto The Wireshark Network Analyzer
0x04800003 0 23526 200 646 466 c38pctoto Calculatrice - Mode programmation
0x01402302 0 13440 86 1680 980 c38pctoto / - Navigateur de fichiers
0x03e00004 0 0 86 1680 980 c38pctoto c38toto@c38pctoto:~ - Terminal
0x00e0bdb1 0 3360 86 1680 980 c38pctoto Carnet d'adresses

La géométrie que renvoie le gestionnaire de fenêtre vers wmctrl est différente de la réalité.On croirait qu'il y a ici plus de bureaux que 8. Les dimensions des fenêtres sont parfois inexactes.

Lors d'une commande de déplacement d'une fenêtre, on peut ramener la valeur y (ici 86) à 0 pour la placer en haut.

Déplacer une fenêtre :

wmctrl -r <win> -e <margv>
  • <win> Correspond à une occurence du nom que l'on obtient avec l'option -l
  • <mvarg> Est composé de 5 arguments :
    • g : gravité. Laisser 0 pour le fonctionnement par defaut.
    • x : Position de depart de la fenêtre axe des x
    • y : Position de depart de la fenêtre axe des y ( les 2 positions précédentes correspondent au coin supérieur gauche de la fenetre. )
    • w : Largeur de la fenêtre.
    • h : Hauteur Le positionnement se fait par rapport au bureau depuis lequel la commande est lancée. Si je suis sur le 4eme bureau, avec une commande positionnant l'axe des X à 0, la fenetre viendra sur le bureau du terminal executant la commande et non pas sur le 1er bureau.

Compiz utilise les ViewPorts plutot que les bureaux. Les valeurs suivantes définissent le coin supérieur gauche. On peut changer l'offset pour caler le viewport sur le 2eme Bureau:

-o <x>,<y>
-o 0,1681

Exemple de positionnement : Deplacement de Thunderbird sur le 3eme bureau :

wmctrl -r Thunderbird -e 0,5041,0,1680,1050

Ou en utilisant l'ID de la fenêtre :

wmctrl -i -r 0x00e00049 -e 0,5041,0,1680,1050

Voir aussi

  • Zenity
  • xosd
  • xnee