Как использовать dbus в CentOS без среды рабочего стола - PullRequest
0 голосов
/ 04 апреля 2019

Моя система - это centos без графического интерфейса. У меня есть серверное приложение, которое «слушает» вызов метода в сеансе dbus. Видимо работает нормально. У меня pydbus и python3-gobject установлены нормально, у меня также dbus-launch работает. Это серверное приложение:

from pydbus import SessionBus
from gi.repository import GLib
import time

# Variables / Constants / Instantiation...
bus = SessionBus()
BUS = "org.mybus.demo.test"
loop = GLib.MainLoop()
message_count = 0

class DBusService_XML():
    """
    DBus Service XML Definition.
    type = "i" for integer, "s" for string, "d" for double, "as" list of string data.
    """
    dbus = """
    <node>
        <interface name="{}">
            <method name='greeting'>
                <arg type="s" name="input" direction="in">
                </arg>
                <arg type="s" name="output" direction="out">
                </arg>
            </method>
        </interface>
    </node>
    """.format(BUS)

    def greeting(self, clientName):
        "Receive and send arg"
        print("{} is asking for name".format(clientName))
        return "Hello {}, Im Kyle".format(clientName)

if __name__ == "__main__":
    bus.publish(BUS, DBusService_XML())
    loop.run()

Теперь, чтобы вызвать этот серверный метод, из другого терминала (того же пользователя) я попытался использовать мое клиентское приложение, которое не удалось, затем я попытался gdbus приложение, которое вышло из строя с такой же ошибкой, как показано ниже:

# dbus-launch gdbus call --session --dest org.mybus.demo.test --object-path /org/mybus/demo/test --method org.mybus.demo.test.greeting "Julia"
Error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.mybus.demo.test was not provided by any .service files

С другой машины с Desktop Environment все работает отлично. Я искал вокруг, но не мог найти способ использовать dbus в этой ситуации. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 15 апреля 2019

Если ваша служба еще не запущена, когда вы вызываете этот метод из клиента, вам необходимо активировать для него активацию службы, которая включает в себя запись файла org.mybus.demo.test.service и помещение его в /usr/share/dbus-1/services.См. спецификацию .Вероятно, это будет выглядеть примерно так:

[D-BUS Service]
Name=org.mybus.demo.test
Exec=/path/to/your/application.py
...