#x11 #dbus #pygobject #gobject #gdbus
#x11 #dbus #pygobject #gobject #gdbus
Вопрос:
Моя система — 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
С другой машины с окружением рабочего стола все работает нормально. Я искал, но не смог найти способ использовать dbus в этой ситуации. Кто-нибудь может помочь?
Ответ №1:
Если ваша служба уже не запущена, когда вы вызываете этот метод из клиента, вам нужно будет включить активацию службы для нее, что включает в себя запись org.mybus.demo.test.service
файла и помещение его в /usr/share/dbus-1/services
. Смотрите спецификацию. Вероятно, это выглядело бы примерно так:
[D-BUS Service]
Name=org.mybus.demo.test
Exec=/path/to/your/application.py