Impostazione delle dimensioni della finestra di un'applicazione in esecuzione


28

Sto cercando di avviare un'applicazione all'interno di Ubuntu (xfce o gnome) e tramite la riga di comando e mi chiedevo se esiste un modo generico per impostare le dimensioni di una determinata finestra di una determinata app che è attualmente in esecuzione?

Risposte:


18

Questo è più facile da fare se si installa qualcosa di simile xdotool. Quindi puoi fare:

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

sostituisci "nome finestra" con un nome o registro che appare nel titolo della finestra (puoi anche cercare per classe di finestra e una varietà di altre cose), e i due numeri che appaiono dopo la dimensione della finestra sono rispettivamente la larghezza e l'altezza. (È anche possibile utilizzare le percentuali, ecc.) Vedere man xdotooluna volta installato.

Se sei su Lucid o prima, ti consiglio di visitare il sito Web xdotool per ottenere una versione più recente.

Per ridimensionare Firefox, ad esempio:

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

3
c'è un modo per ridimensionare la finestra a schermo intero senza decorazioni (barra del titolo)? E impostare la posizione esatta sullo schermo (ad es. X = 0, y = 0)? Sto cercando di impostare questo per mplayer massimizzato per passare a 800x600 x = 0 y = 0 e quindi dopo pochi minuti alla stessa modalità a schermo intero. grazie
Pietro,

15

Se il gestore di finestre supporta Xlib c'è. Questo utilizza Python per impostare le dimensioni della finestra su 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 parte difficile è ottenere l'ID della finestra; nel codice sopra ha ottenuto l'ID della finestra attiva. Se vuoi un altro ID, puoi usare qualcosa del genere per ottenere il titolo e controllare il PID di ogni finestra e scegliere l'ID giusto in base a quelli:

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


quando print pidricevo <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... qualche suggerimento per isolare il PID effettivo?
Khaverim,

NVM. Non sembra possibile ma posso fare una soluzione tramite name.
Khaverim

1
@khaverim Hmm. Penso che questa API sia cambiata dall'ultima volta che l'ho scritta, che era solo il PID. Ho aggiornato la risposta, vuoi prendere il valore restituito get_full_propertye fare .value[0]( valueè un array )
Michael Mrozek

1
python Xlib può essere installato tramite: sudo apt-get install python-xlib (su Ubuntu)
Tom

4

Specifico per XFCE c'è pyxfce che ti permetterà di farlo usando il linguaggio python . Pyxfce è un'API che, tra le altre cose, ti consente di comunicare con il gestore delle finestre . Per utilizzarlo dalla riga di comando, è necessario preparare prima uno script.

A seconda dell'utilizzo, l'importanza di utilizzare un'API basata su X utilizzando gli ID finestra X (come python-xlib o xdotools menzionati in un'altra risposta) rispetto ad altri che usano stringhe che corrispondono ai titoli delle finestre (come wmctrl), è che non possono esserci confusione tra windows, che può avere le stesse parole chiave nel rispettivo titolo.


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-

0

Ho trovato wmctrl adatto a me. È disponibile come pacchetto smallish, per Ubuntu e per Raspbian, e probabilmente anche per altre distro.


Abbiamo una risposta che menziona wmctrl , ma non abbiamo una risposta che mostri come usarla; potresti espandere la tua risposta con una dimostrazione, solo così le persone possono prenderla e adattarla per il loro uso particolare? Grazie!
Jeff Schaller

Se avessi avuto un esempio a portata di mano, l'avevo sicuramente aggiunto. Tuttavia, non è questo a cosa servono le manpage?
Karel Adams,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.