Irgendwann muss meine Anwendung administrative Aufgaben wie das Erstellen einer Datei in / etc oder das Ausführen von Befehlen mit Root-Rechten ausführen.
Ich weiß, ich könnte einfach ein Q & D machen:
os.popen("pkexec foo bar")
Aber ich weiß auch, dass dies nicht der vorgesehene saubere Weg ist, dies zu tun. Eine Art Ärger für den Benutzer, weil er sein Passwort immer neu eingeben muss, anstatt eine sitzungsähnliche Behandlung zu haben.
Ich war sehr optimistisch, als ich das Python-Beispiel für die Authentifizierung fand .
Es ist ein einfaches Beispiel, das sofort funktioniert:
import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')
system_bus_name = bus.get_unique_name()
subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1 # AllowUserInteraction flag
cancellation_id = '' # No cancellation id
result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)
print result
Ich war ziemlich naiv und dachte, dass ich nach der Autorisierung einfach mit einigen os.popen () - Befehlen im Skript weitermachen könnte. Jetzt weiß ich es besser :(
Ich kann das Tupel-Ergebnis im obigen Beispiel sehen, aber in der weiteren Dokumentation konnte ich zu diesem Zeitpunkt keinen funktionierenden Code finden, um fortzufahren.
Was habe ich mit diesem Ergebnis zu tun? Wie kann ich die Aufgaben, die ich benötige, weiter ausführen? Gibt es eine Python-Referenz mit Beispielen, die die verfügbaren Methoden anbieten?
Ich habe versucht, die Autorisierungsmethoden mit dir () aufzulisten, konnte aber keinen Hinweis darauf finden, wie es weitergehen soll.
Ich möchte wirklich vermeiden, meinen Fallback zu verwenden, aber es wäre mein letzter Ausweg. Bitte hilf mir, es richtig zu machen :)
Danke und Grüße
André
Bearbeiten:
Da ich dies nicht zum Laufen gebracht habe und meine frühere Lösung durch Starten meines Programms mit gksu nicht aus / opt / heraus funktioniert, musste ich schließlich tausend Anfragen nach einem Passwort aufgeben und implementieren, damit das Programm zumindest rudimentär funktioniert ein T-Shirt im App-Showdown.
Ich habe das Problem nicht bemerkt, weil ich es zuerst schnell geteilt habe. Da hat alles geklappt. Fragen Sie zu Beginn einmal nach dem Passwort. Ich bin jetzt total niedergeschlagen. Mein Beitrag für AppShowdown war https://launchpad.net/armorforge . ;-(