Ad un certo punto la mia applicazione deve svolgere attività amministrative come la creazione di un file in / etc o l'esecuzione di comandi con privilegi di root.
So che potrei semplicemente fare una domanda e risposta:
os.popen("pkexec foo bar")
Ma so anche che questo non è il modo pulito previsto per farlo. Una sorta di fastidioso per l'utente perché deve sempre reinserire la password invece di avere una gestione simile a una sessione.
Ero molto ottimista poiché ho trovato l'esempio python per l'autenticazione .
È un semplice esempio che funziona immediatamente:
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
Sono stato abbastanza ingenuo pensando che dopo l'autorizzazione avrei potuto continuare nello script con alcuni comandi os.popen (). Ora lo so meglio :(
Posso vedere il risultato di tupla nell'esempio sopra, ma nella documentazione ulteriore non sono riuscito a trovare un codice funzionante per continuare a questo punto.
Cosa devo fare con questo risultato? Come posso continuare a svolgere le attività di cui ho bisogno? Esiste un riferimento a Python con esempi che offrono i metodi disponibili?
Ho provato a elencare i metodi di autorizzazione usando dir () ma non sono riuscito a trovare alcun indizio su come procedere.
Voglio davvero evitare di usare il mio fallback ma sarebbe la mia ultima risorsa. Per favore, aiutami a farlo nel modo giusto :)
Grazie e saluti
André
Modificare:
A causa del fatto che non l'ho fatto funzionare e la mia precedente soluzione avviando il mio programma con gksu non funziona con / opt /, alla fine ho dovuto rinunciare e implementare mille richieste di password per rendere il programma rudimentale lavoro per ottenere almeno una maglietta nello showdown dell'app.
Non ho notato il problema perché prima ho fatto una condivisione rapida. Lì tutto ha funzionato bene. Chiedere una volta la password all'inizio. Sono totalmente giù adesso. Il mio contributo per AppShowdown è stato https://launchpad.net/armorforge . ;-(