Встановлення розмірів вікна запущеної програми


28

Я намагаюся запустити програму в Ubuntu (xfce або gnome) і за допомогою командного рядка, і мені було цікаво, чи є загальний спосіб встановити розміри заданого вікна даного додатка, яке зараз працює?

Відповіді:


18

Це простіше зробити, якщо встановити щось подібне xdotool. Тоді ви можете зробити:

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

замініть "ім'я вікна" на ім'я або регістр, що відображається у заголовку вікна (ви також можете шукати за класом вікна та різними іншими речами), а два числа, що з'являються після розміру вікна, - це відповідно ширина та висота. (Ви також можете використовувати відсотки тощо). Дивіться, man xdotoolяк тільки це встановлено.

Якщо ви перебуваєте на Lucid чи раніше, рекомендую перейти на веб-сайт xdotool, щоб отримати нову версію.

Наприклад, щоб змінити розмір Firefox, наприклад:

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

3
чи є спосіб змінити розмір вікна на повноекранному екрані без прикрас (заголовок)? І встановити точне положення на екрані (наприклад, x = 0, y = 0)? Я намагаюся встановити це для максимального гравця, щоб він перейшов до 800x600 x = 0 y = 0, а потім через кілька хвилин у той же режим повноекранного режиму. спасибі
peter

15

Якщо менеджер вікон підтримує Xlib. При цьому Python використовує для встановлення розміру вікна 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()

Важкою частиною є отримання ідентифікатора вікна; у наведеному вище коді він отримав ідентифікатор активного вікна. Якщо ви хочете інший ідентифікатор, ви можете використовувати щось подібне, щоб отримати назву та керувати PID кожного вікна, і вибрати правильний ідентифікатор виходячи з таких:

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


коли я print pidотримую <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... будь-яку пропозицію ізолювати фактичний PID?
хаверім

Нвм. Це не здається можливим, але я можу зробити це шляхом вирішення проблеми name.
хаверім

1
@khaverim Хм. Я думаю, що цей API змінився з моменту останнього його написання, який раніше був просто PID. Я оновив відповідь, ви хочете взяти значення, повернене get_full_propertyі зробити .value[0]( valueце масив )
Michael Mrozek

1
python Xlib можна встановити через: sudo apt-get install python-xlib (на Ubuntu)
Том

4

Характерною для XFCE є pyxfce, яка дозволить вам робити це за допомогою мови python . Pyxfce - це API, який, крім усього іншого, дозволяє спілкуватися з менеджером вікон . Щоб використовувати це з командного рядка, потрібно спочатку підготувати сценарій.

Залежно від вашого використання, важливість використання API на основі X з використанням ідентифікаторів X вікон (наприклад, python-xlib або xdotools, згаданих в іншій відповіді) проти інших, які використовують рядки, що відповідають заголовкам вікон (наприклад, wmctrl), полягає в тому, що не може бути плутанина між вікнами, які можуть мати однакові ключові слова у відповідному заголовку.



0

Я знайшов, що wmctrl мені найбільше підходить. Він доступний як невеликий пакет для Ubuntu і для Raspbian, і, ймовірно, і для інших дистрибутивів.


У нас є відповідь, що згадує wmctrl , але у нас немає відповіді, яка показує, як ним користуватися; Чи можете ви розширити свою відповідь демонстрацією, просто щоб люди могли потім прийняти її та адаптувати її для свого конкретного використання? Дякую!
Джефф Шаллер

Якби у мене був приклад, я, безумовно, додав його. Але хіба це не те, для чого потрібні вправи?
Карел Адамс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.