Đặt kích thước cửa sổ của ứng dụng đang chạy


28

Tôi đang cố gắng khởi động một ứng dụng trong Ubuntu (xfce hoặc gnome) và thông qua dòng lệnh và tự hỏi liệu có cách nào chung để đặt kích thước của một cửa sổ nhất định của một ứng dụng cụ thể hiện đang chạy không?

Câu trả lời:


18

Điều này dễ dàng hơn để làm nếu bạn cài đặt một cái gì đó như xdotool. Sau đó, bạn có thể làm:

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

thay thế "tên cửa sổ" bằng một tên hoặc reg ex xuất hiện trong tiêu đề cửa sổ (bạn cũng có thể tìm kiếm theo lớp cửa sổ và nhiều thứ khác), và hai số xuất hiện sau windowsize lần lượt là chiều rộng và chiều cao. (Bạn cũng có thể sử dụng phần trăm, v.v.) Xem man xdotoolsau khi cài đặt.

Tuy nhiên, nếu bạn đang sử dụng Lucid hoặc sớm hơn, tôi khuyên bạn nên truy cập trang web xdotool để có phiên bản mới hơn.

Để thay đổi kích thước Firefox, ví dụ:

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

3
Có cách nào để thay đổi kích thước cửa sổ toàn màn hình mà không cần trang trí (thanh tiêu đề) không? Và đặt vị trí chính xác trên màn hình (ví dụ x = 0, y = 0)? Tôi đang cố gắng thiết lập điều này cho trình phát tối đa hóa thành 800x600 x = 0 y = 0 và sau vài phút để cùng chế độ toàn màn hình. cảm ơn
peter

15

Nếu trình quản lý cửa sổ hỗ trợ Xlib thì có. Điều này sử dụng Python để đặt kích thước của cửa sổ thành 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()

Phần khó là lấy ID cửa sổ; trong đoạn mã trên, nó có ID của cửa sổ đang hoạt động. Nếu bạn muốn có một ID khác, bạn có thể sử dụng một cái gì đó như thế này để lấy tiêu đề và kiểm soát PID của mỗi cửa sổ và chọn ID phù hợp dựa trên những cái đó:

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


Khi nào print pidtôi nhận được <Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>... bất kỳ đề nghị nào để cách ly PID thực tế?
khaverim

Nvm. Có vẻ như không thể nhưng tôi có thể giải quyết thông qua name.
khaverim

1
@khaverim Hmm. Tôi nghĩ API này đã thay đổi kể từ lần cuối tôi viết nó, nó từng là PID. Tôi đã cập nhật câu trả lời, bạn muốn lấy giá trị được trả về get_full_propertyvà thực hiện .value[0]( valuelà một mảng )
Michael Mrozek

1
python Xlib có thể được cài đặt qua: sudo apt-get install python-xlib (trên Ubuntu)
Tom

4

Cụ thể với XFCE có pyxfce sẽ cho phép bạn làm điều đó bằng ngôn ngữ python . Pyxfce là một API, trong số những thứ khác, cho phép bạn giao tiếp với trình quản lý cửa sổ . Để sử dụng điều này từ dòng lệnh sẽ yêu cầu bạn chuẩn bị một kịch bản trước.

Tùy thuộc vào việc sử dụng của bạn, tầm quan trọng của việc sử dụng API dựa trên X bằng ID cửa sổ X (chẳng hạn như python-xlib hoặc xdotools được đề cập trong câu trả lời khác) so với các sử dụng chuỗi phù hợp với tiêu đề cửa sổ (như wmctrl), là không thể có nhầm lẫn giữa các cửa sổ, có thể có cùng từ khóa trong tiêu đề tương ứng của chúng.


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

Tôi thấy wmctrl phù hợp với tôi nhất. Nó có sẵn như là một gói nhỏ, cho Ubuntu và cho Raspbian, và có khả năng cho các bản phát hành khác.


Chúng tôi có một câu trả lời đề cập đến wmctrl , nhưng chúng tôi không có Câu trả lời cho biết cách sử dụng nó; bạn có thể mở rộng câu trả lời của mình bằng một cuộc biểu tình, để mọi người sau đó có thể lấy nó và điều chỉnh nó cho mục đích sử dụng cụ thể của họ không? Cảm ơn bạn!
Jeff Schaller

Nếu tôi có một ví dụ trong tay, tôi chắc chắn đã thêm nó. Tuy nhiên, đó không phải là những gì trang dành cho?
Karel Adams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.