วิธีการตั้งค่าขนาดหน้าต่างและตำแหน่งของแอพพลิเคชั่นบนหน้าจอผ่านทางบรรทัดคำสั่ง?


33

ฉันต้องการให้เปิดหน้าต่าง Firefox ในขนาดเฉพาะและตำแหน่งบนหน้าจอโดยใช้คำสั่ง shell ตัวอย่างเช่น:

firefox myfile.html size 800x600 location bottom-left

มีคำสั่งดังกล่าวหรือไม่?


ฉันจัดการเพื่อทำเช่นนี้ (ด้วยความช่วยเหลือของฟอรั่มนี้) แม้ว่าคุณจะพบวิธีการแก้ปัญหาอื่น ๆ โปรดบอกฉันว่ามันอาจจะมีประสิทธิภาพมากขึ้น: unix.stackexchange.com/questions/40209/ …
Emanuel Berg

คำตอบ:


20

นี่เป็นรุ่นที่ชุมชนของคำตอบโดยYokaiที่รวมเอาตัวอย่างที่นำเสนอโดยรูดอล์ฟ Olah


คุณสามารถใช้เครื่องมือที่เรียกว่าxdotoolเพื่อควบคุมขนาดและตำแหน่งของหน้าต่าง ไม่เพียงเท่านั้นสคริปต์ใด ๆ ที่คุณเขียนbashใช้xdotoolสามารถตั้งค่าให้ทำงานกับหน้าต่างที่ขยายใหญ่สุดได้และสคริปต์สามารถตั้งค่าขนาดหน้าต่างและพิกัด x: y ได้ด้วยการจัดการmousemoveและclickคำสั่ง

  1. ค้นหา ID หน้าต่าง:

    xdotool search --onlyvisible --name firefox
  2. กำหนดขนาดหน้าต่าง

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. ย้ายหน้าต่าง

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

ตัวอย่างเช่นถ้า id หน้าต่างสำหรับ firefox เป็น 123 คุณจะทำสิ่งนี้:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

การวางตำแหน่งด้านล่างซ้ายจะต้องคิดออกตามความละเอียดหน้าจอของคุณ


1
มีข้อผิดพลาดกับxdotool, wmctrlฯลฯ .. และ Ubuntu, XFCE (ที่ฉันมี): ถ้าหน้าต่างได้เปิดตัวแล้วในโหมดเต็มหน้าจอคุณจะไม่สามารถย้ายได้อีกต่อไป: bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi

19

เท่าที่ฉันรู้สิ่งนี้เป็นไปไม่ได้เนื่องจาก Firefox ไม่ยอมรับคำสั่งในการควบคุมหน้าต่าง นั่นคือ (ส่วนใหญ่) ความรับผิดชอบของตัวจัดการหน้าต่างดังนั้นฉันสงสัยว่าจะมีพารามิเตอร์ที่จะทำเช่นนั้น อย่างไรก็ตามคุณสามารถควบคุมหน้าต่างด้วยwmctrlได้ แต่มันจะค่อนข้างยาก:

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

อาจมีวิธีที่ชาญฉลาดกว่านี้และมีปัญหาการทำงานร่วมกันบางอย่างกับ Firefox (เช่นไม่มีอินสแตนซ์อื่นที่กำลังทำงานอยู่) แต่มันควรจะทำให้คุณดำเนินต่อไป


1
ทราบเพียงเล็กน้อย การปรับขนาดจะไม่ทำงานหากหน้าต่างขยายใหญ่สุด ดังนั้นคุณต้องปิดการใช้งานคุณสมบัตินี้ก่อนด้วย: wmctrl -i -r $ WID -b ลบ, maximized_vert; wmctrl -i -r $ WID -b ลบ, maximized_horz; หลังจากนั้นฉันก็สามารถปรับขนาดหน้าต่าง Firefox
ka3ak

3

ในอดีตฉันได้สร้างเอกสาร HTML ที่จะกำหนดขนาดหน้าต่างด้วย Javascript แล้วเปลี่ยนเส้นทางไปยังหน้าที่ฉันต้องการ มันเป็นแฮ็คที่งี่เง่า แต่ก็ใช้งานได้


ดูเหมือนว่านี่จะไม่ทำงานอีกต่อไป เห็นได้ชัดว่า window.resizeTo มีผลเฉพาะถ้าหน้าต่างเป็นป๊อปอัพที่สร้างขึ้นผ่าน window.open
hugomg

2

ฉันไม่คิดว่ามันเป็นไปได้โดยคำสั่งเชลล์เท่านั้นเพราะมันไม่เกี่ยวข้องกับ windowmanager ของคุณ
ฉันได้ยินwmctrlและdevilspieซึ่งมีผลกับสิ่งนี้ แต่ฉันสงสัยว่ามีวิธีการที่จะทำให้ง่ายอย่างที่คุณเขียนไว้ในตัวอย่างของคุณ


1

ฉันทำสิ่งนี้ตลอดเวลา ฉันใช้ DevilsPie2 เพราะมันแข็งแกร่งกว่า ใช้ภาษาสคริปต์ของ LUA ซึ่งไม่ยากมาก

นี่คือสคริปต์ lua ของฉันสำหรับธันเดอร์เบิร์ดซึ่งฉันต้องการเปิดบนหน้าจอด้านซ้ายสุด (หน้าจอแล็ปท็อป) เมื่อเปิดขึ้น:

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

ในการตั้งค่านี้คุณจะสร้างไดเรกทอรีในการกำหนดค่าโฮมของคุณ (บน Ubuntu - เหมือนดิสทริบิวชัน) ชื่อ devilspie2 เช่น /home/$USERNAME/.config/devilspie2

สำหรับธันเดอร์เบิร์ดฉันสร้าง thunderbird.lua แม้ว่าชื่อไฟล์จะไม่สำคัญ ฉันมีชื่อไฟล์ที่แตกต่างกันสำหรับแต่ละแอปพลิเคชัน แต่คุณสามารถใส่ทุกอย่างไว้ในไฟล์สคริปต์ไฟล์เดียวหากคุณต้องการ ตั้งค่า devilspie2 ให้เริ่มโดยอัตโนมัติเมื่อคุณเข้าสู่ระบบเช่น /home/$USERNAME/.config/autostart/devilspie2.desktop

นี่คือลิงค์ไปยังหน้าดี ๆ เกี่ยวกับตัวเลือกต่างๆที่มีให้กับสคริปต์ lua ของคุณ: https://github.com/gusnan/devilspie2/blob/master/README

One note: สคริปต์ไม่จำเป็นต้องถูกเรียกใช้งาน ฉันเป็น 664 และทำงานได้ดี โปรแกรมอื่น ๆ ที่ฉันควบคุมบางตัว ได้แก่ openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload, & yad ฉันใช้ pin_window กับมันเพื่อให้ปรากฏบนเดสก์ท็อปทั้งหมดรวมถึงคำสั่งอื่น ๆ ขึ้นอยู่กับแอปพลิเคชัน


ดูเหมือนจะไม่ทำงานกับ LXDE ไม่มีการรับรู้เหตุการณ์หน้าต่างอย่างแน่นอน (ไม่มีการพิมพ์สิ่งใดเมื่อทำงานdevilspie2 --debug)
John Smith ทางเลือก

0

สิ่งนี้ไม่ได้ช่วยแก้ปัญหาตำแหน่ง แต่อย่างน้อยคุณก็สามารถกำหนดขนาดได้:

firefox -width 200 -height 500
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.