DBus का उपयोग कर स्क्रिप्ट प्रोसेसिंग सिस्टम इवेंट

Dbus एक इंटरप्रोसेस संचार उपकरण है। दूसरे शब्दों में, एक टूल जो एक प्रोग्राम को दूसरे प्रोग्राम को "ऑर्डर देने" की अनुमति देता है।

DBus का उपयोग करके कमांड लाइन से विभिन्न कार्यक्रमों को प्रबंधित करने के तरीके के बारे में नेट पर उदाहरण खोजना आसान है। लेकिन अन्य कार्यक्रमों से आने वाले संकेतों को ट्रैक करने के तरीके का विषय खराब रूप से बताया गया है। इस लेख में मैं इस अन्याय को ठीक करना चाहता हूं और सिस्टम से प्राप्त प्रसंस्करण घटनाओं के उदाहरण का विश्लेषण करना चाहता हूं।



Dbus के लिए प्रोग्रामिंग भाषाओं में बाइंडिंग के अलावा, कई कंसोल प्रोग्राम हैं जो आपको कमांड लाइन से इसका उपयोग करने की अनुमति देते हैं।



इसके अलावा, जब DBus के साथ काम करते हैं, तो qdbusviewer कार्यक्रम रुचि का है - एक ग्राफिकल एप्लिकेशन जो आपको सिस्टम में मौजूदा कार्यक्रमों का अध्ययन करने की अनुमति देता है जो DBus का समर्थन करते हैं।



और इसलिए, वादा किया गया उदाहरण।



कार्य: एक स्क्रिप्ट लिखें, जो इंटरनेट से कनेक्शन स्थापित करते समय, Yandex.Disk क्लाइंट को लॉन्च करेगा।

हम qdbusviewer शुरू करते हैं और देखते हैं कि कौन सी सेवा नेटवर्क स्थिति में बदलाव की सूचना दे सकती है। सिस्टम बस टैब पर, हम सेवा को देखते हैं। org.freedesktop.NetworkManager। यदि इस सेवा में हम रास्ते / org / freedesktop / NetworkManager के साथ जाते हैं, तो हमें एक ऑब्जेक्ट मिलता है जो इंटरफ़ेस org.freedesktop.NetworkManager को कार्यान्वित करता है। इस इंटरफ़ेस में एक स्टेटचेनड सिग्नल है। जांचें: सिग्नल पर राइट-क्लिक करें और कनेक्ट का चयन करें। हम डिस्कनेक्ट करते हैं, नेटवर्क इंटरफ़ेस कनेक्ट करते हैं, हम आने वाले संकेतों को नेटवर्क की स्थिति की रिपोर्ट करते हुए देखते हैं। हमें क्या चाहिए।

अब हम कमांड लाइन पर समान परिणाम प्राप्त करेंगे। हम dbus- मॉनीटर कमांड का उपयोग करेंगे। कमांड लाइन पर दर्ज करें:

dbus-monitor --system "sender=org.freedesktop.NetworkManager, path=/org/freedesktop/NetworkManager, member=StateChanged"
      
      





यहां विकल्प - सिस्टम सिस्टम बस को सुनने के लिए एक निर्देश है। उद्धरण चिह्न हमारे लिए ब्याज के संकेत के फिल्टर को दर्शाते हैं। सेवा org.freedesktop.NetworkManager, पथ / org / freedesktop / NetworkManager और StateChanged संकेत।

डिस्कनेक्ट करें, नेटवर्क इंटरफ़ेस कनेक्ट करें। नेटवर्क की स्थिति बदलने की प्रक्रिया में, कंसोल सभी नई लाइनें प्रदर्शित करता है:

 signal sender=org.freedesktop.DBus -> dest=:1.540 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.540" signal sender=:1.2 -> dest=(null destination) serial=1870 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 20 signal sender=:1.2 -> dest=(null destination) serial=1883 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 40 signal sender=:1.2 -> dest=(null destination) serial=1899 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 70
      
      





प्रत्येक प्राप्त संकेत के लिए, 2 लाइनें आउटपुट हैं। सिग्नल के विवरण के साथ पहला, तर्क मान के साथ दूसरा। वैसे, यदि सिग्नल में अधिक तर्क हैं, तो अधिक लाइनें होंगी।

प्रयोगात्मक रूप से निर्धारित, कनेक्ट किए गए नेटवर्क की स्थिति 70 के मान से मेल खाती है।

कड़ाई से बोलते हुए, आपको NM_STATE दस्तावेज़ में निरंतर मूल्यों को देखने की जरूरत है (लिंक के लिए धन्यवाद)



अब हमें प्राप्त संकेतों को संसाधित करने और यैंडेक्सडिस्क लॉन्च कमांड बनाने की आवश्यकता है। कमांड लाइन पर दर्ज करें:

 dbus-monitor --system "sender=org.freedesktop.NetworkManager, path=/org/freedesktop/NetworkManager, member=StateChanged" | sed -u -n 's/ uint32 70/yandex-disk start/p'
      
      





हमने पिछली कमांड लाइन जोड़ी थी | sed -u -n 's / uint32 70 / yandex-disk start / p'। यहां हम sed कार्यक्रम का उपयोग करके डबस-मॉनिटर से प्राप्त प्रत्येक पंक्ति को संसाधित करते हैं। -U विकल्प बफर को देरी किए बिना, तुरंत परिणाम का उत्पादन करने के लिए sed को बताता है। एक स्पष्ट आदेश होने तक -n विकल्प कुछ भी प्रदर्शित नहीं करता है। सिंगल कोट्स में, कमांड को सेड प्रोग्राम के लिए संकेत दिया गया है: वाक्यांश में "यैंडेक्स-डिस्क स्टार्ट" वाक्यांश के साथ "uint32 70" को बदलें और परिणाम प्रदर्शित करें। ऐसा आदेश पाठ को रूपांतरित करता है

 signal sender=org.freedesktop.DBus -> dest=:1.540 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.540" signal sender=:1.2 -> dest=(null destination) serial=1870 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 20 signal sender=:1.2 -> dest=(null destination) serial=1883 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 40 signal sender=:1.2 -> dest=(null destination) serial=1899 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 70 signal sender=:1.2 -> dest=(null destination) serial=1870 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 20 signal sender=:1.2 -> dest=(null destination) serial=1883 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 40 signal sender=:1.2 -> dest=(null destination) serial=1899 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=StateChanged uint32 70
      
      





में

 yandex-disk start yandex-disk start
      
      





यही है, नेटवर्क के प्रत्येक कनेक्शन पर, यैंडेक्स-डिस्क स्टार्ट कमांड उत्पन्न होता है।



अंत में, अंतिम संस्करण:

 dbus-monitor --system "sender=org.freedesktop.NetworkManager, path=/org/freedesktop/NetworkManager, member=StateChanged" | sed -u -n 's/ uint32 70/yandex-disk start/p' | sh
      
      





निष्पादन के लिए उत्पन्न Yandex.Disk कमांड भेजता है।



फ़ाइल करने के लिए सहेजें

 #!/bin/bash dbus-monitor --system "sender=org.freedesktop.NetworkManager, path=/org/freedesktop/NetworkManager, member=StateChanged" | sed -u -n 's/ uint32 70/yandex-disk start/p' | sh
      
      





हम फ़ाइल को निष्पादन योग्य बनाते हैं। और ऑटोरन में जोड़ें। अब, जब इंटरनेट से जुड़ा होगा, Yandex.Disk क्लाइंट अपने आप शुरू हो जाएगा।



इसी तरह, आप DBus का समर्थन करने वाले किसी भी एप्लिकेशन के संकेतों को संसाधित कर सकते हैं।



लेख ने DBus का उपयोग करके विभिन्न अनुप्रयोगों से संकेतों के प्रसंस्करण को स्वचालित करने की संभावना की जांच की। कंसोल में संकेतों की निगरानी के लिए, डबस-मॉनिटर प्रोग्राम का उपयोग किया जाता है। यह कार्यक्रम आपको सभी सेवाओं के सभी संकेतों के रूप में पकड़ने की अनुमति देता है, और केवल उन हितों को फ़िल्टर करता है जो हमारे लिए हैं।

कुछ उदाहरण:



डबस-मॉनिटर प्रत्येक प्राप्त सिग्नल के लिए कई लाइनें प्रदर्शित करता है। संकेत के पहले विवरण में, तर्कों के बाद के मूल्यों में।

अगला, हम प्राप्त संकेतों को संसाधित करते हैं जैसा कि हम कृपया।



All Articles