มีรายการดังกล่าวในรายการบริการ DBus ที่มีอยู่หรือไม่?
ฉันเคยเจอบางอย่าง (เช่นที่ได้รับจาก NetworkManager, Rhythmbox, Skype, HAL)
ฉันสงสัยว่าฉันสามารถหารายการบริการ / อินเตอร์เฟสที่จัดเตรียมไว้ค่อนข้างสมบูรณ์หรือไม่
มีรายการดังกล่าวในรายการบริการ DBus ที่มีอยู่หรือไม่?
ฉันเคยเจอบางอย่าง (เช่นที่ได้รับจาก NetworkManager, Rhythmbox, Skype, HAL)
ฉันสงสัยว่าฉันสามารถหารายการบริการ / อินเตอร์เฟสที่จัดเตรียมไว้ค่อนข้างสมบูรณ์หรือไม่
คำตอบ:
เซสชั่น:
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
qdbusviewer
เป็นเพื่อนที่ดีที่สุดของคุณ มันช่วยให้คุณสามารถส่งข้อความ D-bus ได้เช่นกัน:
qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
d-feet
ทำงานเหมือนปัจจุบัน
d-feet
เป็นคำตอบเพื่อให้มองเห็นได้ชัดเจนขึ้น
วิธีไพ ธ อนเป็นวิธีที่สวยงาม
บริการระบบ:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
บริการเซสชั่น:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
pip install dbus-python
ได้ แพคเกจหลาม -dbus ยังมีอยู่ (ฉันไม่สามารถทำงานได้ใน 2 นาทีที่ฉันพยายาม)
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
แสดงผลลัพธ์ที่ดีกว่า
dbus-send
หรือgdbus
?