Danh sách các dịch vụ DBus có sẵn


65

Có một thứ như danh sách các dịch vụ DBus có sẵn không?
Tôi đã tình cờ tìm thấy một vài (như những người được cung cấp bởi NetworkManager, Rhybeatbox, Skype, HAL).
Tôi tự hỏi nếu tôi có thể tìm thấy một danh sách khá đầy đủ các dịch vụ / giao diện được cung cấp.

Câu trả lời:


85

Phiên:

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

Hệ thống:

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

Bạn cũng có thể sử dụng DFeet nếu bạn thích một công cụ GUI.


1
@ don-crissti làm thế nào để liệt kê tất cả các đường dẫn đối tượng trong một dịch vụ với dbus-sendhoặc gdbus?
Khurshid Alam

1
@KhurshidAlam - Tôi đã thêm một câu trả lời ở đây .
don_crissti

30

qdbusviewerlà người bạn tốt nhất của bạn; nó cũng cho phép bạn gửi tin nhắn D-bus:

qdbusviewer hiển thị tab Phiên Bus với ba bảng con


Có vẻ bị hỏng kể từ năm 2014. Nó liệt kê các dịch vụ nhưng không thể gửi tin nhắn ..
Pithikos

5
Tôi thậm chí không thể khởi động nó trên Ubuntu 14.04. Nó thất bại với:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd

3
@Pithikos d-feethoạt động như ngày hôm nay.
sherrellbc

@sherrellbc Vui lòng xem xét thêm d-feetnhư một câu trả lời để làm cho nó rõ hơn
mivk

27

Cách trăn là cách đẹp.

Dịch vụ hệ thống:

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

Dịch vụ phiên:

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

Nâng cao. Tôi đã hỏi một câu hỏi tiếp theo cho câu trả lời của bạn. unix.stackexchange.com/questions/203410/ từ
user768421

Tôi có một câu hỏi, trong môi trường máy tính để bàn Plasma 5, dịch vụ org.kde.Spectacle được sử dụng để chụp ảnh màn hình (và nó hoạt động), nhưng nó không được liệt kê trong bus hệ thống cũng như bus phiên, tại sao vậy?
Meow

Để giúp những người có thể đang tìm kiếm: ít nhất là python 2.7.13 và 3.6, gói cần thiết cho việc này là dbus-python , có thể cài đặt được pip install dbus-python. Gói python-dbus cũng có sẵn (tôi không thể làm việc trong 2 phút tôi đã thử).
bschlueter

6

gdbuslà một phần của glib2 và hỗ trợ hoàn thành Bash. Đây là cách sử dụng nó (trên Fedora):

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

Điều này sẽ hiển thị tất cả các điểm đến có thể. Để có được danh sách các giao diện có sẵn, DBus xuất org.freedesktop.DBus.ListNamesphương thức. Bạn có thể gọi nó bằng cách chạy:

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

Thật không may, điều này dẫn đến đầu ra không thể đọc được. May mắn là đầu ra là python hợp lệ, vì vậy điều này là có thể:

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()))'

Tôi không thường làm điều này, nhưng là một mẹo hay để giữ tay áo. Tôi sử dụng gdbusđể hướng nội và chứng minh các khái niệm trước khi chuyển sang mã. Việc hoàn thành bash giúp tiết kiệm rất nhiều việc đánh máy và tránh lỗi chính tả. Sẽ được tốt đẹp để gdbushiển thị một đầu ra đẹp hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.