Festlegen der Fensterabmessungen einer laufenden Anwendung

28

Ich versuche, eine Anwendung in Ubuntu (xfce oder gnome) und über die Befehlszeile zu starten, und habe mich gefragt, ob es eine generische Möglichkeit gibt, die Abmessungen eines bestimmten Fensters einer bestimmten App festzulegen, die gerade ausgeführt wird.

Jamie
quelle

Antworten:

18

Dies ist einfacher, wenn Sie so etwas installieren xdotool. Dann können Sie tun:

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

Ersetzen Sie "Fenstername" durch einen Namen oder ein Register, das im Fenstertitel erscheint (Sie können auch nach Fensterklasse und einer Vielzahl anderer Dinge suchen), und die beiden Zahlen, die nach der Fenstergröße erscheinen, sind die Breite bzw. Höhe. (Sie können auch Prozente usw. verwenden.) Nach man xdotoolder Installation anzeigen .

Wenn Sie auf Lucid oder früher sind, empfehle ich jedoch, auf der xdotool-Website eine neuere Version zu erhalten.

So ändern Sie die Größe von Firefox:

xdotool search --name "Mozilla Firefox" windowsize 1024 768
schäbig
quelle
3
Gibt es eine Möglichkeit, die Größe des Vollbildfensters ohne Dekorationen (Titelleiste) zu ändern? Und genaue Position auf dem Bildschirm einstellen (zB x = 0, y = 0)? Ich versuche, dies für den maximierten Player so einzustellen, dass er auf 800x600 x = 0 y = 0 und dann nach einigen Minuten auf denselben Vollbildmodus wechselt. Danke
Peter
15

Wenn der Fenstermanager Xlib unterstützt, gibt es. Dies verwendet Python, um die Fenstergröße auf 500x300 zu setzen:

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()

Der schwierige Teil ist das Abrufen der Fenster-ID. im obigen Code wurde die ID des aktiven Fensters ermittelt. Wenn Sie eine andere ID wünschen, können Sie so etwas verwenden, um den Titel und die Steuer-PID jedes Fensters abzurufen und die richtige ID basierend auf diesen zu wählen:

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
quelle
Wann print pidbekomme ich <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... einen Vorschlag, um die tatsächliche PID zu isolieren?
Khaverim
Nvm. Scheint nicht möglich zu sein, aber ich kann eine Problemumgehung über ausführen name.
Khaverim
1
@khaverim Hmm. Ich denke, diese API hat sich geändert, seit ich sie das letzte Mal geschrieben habe. Früher war das nur die PID. Ich habe die Antwort aktualisiert, Sie möchten den von zurückgegebenen Wert übernehmen get_full_propertyund tun .value[0]( valueist ein Array )
Michael Mrozek
1
python Xlib kann installiert werden über: sudo apt-get install python-xlib (unter Ubuntu)
Tom
4

Speziell für XFCE gibt es pyxfce, mit dem Sie dies in der Python- Sprache tun können . Pyxfce ist eine API, mit der Sie unter anderem mit dem Fenstermanager kommunizieren können . Um dies von der Befehlszeile aus zu verwenden, müssen Sie zuerst ein Skript vorbereiten.

Abhängig von Ihrer Verwendung besteht die Bedeutung der Verwendung einer X-basierten API unter Verwendung von X-Fenster-IDs (wie Python-Xlib oder Xdotools, die in einer anderen Antwort erwähnt wurden) im Vergleich zu anderen, die Zeichenfolgen verwenden, die mit Fenstertiteln übereinstimmen (wie wmctrl), darin, dass es keine geben kann Verwechslung zwischen Fenstern, die möglicherweise die gleichen Schlüsselwörter in ihrem jeweiligen Titel haben.

Benjamin
quelle
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
quelle
0

Ich fand wmctrl am besten für mich. Es ist als kleines Paket für Ubuntu und Raspbian und wahrscheinlich auch für andere Distributionen erhältlich.

Karel Adams
quelle
Wir haben eine Antwort, die wmctrl erwähnt , aber wir haben keine Antwort, die zeigt, wie man es benutzt. Könnten Sie Ihre Antwort mit einer Demonstration erweitern, damit die Leute sie dann nehmen und für ihren speziellen Gebrauch anpassen können? Vielen Dank!
Jeff Schaller
Hätte ich ein Beispiel zur Hand gehabt, hätte ich es sicherlich hinzugefügt. Ist das nicht das, wofür manpages sind?
Karel Adams