शेल में विंडो का आकार प्राप्त करें


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

विंडो प्रबंधक द्वारा प्रबंधित की जा रही खिड़कियों की सूची बनाएं। प्रत्येक विंडो के लिए एक लाइन आउटपुट है, लाइन अलग अंतरिक्ष स्तंभों में टूट गई है। पहले कॉलम में हमेशा हेक्साडेसिमल पूर्णांक के रूप में विंडो की पहचान होती है, और दूसरे कॉलम में हमेशा डेस्कटॉप नंबर (-1 एक स्टिकी विंडो की पहचान करने के लिए उपयोग किया जाता है) होता है। -P विकल्प निर्दिष्ट किया जाता है, तो अगले कॉलम में दशमलव पूर्णांक के रूप में विंडो के लिए पीआईडी ​​होगा। यदि -G विकल्प निर्दिष्ट किया जाता है, तो चार पूर्णांक कॉलम निम्नलिखित होंगे: x- ऑफसेट, y- ऑफसेट, चौड़ाई और ऊंचाई। अगले कॉलम में हमेशा क्लाइंट मशीन का नाम होता है। पंक्ति के शेष भाग में विंडो शीर्षक होता है (संभवतः शीर्षक में कई रिक्त स्थान के साथ)।


मैं उस का उपयोग करेंगे!
एलन

1
जिस तरह से आपके कंप्यूटर को bert :) कहा जाता है, उससे मैं बहुत प्यार करता हूँ
drnessie

5

मुझे लगता है कि सक्रिय विंडो आईडी को सीधे खोजने के लिए कोई विकल्प नहीं है । अगर किसी को पता है कि यह कैसे करना है, तो मुझे यह जानने में दिलचस्पी है कि .. यहां कहा गया है, यहां कुछ स्क्रिप्ट हैं जो सक्रिय विंडो के आकार को प्रिंट करती हैं।

यह है: 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 सवालों पर:


वह आम है, एक उदाहरण जोड़ें;)
एबी

एक साल बाद उन्हें जोड़ा गया;) लेकिन बाद में कभी भी बेहतर नहीं, है ना?
सर्गी कोलोडियाज़नी

0

शेल स्क्रिप्ट को खिड़कियों के बारे में पता नहीं है या परवाह नहीं है। सबसे अच्छा वे एक टर्मिनल में चलते हैं (जो एक खिड़की में प्रदर्शित हो सकता है या नहीं भी हो सकता है)। यदि आप वर्णों में टर्मिनल की चौड़ाई और ऊंचाई प्राप्त करना चाहते हैं, तो स्टाइट यूटिलिटी का उपयोग करें।


2
निश्चित रूप से एक शेल स्क्रिप्ट किसी भी तरह से एक्स ग्राहकों को उनके ज्यामिति के लिए क्वेरी कर सकती है? और कैसे X एप्स लिखे जाएंगे?
djikyb

@djeikyb वे एक्स क्लाइंट होने के लिए लिखे गए हैं और एक्स सर्वर के साथ संवाद करते हैं। शेल स्क्रिप्ट एक शेल में चलती है, जो एक ऐसे वातावरण में चल रही है या नहीं भी हो सकती है, जिसमें एक्स सर्वर भी हो, और एक्स की परवाह नहीं करनी चाहिए।
Psusi

2
समझ में आता है, हाँ। लेकिन वहाँ काम कर रहे हैं! रेक्टो के एक पैकेज wmctrl का उपयोग करके, आप कार्यक्षेत्र बदल सकते हैं, आकार बदल सकते हैं और बदल सकते हैं!
drnessie

@ Psusi के तर्क से, डेस्कटॉप वातावरण मौजूद नहीं होना चाहिए। आखिरकार, वे सिर्फ स्क्रिप्ट का एक विशाल संग्रह हैं जो एक्स
andyn

0

मैं tput colsकाफी अच्छी तरह से काम करने के लिए मिला !


2
आपके सहयोग के लिए धन्यवाद। मैं आपके उत्तर को बेहतर बनाने का सुझाव देता हूं: यह बताएं कि यह क्या करता है, लाइन की गिनती प्राप्त करने के लिए कमांड में संशोधन करें। हो सकता है कि शेल स्क्रिप्ट में परिणामों का उपयोग करने का तरीका दिखाएं। - उदाहरण के रूप में टॉप रेटेड जवाब देखें।
17

ओपी उल्लेख से संदर्भित wmctrl, हम कंसोल के बारे में बात नहीं कर रहे हैं, लेकिन ग्राफिकल पर्यावरण की खिड़कियां।
andyn

0

3 स्क्रीन मिला, यह आउटपुट 3 पंक्तियों के साथ है:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.