#dbus
#dbus
Вопрос:
Я пытаюсь автоматически запустить службу DBus при запуске моей клиентской программы. Я настроил служебный файл, но он не работает.
Имя моей службы
org.fandingo.PMP
Я регистрирую имя на сервере python с
name = dbus.service.BusName('org.fandingo.PMP', session_bus)
object = PMPService(session_bus, '/PMPService', PMPProxy())
Я могу подключиться к этому нормально, если вручную выполню код сервера со следующим от клиента
remote = bus.get_object('org.fandingo.PMP', '/PMPService')
Таким образом, сервер и клиент работают, если вызываются вручную. Если я просто попробую клиент, я получу следующее исключение Python
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.fandingo.PMP was not provided by any .service files
Вот мой служебный файл
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0 /usr/share/dbus-1/services/org.fandingo.PMP.service
Эти разрешения и метки SELinux идентичны другим служебным файлам.
Содержимое файла .service
[D-Bus Service]
Name=org.fandingo.PMP
Exec=/home/fandingo/code/python/pmp/src/pmpserver.py
User=fandingo
pmpserver.py является исполняемым и имеет правильный shebang.
Кто-нибудь видит какие-либо проблемы с моей конфигурацией?
Спасибо,
Ответ №1:
Наконец-то разобрался с этим.
Я не уверен точно, как выполняются файлы .service, но они не получают /bin/env, установленный должным образом.
Мой shebang не работал должным образом:
#!/usr/bin/env python
Я изменил свой служебный файл на
[D-Bus Service]
Name=org.fandingo.PMP
Exec=python /home/fandingo/code/python/pmp/src/pmpserver.py
Теперь все работает отлично.
Комментарии:
1. Более обычное расположение env находится в /usr/bin . По крайней мере, в Linux он есть.