उपलब्ध DBus सेवाओं की एक सूची


65

क्या उपलब्ध DBus सेवाओं की सूची जैसी कोई चीज है?
मैं कुछ पर ठोकर खाई है (जैसे NetworkManager, Rhythmbox, Skype, HAL द्वारा प्रदान की गई)।
मुझे आश्चर्य है कि अगर मैं प्रदान की गई सेवाओं / इंटरफेस की पूरी सूची प्राप्त कर सकता हूं।

जवाबों:


85

सत्र:

dbus-send --session           \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

सिस्टम:

dbus-send --system            \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

यदि आप GUI टूल पसंद करते हैं तो आप DFeet का उपयोग कर सकते हैं ।


1
@ डॉन- crissti कैसे सभी वस्तु-रास्तों को एक सेवा के तहत dbus-sendया साथ सूचीबद्ध करने के लिए gdbus?
खुर्शीद आलम

1
@ कुर्शीदअल्म - मैंने यहाँ एक उत्तर जोड़ा है
don_crissti

30

qdbusviewerतुम्हारा सबसे अच्छा दोस्त है; यह आपको डी-बस संदेश भेजने की अनुमति देता है:

तीन उप-पार्षदों के साथ सत्र बस टैब को दिखाने वाला qdbusviewer


2014 तक टूटा हुआ लगता है। यह सेवाओं को सूचीबद्ध करता है, लेकिन संदेश नहीं भेज सकता है
Pithikos

5
मैं इसे Ubuntu 14.04 पर भी शुरू नहीं कर सकता। इसके साथ विफल रहता है:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
कैस्पर

3
@Pikikos d-feetआज के रूप में काम करता है।
sherrellbc

@sherrellbc कृपया d-feetइसे और अधिक दृश्यमान बनाने के लिए एक उत्तर के रूप में जोड़ने पर विचार करें
mivk

27

अजगर रास्ता सुंदर तरीका है।

सिस्टम सेवाएं:

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

सत्र सेवाएँ:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)

Upvoted। मैंने आपके उत्तर के लिए एक अनुवर्ती प्रश्न पूछा। unix.stackexchange.com/questions/203410/…
user768421

मेरे पास एक सवाल है, प्लाज्मा 5 डेस्कटॉप वातावरण में, सेवा org.kde.Spectacle स्क्रीनशॉट लेने के लिए उपयोग किया जाता है (और यह काम कर रहा है), लेकिन यह न तो सिस्टम बस में सूचीबद्ध है और न ही सत्र बस, ऐसा क्यों है?
मेव

जो लोग देख रहे हैं उनकी मदद करने के लिए: कम से कम अजगर 2.7.13 और 3.6 के लिए, इसके लिए आवश्यक पैकेज dbus-python है , जिसके साथ इंस्टॉल करने योग्य है pip install dbus-python। अजगर-दब्बू पैकेज भी उपलब्ध है (मैं 2 मिनट मैंने कोशिश की थी) में काम करने में असमर्थ था।
5

6

gdbusglib2 का हिस्सा है और बैश पूर्णताओं का समर्थन करता है। यहाँ यह कैसे उपयोग करने के लिए है (Fedora पर):

bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>

यह सभी संभावित स्थलों को दिखाएगा। उपलब्ध इंटरफेस की एक सूची प्राप्त करने के लिए DBus org.freedesktop.DBus.ListNamesविधि का निर्यात करता है। आप इसे कॉल करके चला सकते हैं:

gdbus call --system --dest org.freedesktop.DBus \
           --object-path /org/freedesktop/DBus  \
           --method org.freedesktop.DBus.ListNames

दुर्भाग्य से यह अपठनीय उत्पादन की ओर जाता है। सौभाग्य से उत्पादन वैध अजगर है, इसलिए यह संभव है:

gdbus call --system --dest org.freedesktop.DBus      \
           --object-path /org/freedesktop/DBus       \
           --method org.freedesktop.DBus.ListNames | \
    python -c 'import sys, pprint; pprint.pprint(eval(sys.stdin.read()))'

मैं आमतौर पर ऐसा नहीं करता, लेकिन आस्तीन पर रखने के लिए एक अच्छी चाल है। मैं gdbusकोड पर जाने से पहले आत्मनिरीक्षण और अवधारणाओं को साबित करने के लिए उपयोग करता हूं । बैश पूरा होने से बहुत टाइपिंग बचती है और टाइपो से बचते हैं। अच्छा होता है करने के लिए gdbusएक अच्छे उत्पादन प्रदर्शित।

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