web-dev-qa-db-fra.com

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

J'essaie de démarrer une application au sein d'Ubuntu (XFCE ou GNOME) et via la ligne de commande et vous vous demandez s'il existe une façon générique de définir les dimensions d'une fenêtre donnée d'une application donnée en cours d'exécution?

29
Jamie

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 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 numéros apparaissant après que Windowsize est la largeur et la hauteur, respectivement. (Vous pouvez également utiliser les percents, etc.) voir man xdotool Une fois qu'il est installé.

Si vous êtes sur Lucid ou plus tôt, je recommande d'aller au Site Web Xdotool pour obtenir une version plus récente.

Pour redimensionner Firefox, par exemple:

xdotool search --name "Mozilla Firefox" windowsize 1024 768
20
frabjous

Si le gestionnaire de fenêtres prend en charge XLIB il y a. Cela utilise Python pour définir la taille de la fenêtre sur 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 consiste à obtenir l'identifiant de la fenêtre; Dans le code ci-dessus, il a obtenu l'identifiant de la fenêtre active. Si vous souhaitez une autre carte d'identité, vous pouvez utiliser quelque chose comme celui-ci pour obtenir le titre et contrôler le PID de chaque fenêtre et choisir le bon identifiant basé sur ceux:

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
15
Michael Mrozek

Spécifique à xfce il y a pyxfce qui vous permettra de le faire en utilisant Python Langue. Pyxfce est une API qui, entre autres, vous permet de vous 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 de l'utilisation d'une API à base de X à l'aide de X ID de fenêtre (tels que Python-XLIB ou XDOTools mentionné dans une autre réponse) par rapport aux autres utilisables des titres de fenêtre correspondant à des chaînes (comme WMCTRL), est qu'il ne peut y avoir de Confusion entre Windows, qui peut avoir les mêmes mots-clés dans leur titre respectif.

4
Benjamin
#!/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-
3
Wilton lazary

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

0
Karel Adams