मैंने wmctrlकमांड टॉगल का उपयोग करने की कोशिश की , लेकिन यह मेरे उबंटू सेट पर काम नहीं किया। टॉगल पर टॉगल होगा, लेकिन टॉगल नहीं। (मुझे लगता है कि यह हो सकता है क्योंकि मैं सूक्ति डेस्कटॉप वातावरण का उपयोग कर रहा हूं, जिस wmctrlपर थोड़ा टूटा हुआ AFAIK है)।
वैसे भी, बहुत सारे शोध और काम करने के बाद कैसे बैश में उचित कोड लिखने के लिए, मैंने एक ऐसा कमांड बनाया जो wmctrlतर्क की एक परत के भीतर आदेशों का उपयोग करके 'हमेशा शीर्ष पर' स्थिति को प्रभावी ढंग से वर्तमान गनोम डेस्कटॉप पर टॉगल करें। मैंने यह उत्तर आस्क यूनिक्स / लिनक्स पर पोस्ट किया है, लेकिन मुझे लगा कि मैं इसे यहां भी पोस्ट करूंगा क्योंकि किसी को भी यही मुद्दा था।
यहाँ आदेश है:
bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'
यह सक्रिय विंडो स्टेट प्रॉपर्टी "_NET_WM_STATE" का उपयोग करके जांच करता है xprops, और यदि इसमें "ABOVE" टेक्स्ट है, जिसका अर्थ है 'हमेशा शीर्ष पर' विकल्प सक्रिय है। फिर यह बस wmctrlपैरामीटर के साथ addया removeउपयुक्त के रूप में कमांड चलाता है।
कमांड ब्रेकडाउन (प्रत्येक कमांड को ■प्लेसहोल्डर की जगह अगले में डाला जाता है ):
सक्रिय विंडो आईडी प्राप्त करें:
xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"
xpropआईडी का उपयोग करने से खिड़की की स्थिति प्राप्त करें :
xprop -id $(■) _NET_WM_STATE
जांचें कि क्या राज्य में "ABOVE" है, यह दर्शाता है कि विंडो "हमेशा शीर्ष पर" सेट है
[[ $(■) =~ "ABOVE" ]]
यदि सही है तो "हटाएं" लौटें, अन्यथा "जोड़ें":
■ && echo "remove" || echo "add"
wmctrlपैरामीटर के रूप में दिए गए मान का उपयोग करके कमांड चलाएं :
wmctrl -r :ACTIVE: -b $(■),above
पूरी चीज़ भेजें bashताकि आप कमांड प्रतिस्थापन का उपयोग कर सकें ${ ... }, बूलियन मूल्यांकन [[ ... ]]और रेगेक्स मैच ऑपरेटर का उपयोग कर सकें =~:
bash -c '■'
विशेष रूप से यह आखिरी कदम मुझे यह पता लगाने में बहुत लंबा समय लगा। जब तक मुझे एहसास हुआ कि कीबोर्ड शॉर्टकट डिफ़ॉल्ट रूप से बैश में नहीं चल रहे थे, मुझे पता नहीं था कि कमांड कंसोल में क्यों काम कर रहे थे क्योंकि मैं उन्हें परीक्षण कर रहा था लेकिन कीबोर्ड शॉर्टकट के रूप में सीधे चलाने पर चुपचाप विफल हो रहा था। यह मुझे उम्र के लिए दीवार खींच दिया!
नोट: क्योंकि आपको उस कमांड के चारों ओर उद्धरणों की आवश्यकता है जिसे आप बैश करने के लिए भेज रहे हैं, मुझे कमांड लिखते समय सावधानी बरतनी थी कि मैं कभी भी एक से अधिक स्तर गहरे (दोहरे उद्धरण चिह्नों का उपयोग करके) नहीं गया। उद्धरणों में किसी भी आगे के घोंसले के शिकार को उद्धरण से बचने के लिए बहुत सारे भ्रमित बैकस्लैम की आवश्यकता होगी।