web-dev-qa-db-fra.com

Configuration de la session racine et de la session utilisateur sur le même bus?

J'ai un script qui doit être exécuté sous root, avec des liaisons vers dbus.

DBUS_SESSION_BUS_ADDRESS = 'address set under .dbus file ...'

class NewApp(dbus.service.Object):

    def __init__(self):
        busname = dbus.service.BusName('org.newapp', dbus.SessionBus(mainloop=DBusGMainLoop()))
        dbus.service.Object.__init__(self, busname, '/org/newapp')

    @dbus.service.method('org.newapp', out_signature='s')
    def do_stuff(self):
        return 'stuff'

if __== '__main__':
    na = NewApp
    na()
    gobject.MainLoop().run()

do_stuff a un code qui doit avoir accès à root. J'ai constaté que lorsque vous exécutez le programme sous root, cela crée une session dbus distincte et je devrais définir la "DBUS_SESSION_BUS_ADDRESS". J'ai pensé à séparer le script en deux fichiers différents et à simplement importer l'autre mais, je voudrais aussi savoir comment procéder de cette façon.

Cela me pose des problèmes, je ne sais pas où ni comment définir correctement l'adresse. Si quelqu'un a une idée, je l'apprécierais grandement.

3
tijko

Si vous écrivez un script qui nécessite d'être exécuté en tant que root et qui doit être accessible via DBus par les utilisateurs, vous devez exposer l'API via le bus système, pas le bus de session.

À titre d'exemple, voyez comment fonctionne le service système NetworkManager.

Pour plus de documentation sur le fonctionnement des autorisations dans DBus, voir http://www.freedesktop.org/wiki/Software/dbus

1
dobey