Ustawianie wymiarów okna działającej aplikacji


28

Próbuję uruchomić aplikację w systemie Ubuntu (xfce lub gnome) i za pomocą wiersza polecenia i zastanawiałem się, czy istnieje ogólny sposób ustawienia wymiarów danego okna danej aplikacji, która jest obecnie uruchomiona?

Odpowiedzi:


18

Łatwiej to zrobić, jeśli zainstalujesz coś takiego xdotool. Następnie możesz zrobić:

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

zamień „nazwa okna” na nazwę lub reg ex pojawiające się w tytule okna (możesz również wyszukiwać według klasy okna i różnych innych rzeczy), a dwie liczby pojawiające się po rozmiarze okna to odpowiednio szerokość i wysokość. (Możesz także użyć procentów itp.) Zobacz, man xdotoolkiedy zostanie zainstalowany.

Jeśli korzystasz z Lucid lub wcześniejszej wersji, zalecamy przejście na stronę xdotool, aby uzyskać nowszą wersję.

Aby zmienić rozmiar przeglądarki Firefox, na przykład:

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

3
czy jest jakiś sposób, aby zmienić rozmiar okna pełnoekranowego bez dekoracji (pasek tytułu)? I ustawić dokładną pozycję na ekranie (np. X = 0, y = 0)? Próbuję to ustawić dla zmaksymalizowanego mplayera, aby przejść do 800x600 x = 0 lat = 0, a następnie po kilku minutach do tego samego trybu pełnoekranowego. dzięki
Peter

15

Jeśli menedżer okien obsługuje Xlib, istnieje. To używa Pythona, aby ustawić rozmiar okna na 500 x 300:

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

Trudność polega na uzyskaniu identyfikatora okna; w powyższym kodzie otrzymał identyfikator aktywnego okna. Jeśli chcesz mieć inny identyfikator, możesz użyć czegoś takiego, aby uzyskać tytuł i kontrolować PID każdego okna, i wybrać odpowiedni identyfikator na podstawie tych:

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


kiedy print piddostanę <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... jakieś sugestie, aby wyodrębnić rzeczywisty PID?
khaverim

Nvm. Nie wydaje się to możliwe, ale mogę zrobić to za pomocą name.
khaverim

1
@khaverim Hmm. Myślę, że ten interfejs API zmienił się od czasu, gdy go ostatnio napisałem, który był po prostu PID. Zaktualizowałem odpowiedź, chcesz wziąć wartość zwróconą przez get_full_propertyi zrobić .value[0]( valueto tablica )
Michael Mrozek

1
Python Xlib można zainstalować poprzez: sudo apt-get install python-xlib (na Ubuntu)
Tom

4

Specyficzny dla XFCE jest pyxfce, który pozwoli ci to zrobić używając języka Python . Pyxfce to interfejs API, który między innymi umożliwia komunikację z menedżerem okien . Aby użyć tego z wiersza poleceń, najpierw musisz przygotować skrypt.

W zależności od zastosowania znaczenie używania interfejsu API opartego na X przy użyciu identyfikatorów X okien (takich jak Python-Xlib lub xdotools wspomnianych w innej odpowiedzi) w porównaniu z innymi, które używają ciągów pasujących do tytułów okien (takich jak wmctrl), polega na tym, że nie może być zamieszanie między oknami, które mogą mieć te same słowa kluczowe w odpowiednich tytułach.


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

Zauważyłem, że wmctrl najbardziej mi odpowiada. Jest dostępny jako niewielki pakiet dla Ubuntu i Raspbian, a także prawdopodobnie dla innych dystrybucji.


Mamy odpowiedź, która wspomina wmctrl , ale nie mamy odpowiedzi, która pokazuje, jak z niej korzystać; czy możesz rozszerzyć swoją odpowiedź o demonstrację, aby ludzie mogli wziąć ją i dostosować do określonego zastosowania? Dziękuję Ci!
Jeff Schaller

Gdybym miał pod ręką przykład, z pewnością go dodałem. Czy jednak nie po to są strony?
Karel Adams
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.