क्या Gnome में सक्रिय विंडो प्रक्रिया / शीर्षक को पुनः प्राप्त करना संभव है?


28

मुझे Gnome 2 डेस्कटॉप पर वर्तमान सक्रिय (केंद्रित) विंडो जानकारी प्राप्त करने के लिए एक समाधान की आवश्यकता है। मैं ज्यादातर उस विंडो और विंडो शीर्षक को चलाने की प्रक्रिया में दिलचस्पी रखता हूं।

क्या यह संभव है?

समाधान:

विंडो शीर्षक प्राप्त करना:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

प्रक्रिया का नाम प्राप्त करना:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

या:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

जवाबों:


17

आप xdotool , एक बहुमुखी X विंडो ऑटोमेशन टूल का उपयोग कर सकते हैं ।

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(मैं नहीं जानता कि केंद्रित और सक्रिय के बीच अंतर क्या है)

(मुझे लगा कि wmctrl ऐसा कर सकता है, लेकिन स्पष्ट रूप से नहीं।)


26

यह इस तरह सरल है:

xdotool getactivewindow getwindowname

सौभाग्य की आशा है कि यह आपके लिए काम करता है!


यह काम करता है, क्या कोई समझा सकता है कि इसे क्यों उखाड़ा गया?
lfzawacki

8

प्रक्रिया के नाम प्राप्त करने के लिए ओपी के समाधान (अर्थात बिना ps, grepऔर awk) की तुलना में सरल (IMO) :

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

या यदि आप पंक्ति का अंत चाहते हैं:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

हां, cat /proc/यह अच्छा है (और यकीनन तेजी से, क्योंकि इसमें पूरे psआउटपुट को पकड़ना शामिल नहीं है )। मैंने इसे प्रश्न बॉडी में समाधान के लिए जोड़ा, इसलिए भविष्य के उपयोगकर्ता इसे ढूंढ पाएंगे।
रोजेक

4

Xwininfo कमांड का प्रयास करें, http://www.xfree86.org/4.2.0/xwininfo.1.html , यह निश्चित रूप से विंडो शीर्षक लौटाता है और जहाँ तक प्रक्रिया चलती है, ठीक है ...

X ने इसे एक ID सौंपा है और विंडो का पैरेंट PID बन गया है और इसे डिफ़ॉल्ट रूप से छिपा भी देगा, इसलिए, यह मानते हुए कि Gnome ने NET_WM_PID का समर्थन किया है, क्योंकि 2001 से यह पैच इंगित करता है, http://mail.gnome.org अभिलेखागार / gtk-devel-list / 2001-October / msg00238.html , तो हम इस पोस्ट की समीक्षा कर सकते हैं, http://www.mail-archive.com/devel@xfree86.org/msg05809.html , जहां लेखक एक लेख लिखता है छोटा सी प्रोग्राम विंडो आईडी को पीआईडी, वॉयला में बदलने के लिए।


लेकिन ऐसा लगता है कि xwininfoमुझे आवश्यक विंडो को मैन्युअल रूप से चुनने की आवश्यकता है। मैं एक तरह से बैश से ध्यान केंद्रित खिड़की पाने की उम्मीद करता था।
रोजा

कुछ के रूप में, `xwininfo -root -children | grep -oEi 'विंडो आईडी: (? [0-9a-zA-Z] +) | grep -oEi '(? - 0-9a-zA-Z)' - संपादित करें: मेरी उंगली फिसल गई, विंडो आईडी के लिए मेरा regex खराब था। संदर्भ के लिए इस अन्य साइट की जाँच करें: davygoat.com/software/rizzle/How_it_works.html
rhoyerboat

यह कमांड केवल "रूट" विंडो आईडी देता है, और सक्रिय नहीं है :(
रोगाच

1

मुझे पता है कि प्रश्न पुराना है, लेकिन मुझे लगता xpropहै कि यहां भी उल्लेख किया जाना चाहिए। यह एक्स के तहत आसानी से उपलब्ध है। इसका उपयोग या तो इंटरैक्टिव तरीके से किया जा सकता है:

  1. टाइप करें xpropऔर उस विंडो को चुनें जिसे आप माउस कर्सर का उपयोग करना चाहते हैं, फिर
  2. WM_NAMEआपको विंडो का शीर्षक _NET_WM_PIDदेता है, पिड देता है

या आप सीधे बता सकते हैं कि आपको xpropकिस विंडो पर पास -idया -nameविकल्प की आवश्यकता है । का उपयोग करके awkआप सक्रिय विंडो आईडी प्राप्त कर सकते हैं और इसे वापस xpropउसी तरह से पास कर सकते हैं ( यहाँ से लिया गया है ):

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

अंत में, अपने पसंदीदा टूल ™ (जैसे grepया sed) का उपयोग करके आप आवश्यक मानों को प्राप्त कर सकते हैं। उदाहरण के लिए pidउपरोक्त कमांड के आउटपुट के लिए पाइप किया जा सकता है sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.