वर्तमान में सक्रिय विंडो का पता लगाना


52

लिनक्स कमांडलाइन टूल wmctrlआपको अन्य चीजों के अलावा सभी विंडो, या सभी डेस्कटॉप को सूचीबद्ध करने की अनुमति देता है। डेस्कटॉप-लिस्टिंग मोड में, वर्तमान डेस्कटॉप को तारांकन चिह्न के साथ चिह्नित किया गया है।

मुझे एक उपकरण की आवश्यकता है जो वर्तमान में सक्रिय विंडो के शीर्षक का पता लगा सके। दुर्भाग्य से, wmctrlऐसा करने वाला सहायक नहीं है - यह जानने के बावजूद कि वर्तमान में कौन सी विंडो सक्रिय है ( :ACTIVE:मार्कर देखें )।

क्या एक और कमांडलाइन टूल है जो मुझे वर्तमान विंडो की विंडो आईडी और / या विंडो शीर्षक दे सकता है?

जवाबों:


56

इंस्टॉल करें xdotool, फिर चलाएं

xdotool getwindowfocus getwindowname

यह फ़ायरफ़ॉक्स में खोले गए वर्तमान वेबपेज के लिए उदाहरण देगा:

linux - Detecting currently active window - Super User - Mozilla Firefox

शक्तिशाली उपकरण! वर्तमान सक्रिय विंडो प्राप्त करने के अलावा, इसमें बहुत सी अन्य उपयोगी फ़ंक्शंस भी हैं।
Searene

जिम पेरिस के जवाब की तुलना में, इसे स्थापित करने के लिए एक निर्भरता का नुकसान है, लेकिन यह तेजी से चलाने के लिए लगता है, खासकर अगर xdotool पहले से ही डिस्क कैश में है।
mc0e

1
यदि आप वर्तमान विंडो के साथ छेड़छाड़ करना चाहते हैं wmctrl, तो आप कर सकते हैं: wmctrl -i -r `xdotool getwindowfocus` -e 0,10,10,-1,-1जहां -iwmctrl को विंडो शीर्षक के बजाय विंडो आईडी की अपेक्षा करना है।
fiedl

34

यह अधिक प्रत्यक्ष है और केवल उपयोग करता है xpropऔर cut:

xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME

ये कमांड रूट विंडो और एप्लिकेशन विंडो से गुणों का एक निष्कर्षण हैं, लेकिन लोरेंजो वॉन मैटरहॉर्न के अनुरोध के अनुसार:

  • प्रथम,

    xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
    

    _NET_ACTIVE_WINDOWसंपत्ति को जड़ से निकालता है , जो आपको सक्रिय विंडो का एक्सआईडी देता है। 32x '\t$0'बताता है xpropएक तरीका है कि में उत्पादन फ़ॉर्मेट करने के लिए cutबाद में आसानी से पार्स कर सकते हैं।

  • फिर, आउटपुट से सिर्फ XID निकालें cut -f 2

  • फिर, XID को एक पैरामीटर के रूप में पास करें

    xprop -id XID _NET_WM_NAME
    

जो उस विंडो का नाम प्रिंट करता है।


1
नमस्ते वहाँ, आप तर्क और वाक्यविन्यास का एक सा समझा सकते हैं? यह क्यूए और भविष्य के पाठकों के लिए मददगार हो सकता है।
लोरेंजो वॉन मैटरहॉर्न

9

कोई जवाब या समाधान नहीं है।

$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
    awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')

नतीजा:

0x03800004  0 16459  xxxxxxxxxx /bin/bash

उपयोग में:

$ for x in $(seq 1 10); do sleep 5; wmctrl -lp | grep $(xprop -root | \
    grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | \
    sed 's/^0x/0x0/'); done

0x03800004  0 16459  xxxxxxxxxx /bin/bash
0x020000a4  0 13524  xxxxxxxxxx linux - Detecting currently active window - Super User - Mozilla Firefox (Build 20120129142219)

1
यह एक अच्छा समाधान की तरह दिखता है, xprop उपयोगिता के बारे में नहीं जानता था। इस बीच, मैंने इस तरह का विकल्प प्रदान करने के लिए wmctrl को पैच कर दिया है और इसे लेखक को भेज दिया है। दुर्भाग्य से, मुझे अभी तक कोई प्रतिक्रिया नहीं मिली।
डेव वोग्ट

1
प्रभावशीलता के लिए +1 और कोड पर "सरलता"
लोरेंजो वॉन मैटरहॉर्न

5

इसी से मेरा काम बना है:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME

देता है:

WM_NAME(STRING) = "~"

तो हो सकता है कि आप नाम से सभी को पाने के लिए थोड़ी सी छेड़खानी करें:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*/\1/'

देता है:

~

जो कि मेरा वर्तमान में सभी के लिए विंडो नाम है।

या, थोड़ा कम बदसूरत के साथ सेड से बचें:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'


1
या जब से कट लार्वा पेश किया गया है, आप फिर से उपयोग कर सकते हैं:xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | cut -d '"' -f 2
mc0e

3

अपेक्षाकृत कम, और सही ढंग से उद्धरण वाले विंडो नामों को संभालता है:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | 
sed -nr 's/.*= "(.*)"$/\1/p'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.