ฉันต้องการรับขนาดของหน้าต่างปัจจุบันจากเชลล์สคริปต์ ...
จริง ๆ ไม่มากที่จะพูดว่า ... ฉันอยากจะใช้ wmctrl
ฉันต้องการรับขนาดของหน้าต่างปัจจุบันจากเชลล์สคริปต์ ...
จริง ๆ ไม่มากที่จะพูดว่า ... ฉันอยากจะใช้ wmctrl
คำตอบ:
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 คอลัมน์ถัดไปจะมีชื่อเครื่องไคลเอนต์เสมอ ส่วนที่เหลือของบรรทัดมีชื่อหน้าต่าง (อาจมีหลายช่องว่างในชื่อ)
ฉัน 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"
ใช้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 เหล่านี้:
เชลล์สคริปต์ไม่ทราบหรือสนใจ windows อย่างดีที่สุดพวกเขาทำงานใน terminal (ซึ่งอาจหรืออาจจะไม่ปรากฏในหน้าต่าง) หากคุณต้องการได้ความกว้างและความสูงของเทอร์มินัลเป็นตัวอักษรให้ใช้ยูทิลิตี้ stty
ฉันพบว่าtput cols
ทำงานได้ดีมาก!
wmctrl
เราไม่ได้พูดถึงคอนโซล แต่เป็นหน้าต่างสภาวะแวดล้อมแบบกราฟิก
มี 3 หน้าจอผลลัพธ์นี้ 3 บรรทัดพร้อมขนาด:
xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/