ฉันจะค้นหาตำแหน่ง (บนเดสก์ท็อป) ของหน้าต่างในบรรทัดคำสั่งได้อย่างไร


19

ฉันพยายามเขียนสคริปต์เล็กน้อยเพื่อช่วยจัดการหน้าต่างของฉันผ่านแป้นพิมพ์ลัด

ในการทำสิ่งที่ฉันต้องการฉันต้องสามารถค้นหาตำแหน่งและขนาดปัจจุบันของหน้าต่าง "แอ็คทีฟ" (เน้น) ตามตำแหน่งฉันหมายถึงพิกัด X, Y ของหน้าต่างบนเดสก์ท็อปและตามขนาดฉันหมายถึงความสูงและความกว้างของหน้าต่าง

มียูทิลิตีบรรทัดคำสั่งที่สามารถดึงข้อมูลนี้ได้หรือไม่?

คำตอบ:


22

คุณสามารถรับข้อมูลทั้งหมดสำหรับหน้าต่างที่ใช้งานอยู่ในปัจจุบันโดยใช้คำสั่งนี้:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

หรือ

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

เพียงแยกวิเคราะห์ผลลัพธ์สำหรับพิกัดที่คุณต้องการ นี่คือคำสั่งที่มีประโยชน์เมื่อโต้ตอบกับ windows:

  • xwininfoจะให้คุณสัมพัทธ์และเรขาคณิตแน่นอน
  • xpropจะบอกข้อมูลจำนวนมากรวมถึงหน้าต่างที่ใช้งานอยู่ แต่ไม่ใช่รูปทรงเรขาคณิต
  • xdpyinfoจะให้คุณได้รับ ID ของหน้าต่างที่ใช้งานอยู่ แต่ไม่มีข้อมูลเพิ่มเติม
  • wmctrlจะรับรายการข้อมูลเกี่ยวกับ windows และอนุญาตให้คุณเลือกหน้าต่างที่ใช้งานสำหรับการแก้ไข แต่ไม่ใช่ข้อมูล

ตัวอย่างเช่นการเปลี่ยนชื่อของหน้าต่างที่ใช้งานเป็น "ชื่อใหม่":

wmctrl -r :ACTIVE: -N "New Name"

หรือเพื่อเปลี่ยนตำแหน่งของหน้าต่างที่ใช้งานอยู่:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

พิจารณาwmctrlว่าคุณต้องการเปลี่ยนอะไรที่เรียบง่ายเช่นเรขาคณิตของหน้าต่างหรือไม่ พิจารณาใช้สคริปต์อื่น ๆ ที่กล่าวถึงข้างต้นเฉพาะในกรณีที่คุณต้องการทำสิ่งที่ซับซ้อนมากขึ้นเท่านั้น


1
ฉันแค่ต้องการที่จะทราบว่าฉันได้รับผลลัพธ์ที่แตกต่างกันเมื่อใช้คำสั่งที่สอง อันแรกทำงานตามที่ฉันคาดหวัง
TM

1
ฉันใช้ Arch แต่อาจช่วยคนที่นี่ในอนาคต คนที่หนึ่งไม่ได้ผลสำหรับฉันคนที่สองไม่ได้ให้ข้อมูลที่ถูกต้องอาจเป็นเพราะ WM แต่การรวมกันของทั้งสองทำงาน xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev

ขอบคุณ! แต่ฉันเห็นด้วยกับสองความคิดเห็นแรก คำสั่งที่สองxwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)แสดงหน้าต่างลูก (ไม่มีชื่อ) ของเทอร์มินัลของฉัน เมื่อฉันเพิ่งxdpyinfo | grep focusได้รับfocus: window 0x435b877, revert to Parentและ 0x435b877 เป็น id ของหน้าต่างที่ส่งคืนโดยคำสั่งแรก (ซึ่งใช้งานได้สำหรับฉัน) นี่คือ Trusty 14.04.1 LTS
nealmcb

8

ด้วย "xdotool" คุณสามารถโต้ตอบกับ windows โดยใช้แป้นพิมพ์หรือเหตุการณ์เมาส์ได้อย่างง่ายดาย

ตัวอย่างของการส่งCtrlCลำดับไปยังหน้าต่างที่ใช้งานอยู่:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

หากคุณต้องการตำแหน่งหน้าต่างจริงๆ:

eval $(xdotool getmouselocation --shell); echo $X $Y

สำหรับการดำเนินการเพิ่มเติม / ตัวเลือกการตรวจสอบหน้าคน


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