รายการบริการ 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

คุณยังสามารถใช้DFeetหากคุณต้องการเครื่องมือ GUI


1
@ don-crissti วิธีการในการแสดงรายการเส้นทางวัตถุทั้งหมดภายใต้บริการด้วยdbus-sendหรือgdbus?
Khurshid Alam

1
@KhurshidAlam - ฉันได้เพิ่มคำตอบที่นี่
don_crissti

30

qdbusviewerเป็นเพื่อนที่ดีที่สุดของคุณ มันช่วยให้คุณสามารถส่งข้อความ D-bus ได้เช่นกัน:

qdbusviewer แสดงแท็บ Bus Bus พร้อมสามพาเนลย่อย


ดูเหมือนว่าเสียเป็นของ 2014 จะแสดงบริการ แต่ไม่สามารถส่งข้อความ ..
Pithikos

5
ฉันไม่สามารถเริ่มบน Ubuntu 14.04 ได้ มันล้มเหลวด้วย:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd

3
@Pithikos 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ใช้สำหรับการจับภาพหน้าจอ (และใช้งานได้) แต่มันไม่ได้อยู่ในรายการในบัสระบบหรือบัสเซสชันทำไมจึงเป็นเช่นนั้น
Meow

เพื่อช่วยผู้ที่อาจมองหา: อย่างน้อย python 2.7.13 และ 3.6, แพ็คเกจที่จำเป็นสำหรับสิ่งนี้คือdbus-python , สามารถติดตั้งpip install dbus-pythonได้ แพคเกจหลาม -dbus ยังมีอยู่ (ฉันไม่สามารถทำงานได้ใน 2 นาทีที่ฉันพยายาม)
bschlueter

6

gdbusเป็นส่วนหนึ่งของ glib2 และสนับสนุนการทำ Bash ให้สำเร็จ นี่คือวิธีการใช้งาน (บน 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แสดงผลลัพธ์ที่ดีกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.