Définition des dimensions de la fenêtre d'une application en cours d'exécution

28

J'essaie de démarrer une application dans Ubuntu (xfce ou gnome) et via la ligne de commande et je me demandais s'il y avait un moyen générique de définir les dimensions d'une fenêtre donnée d'une application donnée qui est actuellement en cours d'exécution?

Jamie
la source

Réponses:

18

C'est plus facile à faire si vous installez quelque chose comme xdotool. Ensuite, vous pouvez faire:

xdotool search --name "window name" windowsize 300 400

remplacez "nom de la fenêtre" par un nom ou un reg ex apparaissant dans le titre de la fenêtre (vous pouvez également rechercher par classe de fenêtre et une variété d'autres choses), et les deux nombres apparaissant après la taille de la fenêtre sont respectivement la largeur et la hauteur. (Vous pouvez également utiliser des pourcentages, etc.) Voir man xdotoolune fois qu'il est installé.

Si vous utilisez Lucid ou une version antérieure, je vous conseille toutefois d'aller sur le site Web xdotool pour obtenir une version plus récente.

Pour redimensionner Firefox, par exemple:

xdotool search --name "Mozilla Firefox" windowsize 1024 768
frabjous
la source
3
est-il possible de redimensionner la fenêtre plein écran sans décorations (barre de titre)? Et définir la position exacte à l'écran (par exemple x = 0, y = 0)? J'essaie de régler cela pour que le mplayer maximisé passe à 800x600 x = 0 y = 0, puis après quelques minutes au même mode plein écran. merci
peter
15

Si le gestionnaire de fenêtres prend en charge Xlib, c'est le cas. Cela utilise Python pour définir la taille de la fenêtre à 500x300:

WIDTH, HEIGHT = 500, 300
import Xlib
import Xlib.display

display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()

La partie difficile est d'obtenir l'ID de la fenêtre; dans le code ci-dessus, il a obtenu l'ID de la fenêtre active. Si vous voulez un autre ID, vous pouvez utiliser quelque chose comme ça pour obtenir le titre et contrôler le PID de chaque fenêtre, et choisir le bon ID en fonction de ceux-ci:

windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
for windowID in windowIDs:
    window = display.create_resource_object('window', windowID)
    name = window.get_wm_name() # Title
    prop = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType)
    pid = prop.value[0] # PID
Michael Mrozek
la source
quand je print pidreçois <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... une suggestion pour isoler le PID réel?
khaverim
Nvm. Cela ne semble pas être possible, mais je peux faire une solution via name.
khaverim
1
@khaverim Hmm. Je pense que cette API a changé depuis la dernière fois que je l'ai écrite, qui était juste le PID. J'ai mis à jour la réponse, vous voulez prendre la valeur renvoyée par get_full_propertyet faire .value[0]( valueest un tableau )
Michael Mrozek
1
python Xlib peut être installé via: sudo apt-get install python-xlib (sur Ubuntu)
Tom
4

Spécifique à XFCE, il existe pyxfce qui vous permettra de le faire en utilisant le langage python . Pyxfce est une API qui, entre autres, vous permet de communiquer avec le gestionnaire de fenêtres . Pour l'utiliser à partir de la ligne de commande, vous devez d'abord préparer un script.

Selon votre utilisation, l'importance d'utiliser une API basée sur X utilisant des ID de fenêtre X (tels que python-xlib ou xdotools mentionnés dans une autre réponse) par rapport à d'autres qui utilisent des chaînes correspondant aux titres de fenêtre (comme wmctrl), est qu'il ne peut y avoir aucun confusion entre les fenêtres, qui peuvent avoir les mêmes mots-clés dans leur titre respectif.

Benjoin
la source
3
#!/bin/bash
#get window pid under mouse
xprop -id $(xwit -current -print | cut -d ":" -f 1) | grep _NET_WM_PID | cut -d "=" -f2 | cut -c 2-
Wilton lazary
la source
0

J'ai trouvé que wmctrl me convenait le mieux. Il est disponible en tant que petit paquet, pour Ubuntu et pour Raspbian, et probablement pour d'autres distributions également.

Karel Adams
la source
Nous avons une réponse qui mentionne wmctrl , mais nous n'avons pas de réponse qui montre comment l'utiliser; pourriez-vous développer votre réponse avec une démonstration, juste pour que les gens puissent ensuite la prendre et l'adapter à leur usage particulier? Merci!
Jeff Schaller
Si j'avais eu un exemple à portée de main, je l'avais certainement ajouté. N'est-ce pas à cela que servent les pages de manuel?
Karel Adams