2010-11-24 15 views
10

क्या आप wmctrl के किसी भी विकल्प के बारे में जानते हैं? एक प्रोग्राम जो आपको कमांड लाइन से विंडोज़ और विंडो प्रबंधन में हेरफेर करने देता है।wmctrl के विकल्प क्या हैं?

wmctrl के साथ एक दोष यह है कि जब आप वर्तमान विंडो में हेरफेर कर सकते हैं, तो आप वर्तमान विंडो के बारे में जानकारी सूचीबद्ध करने के लिए wmctrl नहीं प्राप्त कर सकते हैं (यह अनदेखा करता है)।

उत्तर

9

आप वर्बोज़ मोड को चालू करके सक्रिय विंडो के आईडी नंबर outputting और एक अमान्य पैरामीटर के साथ सक्रिय विंडो स्थानांतरित करने के लिए यह बताने के लिए wmctrl चाल कर सकते हैं:

wmctrl -v -r :ACTIVE: -e dummy 

हालांकि यह एक साथ बाहर निकलें करता है

envir_utf8: 1 
Using window: 0x08400004 
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height" 

एक बार जब आप सक्रिय विंडो के आईडी नंबर है, तो आप सभी खिड़कियां सूची और उस आईडी नंबर के लिए खोज कर सकते हैं:: त्रुटि स्थिति है, यह भी सक्रिय विंडो के आईडी नंबर आउटपुट

wmctrl -l 

wmctrl के साथ सक्रिय विंडो के बारे में जानकारी प्राप्त करना अजीब है, लेकिन यह संभव है।

+0

धन्यवाद, अच्छी चाल! – joeytwiddle

+9

'wmctrl -a: सक्रिय: -v' भी काम करता है और आपको सार्थक निकास कोड देने का थोड़ा सा फायदा होता है। –

11

वर्तमान में सक्रिय विंडो के आईडी ढूंढने के लिए, का उपयोग करें:

xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}" 

इस आईडी का उपयोग करना, आप तो वर्तमान में सक्रिय विंडो के बारे में जानकारी का एक बहुत कुछ प्राप्त कर सकते हैं:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") 

वहां से , आप grep कर सकते हैं जो आपको चाहिए, या इसे वांछित फ़ील्ड दिखाएं जैसा मैंने उपरोक्त निकाला था। तो, वर्तमान में सक्रिय विंडो के पीआईडी ​​को खोजने के लिए, आप आदेश को -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID ऊपर संलग्न करेंगे, जिससे यह:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}" 

ध्यान दें कि wmctrl भी -i ध्वज के साथ संयोजन में आईडी उसी तरह स्वीकार करता है।

1

आरएच लिनक्स 5.5 और 5.6 64-बिट्स के तहत wmctrl संस्करण 1.07 के साथ मेरा अनुभव यह है कि wmctrl कई बार पूरी तरह से खो जाता है। उदाहरण के लिए, जब एक फ़ायरफ़ॉक्स खिड़की निम्नलिखित रिटर्न कुछ भी नहीं की तलाश:

% wmctrl -lpGx | grep -i 'Firefox' 

मेरे संदेह है कि wmcntl Firefox विंडो विंडो प्रबंधक की प्रकृति के कारण नहीं मिल रहा है, इस मामले में, मेटासिटी है। यह प्रबंधक विंडोज़ को प्रतिबिंबित करता है और शायद यह wmctrl फ़ायरफ़ॉक्स विंडो सूचीबद्ध नहीं करता है। 'xwininfo' फ़ायरफ़ॉक्स विंडो सूचीबद्ध करता है।

आप xdotool तक पहुंच नहीं है (मेरी संस्करण 2.20110530.1 है) तो आप की कोशिश कर सकते हैं:

% mywin=`xwininfo -root -tree | awk '/- Mozilla Firefox/ { printf $1; exit}'` 
% xdotool windowactivate --sync $mywin mousemove --window $mywin 0 0 

यह फ़ायरफ़ॉक्स सक्रिय बनाता है, यह अपने डेस्कटॉप पर ढेर में शीर्ष खिड़की बनाता है, और कहते हैं इसके ऊपर माउस (जैसा कि कभी-कभी किसी उपयोगकर्ता के पर्यावरण को क्लिक करने की आवश्यकता के बिना माउस के नीचे एक विंडो पर फ़ोकस करता है।) यदि आप नहीं चाहते हैं कि माउस बस को ऊपर से ऊपर 'mousemove --window $ mywin 0 0' हटा दें।

नोट: मुझे वही लिनक्स सिस्टम पर कॉन्करर विंडो खोजने के साथ एक ही समस्या थी।

+0

के साथ वर्तमान विंडो आईडी दे सकता है आपकी wmctrl समस्या यह हो सकती है: https://bugzilla.redhat.com/show_bug.cgi?id=426383 – JeffG

1

खिड़की आईडी

wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}" 
1

आप xdo जो कम से कम ressources के साथ एक सभ्य काम कर सकते हैं देख सकते हैं।

संबंधित मुद्दे