web-dev-qa-db-fra.com

Obtenir la taille de la fenêtre en shell

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

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

17
drnessie
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 sur ces valeurs afin de conserver les valeurs géométriques (colonnes 3-6).

Pour citer page de manuel , vous devez donc comprendre exactement ce que sont les colonnes:

- l

Répertorie 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 forme d'entier hexadécimal et la deuxième colonne contient toujours le numéro du bureau (-1 sert à identifier une fenêtre permanente). 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).

22
Oli

Je pense que wmctrl ne dispose pas d’option pour rechercher directement la fenêtre active.
Si quelqu'un sait comment 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 ... (ne pas utiliser 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"
5
Peter.O

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

Exemples d'utilisation:

Les deux commandes tournent 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 une fenêtre sur la 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ù ils ont été utilisés

En particulier, xwininfo a été activement utilisé par moi pour les scripts, comme pour les questions AskUbuntu:

2

J'ai trouvé tput cols travailler assez bien!

0
Milo Banks

Les scripts shell ne connaissent ni ne s’intéressent à Windows. Au mieux, ils fonctionnent dans un terminal (qui peut ou non être affiché dans une fenêtre). Si vous voulez obtenir la largeur et la hauteur du terminal en caractères, utilisez l'utilitaire stty.

0
psusi