การตั้งค่าขนาดหน้าต่างของแอปพลิเคชันที่ทำงานอยู่


28

ฉันพยายามเริ่มต้นแอปพลิเคชันภายใน Ubuntu (xfce หรือ gnome) และผ่านทางบรรทัดคำสั่งและสงสัยว่ามีวิธีการทั่วไปในการกำหนดขนาดของหน้าต่างที่ระบุของแอพที่กำหนดที่กำลังทำงานอยู่หรือไม่

คำตอบ:


18

xdotoolนี้เป็นเรื่องง่ายที่จะทำอย่างไรถ้าคุณติดตั้งสิ่งที่ต้องการ จากนั้นคุณสามารถทำได้:

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

แทนที่ "ชื่อหน้าต่าง" ด้วยชื่อหรือ reg ex ปรากฏในชื่อหน้าต่าง (คุณยังสามารถค้นหาตามคลาสหน้าต่างและสิ่งอื่น ๆ ได้) และตัวเลขสองตัวที่ปรากฏหลังจาก windowsize คือความกว้างและความสูงตามลำดับ (นอกจากนี้คุณยังสามารถใช้เปอร์เซ็นต์เป็นต้น) ดูman xdotoolเมื่อติดตั้งแล้ว

หากคุณอยู่บน Lucid หรือก่อนหน้านี้ฉันขอแนะนำให้ไปที่เว็บไซต์ xdotoolเพื่อรับรุ่นที่ใหม่กว่า

ในการปรับขนาด Firefox ตัวอย่างเช่น:

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

3
มีวิธีการปรับขนาดหน้าต่างเต็มหน้าจอโดยไม่ต้องตกแต่ง (แถบชื่อเรื่อง)? และตั้งตำแหน่งที่แน่นอนบนหน้าจอ (เช่น x = 0, y = 0)? ฉันกำลังพยายามตั้งค่านี้สำหรับ mplayer ที่ขยายให้ใหญ่สุดเพื่อไปที่ 800x600 x = 0 y = 0 และหลังจากนั้นไม่กี่นาทีสู่โหมดเต็มหน้าจอเดียวกัน ขอบคุณ
เตอร์

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

ส่วนที่ยากคือการรับ ID หน้าต่าง ในรหัสข้างต้นจะได้ ID ของหน้าต่างที่ใช้งานอยู่ หากคุณต้องการ ID อื่นคุณสามารถใช้สิ่งนี้เพื่อรับชื่อและควบคุม PID ของแต่ละหน้าต่างและเลือก ID ที่ถูกต้องโดยยึดตามสิ่งเหล่านั้น:

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

Xlib มีให้ที่นี่: sourceforge.net/projects/python-xlib/?source=typ_redirect
khaverim

เมื่อไหร่ที่ฉันจะ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 จริง?
khaverim

nvm ไม่ได้ดูเหมือนจะเป็นไปได้ nameแต่ผมสามารถทำวิธีแก้ปัญหาผ่านทาง
khaverim

1
@khaverim อืม ฉันคิดว่า API นี้มีการเปลี่ยนแปลงตั้งแต่ฉันเขียนครั้งล่าสุดซึ่งเคยเป็น PID ฉันอัปเดตคำตอบคุณต้องการรับค่าที่ส่งคืนโดยget_full_propertyและทำ.value[0]( valueเป็นอาร์เรย์ )
Michael Mrozek

1
python Xlib สามารถติดตั้งผ่าน: sudo apt-get install python-xlib (บน Ubuntu)
Tom

4

โดยเฉพาะกับ XFCE มีpyxfceซึ่งจะอนุญาตให้คุณทำเช่นนั้นโดยใช้ภาษาไพธ อน Pyxfce เป็น API ที่ช่วยให้คุณสื่อสารกับโปรแกรมจัดการหน้าต่างได้ หากต้องการใช้สิ่งนี้จากบรรทัดคำสั่งคุณจะต้องเตรียมสคริปต์ก่อน

ความสำคัญของการใช้ API ที่ใช้ X ซึ่งใช้ X window ID (เช่น python-xlib หรือ xdotools ที่กล่าวถึงในคำตอบอื่น) กับผู้อื่นที่ใช้สตริงที่ตรงกับชื่อหน้าต่าง (เช่น wmctrl) ขึ้นอยู่กับการใช้งานของคุณ ความสับสนระหว่างหน้าต่างซึ่งอาจมีคำหลักเหมือนกันในชื่อของตน



0

ฉันพบว่า wmctrl เหมาะกับฉันที่สุด มันมีให้ในรูปแบบแพคเกจขนาดเล็กสำหรับ Ubuntu และ Raspbian และสำหรับ distros อื่น ๆ ด้วย


เรามีคำตอบที่กล่าวถึง wmctrlแต่เราไม่มีคำตอบที่แสดงวิธีใช้ คุณสามารถขยายคำตอบของคุณด้วยการสาธิตเพียงเพื่อให้ผู้คนสามารถนำไปปรับใช้กับการใช้งานเฉพาะของพวกเขา? ขอขอบคุณ!
Jeff Schaller

หากฉันมีตัวอย่างอยู่ในมือฉันได้เพิ่มมันไว้อย่างแน่นอน ถึงกระนั้นก็ไม่ได้เป็นสิ่งที่ manpages สำหรับ?
Karel Adams
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.