2017-02-07 20 views
0

Это можно использовать менеджер Systemd для управления услугами с помощью DBus, например: Starting a systemd service via python с помощью этого:Запуск пользователей Systemd службы с помощью питона и DBus

import dbus 
sysbus = dbus.SystemBus() 
systemd1 = sysbus.get_object('org.freedesktop.systemd1',  '/org/freedesktop/systemd1') 
manager = dbus.Interface(systemd1, 'org.freedesktop.systemd1.Manager') 
job = manager.RestartUnit('test.service', 'fail') 

Однако Systemd также может обрабатывать служебные файлы пользователя с --user флаг, например:

systemctl --user start test.service 

Как можно использовать пользовательский менеджер из dbus (с помощью python)? Замена dbus.SystemBus() с dbus.Bus() или dbus.SessionBus() не сделать трюк, так как это дает:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.freedesktop.systemd1 exited with status 1 

ответ

2

dbus.SessionBus() является правильным способом для подключения к шине сессии, согласно https://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.txt

Основываясь на ошибки сообщение показано, что я подозреваю какую-то другую проблему с dbus и/или вашей сессией. Например, при попытке подключения без действительного сеанса я получаю немного другое исключение, org.freedesktop.DBus.Error.NotSupported

Я бы проверил журналы systemd для получения дополнительной информации.