รับขนาดหน้าต่างในเปลือก


18

ฉันต้องการรับขนาดของหน้าต่างปัจจุบันจากเชลล์สคริปต์ ...

จริง ๆ ไม่มากที่จะพูดว่า ... ฉันอยากจะใช้ wmctrl

คำตอบ:


23
wmctrl -lG

จะให้สิ่งที่คุณชอบ:

oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330  170  bert N/A
0x01200023 -1 0    0    3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24   bert Bottom Expanded Edge Panel
0x01000028 -1 0    2352 1920 24   bert Bottom Expanded Edge Panel
0x0500003e  0 676  252  1404 1015 bert Chromium
0x02e00021  0 3860 160  1361 1084 bert Liferea
0x02000047  0 6650 940  506  683  bert Social broadcast messages
0x04600004  0 4546 460  1263 833  bert oli@bert: ~

ด้วยวิธีนี้คุณสามารถgrepและcutลงบนสิ่งเหล่านี้เพื่อให้คุณมีค่าทางเรขาคณิต (คอลัมน์ 3-6)

ในการอ้างอิงหน้าคนเพื่อให้คุณเข้าใจอย่างชัดเจนว่าคอลัมน์คืออะไร:

-l

แสดงรายการ windows ที่ถูกจัดการโดยตัวจัดการหน้าต่าง หนึ่งบรรทัดคือเอาต์พุตสำหรับแต่ละหน้าต่างโดยมีบรรทัดที่แบ่งเป็นคอลัมน์ที่คั่นด้วยช่องว่าง คอลัมน์แรกจะมีข้อมูลประจำตัวของหน้าต่างเป็นเลขฐานสิบหกเสมอและคอลัมน์ที่สองจะมีหมายเลขเดสก์ท็อปเสมอ (ใช้ -1 เพื่อระบุหน้าต่างที่เหนียว) หากระบุตัวเลือก -p คอลัมน์ถัดไปจะมี PID สำหรับหน้าต่างเป็นจำนวนเต็มฐานสิบ หากระบุตัวเลือก -G จะมีคอลัมน์จำนวนเต็มสี่คอลัมน์ดังนี้: x-offset, y-offset, width และ height คอลัมน์ถัดไปจะมีชื่อเครื่องไคลเอนต์เสมอ ส่วนที่เหลือของบรรทัดมีชื่อหน้าต่าง (อาจมีหลายช่องว่างในชื่อ)


ฉันจะใช้มัน!
อัลลัน

1
ฉันชอบวิธีที่คอมพิวเตอร์ของคุณเรียกว่า bert :)
drnessie

5

ฉัน belive wmctrl ไม่ได้มีตัวเลือกใด ๆ สำหรับการค้นหาที่ใช้งาน Id หน้าต่างโดยตรง
หากมีคนรู้วิธีที่จะทำฉันสนใจที่จะรู้ ..
ที่กล่าวว่านี่เป็นสคริปต์ที่พิมพ์ขนาดของหน้าต่างที่ใช้งานอยู่

นี่คือ: wmctrl + xdotool ... (ไม่ได้ใช้ sed)

id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done

นี่คือ: xwininfo + xdotool + sed

xwininfo เป็นส่วนหนึ่งของ x11-utils

set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
        -e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"

2

ใช้xpropหรือxwininfoหรือทั้งสองมาโดยค่าเริ่มต้นไม่จำเป็นต้องติดตั้ง

ตัวอย่างการใช้งาน:

ทั้งสองคำสั่งเปลี่ยนเคอร์เซอร์เป็นรูปสี่เหลี่ยมจัตุรัส / กากบาทเพื่ออนุญาตการเลือกหน้าต่างเฉพาะ

$ xprop _NET_WM_OPAQUE_REGION                                                          
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377


$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'                         
 984
 377

อีกทางเลือกหนึ่งสามารถระบุหน้าต่างบนบรรทัดคำสั่งในรูปแบบ XID

$ xprop _NET_WM_OPAQUE_REGION -id 83886090                                             
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377

$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'            
 984
 377

โพสต์อื่น ๆ ที่ใช้สิ่งเหล่านี้

โดยเฉพาะอย่างยิ่งxwininfoฉันถูกใช้งานอย่างแข็งขันสำหรับเศษดีบุกเช่นคำถาม AskUbuntu เหล่านี้:


เขาเป็นคนธรรมดาเพิ่มตัวอย่าง;)
AB

เพิ่มพวกเขาหลังจากปี;) แต่ดีกว่าไม่เคยใช่ไหม?
Sergiy Kolodyazhnyy

0

เชลล์สคริปต์ไม่ทราบหรือสนใจ windows อย่างดีที่สุดพวกเขาทำงานใน terminal (ซึ่งอาจหรืออาจจะไม่ปรากฏในหน้าต่าง) หากคุณต้องการได้ความกว้างและความสูงของเทอร์มินัลเป็นตัวอักษรให้ใช้ยูทิลิตี้ stty


2
แน่นอนเชลล์สคริปต์สามารถสอบถามลูกค้า X สำหรับรูปทรงเรขาคณิตของพวกเขา? มีวิธีการเขียนแอพ X อย่างไร?
djeikyb

@djeikyb พวกเขาเขียนขึ้นเพื่อเป็นลูกค้า X และสื่อสารกับเซิร์ฟเวอร์ X เชลล์สคริปต์ทำงานในเชลล์ซึ่งอาจหรืออาจจะไม่ทำงานในสภาพแวดล้อมที่มีเซิร์ฟเวอร์ X และไม่ควรสนใจเกี่ยวกับ X
psusi

2
เข้าใจแล้วใช่ แต่มีวิธีแก้ปัญหา! ด้วย wmctrl ซึ่งเป็นแพ็คเกจจาก repo คุณสามารถย้ายปรับขนาดย่อขนาดเล็กสุดและเปลี่ยนพื้นที่ทำงานได้!
drnessie

โดยตรรกะของ psusi @ ไม่ควรมีสภาพแวดล้อมเดสก์ท็อป
ท้ายที่สุด

0

ฉันพบว่าtput colsทำงานได้ดีมาก!


2
ขอขอบคุณสำหรับการสนับสนุนของคุณ. ฉันแนะนำให้ปรับปรุงคำตอบของคุณ: อธิบายว่ามันทำอะไรได้บ้างแก้ไขคำสั่งเพื่อรับจำนวนบรรทัดเช่นกัน อาจแสดงวิธีใช้ผลลัพธ์ในเชลล์สคริปต์ - ดูคำตอบที่ได้รับคะแนนสูงสุดเป็นตัวอย่าง
guntbert

จากการกล่าวถึง OP wmctrlเราไม่ได้พูดถึงคอนโซล แต่เป็นหน้าต่างสภาวะแวดล้อมแบบกราฟิก
andyn

0

มี 3 หน้าจอผลลัพธ์นี้ 3 บรรทัดพร้อมขนาด:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.