Câu trả lời:
Đ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 xdotool
sau 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
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
print pid
tô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ế?
name
.
get_full_property
và thực hiện .value[0]
( value
là một mảng )
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.
#!/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-
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.