Файл DBus .service отсутствует

Я создаю собственный сервис dbus для своих нужд и хочу, чтобы он запускался автоматически, когда кому-то это нужно. Для этой цели я создал .service файл, подобный этому

[D-Bus Service]
Name=com.mycompany.servicename
Exec=/home/myuser/Workspace/service-start
User=myuser

Здесь я просто изменил фактическое имя службы и исполняемого файла, но это не главное. Я перепроверил настоящие имена - они точно совпадают. Я поместил этот файл под именем com.mycompany.servicename.service в папку /usr/share/dbus-1/services (я использую Ubuntu 11.10). Исполняемый файл имеет x разрешения для всех. И вот проблема - когда я пытаюсь запустить клиент, который выполняет

bus = dbus.SessionBus()
bus.get_object('com.mycompany.servicename','/path/to/object')

я получаю dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name com.mycompany.servicename was not provided by any .service files

Объект с путем '/path/to/object' регистрируется сразу после запуска службы. Я просто не понимаю, почему dbus не может найти мой файл .service. Может быть, я что-то упускаю? Есть идеи?

Изменить Мне удалось заставить D-BUS автоматически запускать мой скрипт. Раздел файла .service должен называться [D-BUS Service] вместо [D-Bus service]


person pss    schedule 08.02.2012    source источник
comment
Куда вы помещаете свой файл .service? Страница руководства для dbus-daemon ссылается на спецификацию базового каталога XDG, и этот стажер, кажется, предлагает вам поместить ее в ~/.local/share (см. standards.freedesktop.org/basedir-spec/latest/ar01s03.html)   -  person Lawrence D'Oliveiro    schedule 09.02.2012
comment
К сожалению, нет данных о других .service файлах, предоставляющих session buses, но в то же время их много в папке, о которой я упоминал ранее (/usr/share/dbus-1/services). Имя папки я получил здесь   -  person pss    schedule 16.02.2012
comment
@pss, вы должны создать ответ и принять его самостоятельно!   -  person Yasushi Shoji    schedule 18.08.2012


Ответы (1)


Вот краткий обзор комментариев...

Создайте подкаталог dbus-1/services/ в одном из каталогов, указанных в Спецификации базового каталога XDG. Обычно ~/.local/share/dbus-1/services/ работает нормально. Войдите в новый подкаталог, создайте файл с именем com.mycompany.servicename.service и добавьте строки:

[D-BUS Service]
Name=com.mycompany.servicename
Exec=/home/myuser/Workspace/service-start
User=myuser

Обратите внимание, что D-BUS в [D-BUS Service] нужно писать с заглавной буквы.

Вот и все!

person mzuther    schedule 15.12.2012
comment
означает ли это, что демон dbus захочет управлять моей службой? (Я ожидаю, что запущу свое приложение вручную, которое зарегистрирует себя на dbus для определенного интерфейса сообщений и пути к объекту через dbus-python. Но я получаю исключение ServiceUnknown.) - person n611x007; 15.11.2013