Réponses:
wmctrl -lG
Vous donnera quelque chose comme:
oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330 170 bert N/A
0x01200023 -1 0 0 3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24 bert Bottom Expanded Edge Panel
0x01000028 -1 0 2352 1920 24 bert Bottom Expanded Edge Panel
0x0500003e 0 676 252 1404 1015 bert Chromium
0x02e00021 0 3860 160 1361 1084 bert Liferea
0x02000047 0 6650 940 506 683 bert Social broadcast messages
0x04600004 0 4546 460 1263 833 bert oli@bert: ~
Avec cela, vous pouvez grep
et cut
vers le bas sur ces derniers de sorte que vous vous retrouvez avec les valeurs de la géométrie (colonnes 3-6).
Pour citer la page de manuel afin que vous compreniez exactement ce que sont les colonnes:
-l
Liste les fenêtres gérées par le gestionnaire de fenêtres. Une ligne est sortie pour chaque fenêtre, la ligne étant divisée en colonnes séparées par des espaces. La première colonne contient toujours l'identité de la fenêtre sous la forme d'un entier hexadécimal et la deuxième colonne contient toujours le numéro de bureau (un -1 est utilisé pour identifier une fenêtre collante). Si l'option -p est spécifiée, la colonne suivante contiendra le PID de la fenêtre sous forme d'entier décimal. Si l'option -G est spécifiée, quatre colonnes entières suivront: décalage x, décalage y, largeur et hauteur. La colonne suivante contient toujours le nom de l'ordinateur client. Le reste de la ligne contient le titre de la fenêtre (éventuellement avec plusieurs espaces dans le titre).
Je crois que wmctrl n'a pas d'option pour trouver directement l'ID de la fenêtre active .
Si quelqu'un sait comment le faire, je suis intéressé de savoir ..
Cela dit, voici quelques scripts qui affichent la taille de la fenêtre active.
C'est: wmctrl + xdotool ... (n'utilisant pas sed).
id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done
C'est: xwininfo + xdotool + sed
xwininfo
fait partie de x11-utils
set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
-e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"
Utilisez xprop
ou xwininfo
. Les deux viennent par défaut, aucune installation nécessaire
Les deux commandes transforment le curseur en carré / croix pour permettre de sélectionner une fenêtre particulière.
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
Alternativement, on peut spécifier la fenêtre en ligne de commande sous forme XID
$ xprop _NET_WM_OPAQUE_REGION -id 83886090
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
En particulier, xwininfo
a été activement utilisé par moi pour les scripts, comme sur ces questions AskUbuntu:
Les scripts shell ne connaissent pas ou ne se soucient pas des fenêtres. Au mieux, ils s'exécutent dans un terminal (qui peut ou non être affiché dans une fenêtre). Si vous souhaitez obtenir la largeur et la hauteur du terminal en caractères, utilisez l'utilitaire stty.
J'ai trouvé que ça tput cols
fonctionnait très bien!
wmctrl
, nous ne parlons pas de console mais de fenêtres d'environnement graphique.