จัดกึ่งกลางหน้าต่างผ่านบรรทัดคำสั่ง


19

มีวิธีใดที่จะวางหน้าต่างไว้ที่กึ่งกลางของหน้าจอหลังจากที่เปิดขึ้นหรือทำให้เปิดในกึ่งกลางของหน้าจอหรือไม่?

สิ่งนี้จะต้องทำโดยใช้บรรทัดคำสั่ง

คำตอบ:


33

wmctrlเครื่องมือให้การเข้าถึงบรรทัดคำสั่งไปเกือบทุกคุณสมบัติที่กำหนดไว้ใน EWMH (ขยายคำแนะนำ Window Manager)สเปค มันสามารถใช้สำหรับตัวอย่างเช่นจะได้รับข้อมูลเกี่ยวกับการจัดการหน้าต่างเพื่อให้ได้รายละเอียดของเดสก์ท็และหน้าต่างที่มีการจัดการที่จะเปลี่ยนและปรับขนาดเดสก์ท็เพื่อให้หน้าต่างแบบเต็มหน้าจอ ,เสมอข้างต้นหรือเหนียวและเพื่อเปิดใช้งาน ,ใกล้ ,ย้าย ,ปรับขนาด ,ขยายและลดพวกเขา

คุณสามารถติดตั้งได้โดย

sudo apt-get install wmctrl

คุณสามารถรับข้อมูลเกี่ยวกับเดสก์ทอปเสมือนของคุณ (พื้นที่ทำงาน) ด้วย wmctrl -d

one@onezero:~$ wmctrl -d
0  * DG: 2720x1536  VP: 0,0  WA: 0,24 1360x744  N/A

wmctrl -lและรายการหน้าต่างที่เปิดอยู่ด้วย -Gตัวเลือกที่แสดงให้เห็นว่าคุณเรขาคณิตของหน้าต่าง:

one@onezero:~$ wmctrl -l
0x02000004  0 onezero Desktop
0x02e00002  0     N/A DNDCollectionWindow
0x02e00003  0     N/A launcher
0x01e00004  0 onezero cairo-dock
0x02e00004  0     N/A panel
0x04800061  0 onezero Transmission
0x02e0000a  0     N/A Dash
0x03a00044  0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006  0 onezero one@onezero: ~
0x04c000e9  0 onezero Google - Mozilla Firefox

wmctrl -lG

one@onezero:~$ wmctrl -lG
0x02000004  0 0    0    1360 768  onezero Desktop
0x02e00002  0 -1460 -868 1360 768      N/A DNDCollectionWindow
0x02e00003  0 0    24   58   744      N/A launcher
0x01e00004  0 290  653  780  115  onezero cairo-dock
0x02e00004  0 0    0    1360 24       N/A panel
0x04800061  0 408  95   732  500  onezero Transmission
0x02e0000a  0 -1402 -844 1302 744      N/A Dash
0x03a00044  0 0    24   1360 744  onezero Center a window via command line - Ask Ubuntu - Stack Exchange - Chromium
0x04400006  0 127  94   983  434  onezero one@onezero: ~
0x04c000e9  0 5    47   1349 715  onezero Google - Mozilla Firefox

คุณสามารถระบุหน้าต่างโดยอ้างอิงชื่อเรื่องหรือชื่อบางส่วนหลังจาก -r -e สำหรับการเคลื่อนย้ายและการปรับขนาด

wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>

<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
     useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.

ดังนั้นหากต้องการย้ายหน้าต่างไปที่มุมซ้ายบนและทำให้มีความกว้าง 1,000 พิกเซลสูง 700 พิกเซลคุณจะใช้ 0,0,0,1000,700

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700

ป้อนคำอธิบายรูปภาพที่นี่

เพื่อย้าย / ปรับขนาด สำหรับสิ่งนั้นฉันใช้วิธีแก้ปัญหาของ“ unmaximizing” ก่อนโดยใช้-bตัวเลือก

wmctrl -r "Mozilla Firefox" -b เพิ่ม, maximized_vert, maximized_horz

wmctrl -r "Mozilla Firefox" -b ลบ, maximized_vert, maximized_horz

one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่คุณต้องเข้าใจก่อน

The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

ป้อนคำอธิบายรูปภาพที่นี่

นั่นคือความละเอียดหน้าจอของฉันดังนั้น x = 1360 & y = 786

จัดแนวหน้าต่างให้ชิดซ้ายครึ่งหนึ่งของหน้าจอ

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768

การจัดแนวหน้าต่างให้อยู่กึ่งขวาของหน้าจอ

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768

การจัดแนวหน้าต่างให้เป็นcenter of screen1360/4 = 340

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768

ป้อนคำอธิบายรูปภาพที่นี่

จัดการกับการตั้งค่าหน้าจอของคุณ

สำหรับความช่วยเหลือเพิ่มเติม1 2 3 4


7

ที่ทำงานกับหน้าต่างที่ใช้งานในปัจจุบัน

IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)

width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')

newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))

xdotool getactivewindow windowmove "$newPosX" "$newPosY"

สิ่งนี้ต้องการbashหรือzshเรียกใช้ธรรมดาshจะไม่ทำงาน
wingedsubmariner

ใช้งานได้👍ยกเว้นภายใต้ Unity สำหรับ windows ที่มีขนาดหน้าจอ 1/2 หรือ 1/4 (เช่นลากหน้าต่างไปทางด้านขวามันจะครอบครองครึ่งขวาของหน้าจอ) หน้าต่างเหล่านี้น่าจะเป็นพิเศษและผมไม่ทราบว่าxdotoolการดำเนินการเพื่อเรียกร้องให้ทำครั้งแรกพวกเขาหน้าต่าง "ปกติ" windowmoveก่อนที่จะเรียก ไอเดีย?
Ronan Jouchet

พบวิธีแก้ปัญหาของฉันในเธรด Ubuntuนี้ เกี่ยวข้องกับการโทรwmctrlด้วยโซลูชั่นที่ดีกว่ายินดีต้อนรับ TL; DR: โทรwmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horzก่อนการxdotool getactivewindow windowmoveโทรครั้งสุดท้าย
Ronan Jouchet

4

หากใครต้องการโค้ดขนาดเล็กในการคัดลอก / วางเพื่อทำเช่นนี้ได้:

winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh

แทนที่fooด้วยชื่อของหน้าต่างที่คุณต้องการให้อยู่กึ่งกลางบรรทัดแรกของหลักสูตร


คำอธิบาย (การแยกย่อยในรูปแบบของเซสชันคอนโซลตัวอย่าง):

รับขนาดหน้าจอ

llama@llama:~$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080

รับข้อมูลรูปทรงเรขาคณิตของหน้าต่าง

llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505  722  475  
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475

ย้ายหน้าต่าง

llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh                                    
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475

0

แอปพลิเคชันส่วนใหญ่ควรให้เกียรติพารามิเตอร์ --geometry เมื่อเริ่มต้น (บางอันต้องการ -geometry ลองครั้งที่สองหากอันแรกไม่เหมาะกับคุณ):

gnome-terminal --geometry 80x25+100+100

พารามิเตอร์เรขาคณิตมีรูปแบบนี้:

WIDTHxHEIGHT+XOFF+YOFF

คุณสามารถปล่อยส่วนที่ไม่จำเป็นออกได้:

gnome-terminal --geometry +20+50 #No size, just offsets

สำหรับรายละเอียดเพิ่มเติม:

man X

จากนั้นกดปุ่ม "/" แล้วค้นหาข้อมูลจำเพาะของ GEOMETRY

หรือดูที่นี่: http://www.cotse.com/dlf/man/xwindows/geometry.htm

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