Obtenir la taille de la fenêtre dans le shell


18

Je voudrais obtenir la taille de la fenêtre courante à partir d'un script shell ...

Vraiment pas grand chose d'autre à dire ... Je préférerais utiliser wmctrl.

Réponses:


23
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 grepet cutvers 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 vais utiliser ça!
Allan

1
J'adore la façon dont votre ordinateur s'appelle bert :)
drnessie

5

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"

2

Utilisez xpropou xwininfo. Les deux viennent par défaut, aucune installation nécessaire

Exemples d'utilisation:

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

Autres postes où ceux-ci ont été utilisés

En particulier, xwininfoa été activement utilisé par moi pour les scripts, comme sur ces questions AskUbuntu:


Il est courant, ajoutez un exemple;)
AB

Ajouté après un an;) Mais mieux vaut tard que jamais, non?
Sergiy Kolodyazhnyy

0

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.


2
Un script shell pourrait sûrement interroger les clients X pour leur géométrie? Sinon, comment les applications X seraient-elles écrites?
djeikyb

@djeikyb, ils sont écrits pour être des clients X et communiquent avec le serveur X. Les scripts shell s'exécutent dans un shell, qui peut ou non s'exécuter dans un environnement qui a même un serveur X, et ne devrait pas se soucier de X.
psusi

2
Naturellement, oui. Mais il existe des solutions de contournement! En utilisant wmctrl, un package du repo, vous pouvez déplacer, redimensionner, minimiser et même modifier l'espace de travail!
drnessie

Selon la logique de @ psusi, les environnements de bureau ne devraient pas exister. Après tout, ce ne sont que d'énormes collections de scripts qui interagissent avec des logiciels écrits pour X.
andyn

0

J'ai trouvé que ça tput colsfonctionnait très bien!


2
Nous vous remercions de votre contribution. Je suggère d'améliorer votre réponse: expliquez ce qu'elle fait, modifiez la commande pour obtenir également le nombre de lignes. Peut-être montrer comment utiliser les résultats dans un script shell. - Voir les réponses les mieux notées à titre d'exemples.
guntbert

En déduisant de la mention OP wmctrl, nous ne parlons pas de console mais de fenêtres d'environnement graphique.
andyn

0

Vous avez 3 écrans, cette sortie 3 lignes avec les dimensions:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.