2012-02-08 2 views
4

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

[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]

+0

Где вы размещаете свой файл .service? Страница man для dbus-демона относится к XDG Base Dir Spec, и этот стажер, похоже, предлагает вам поместить его в ~/.local/share (см. Http://standards.freedesktop.org/basedir-spec/latest/ ar01s03.html) –

+0

К сожалению, нет никаких доказательств других файлов '.service', которые предоставляют' session buses', но в то же время их много в папке, о которой я упоминал ранее (/ usr/share/dbus-1/Сервисы). Имя папки, которую я получил [здесь] (http://techbase.kde.org/Development/Tutorials/D-Bus/Autostart_Services) – pss

+0

@pss, вы должны создать ответ и принять его сами! –

ответ

2

Вот краткое изложение замечаний ...

Создать подкаталог dbus-1/services/ в одном из каталогов, указанных в XDG Base Directory Specification. Обычно ~/.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] потребности быть капитализированы.

Вот и все!

+1

означает ли это, что дБ-демон захочет управлять моим сервисом? (Я ожидаю, что начну свое приложение * вручную *, которое зарегистрировалось бы на dbus для конкретного интерфейса сообщения и пути объекта через dbus-python. Но я получаю исключение 'ServiceUnknown'.) – n611x007