Em algum momento, meu aplicativo precisa executar tarefas administrativas, como criar um arquivo em / etc ou executar comandos com privilégios de root.
Eu sei que apenas poderia fazer um Q&D:
os.popen("pkexec foo bar")
Mas também sei que essa não é a maneira limpa prevista de fazê-lo. Algum tipo de aborrecimento para o usuário porque ele sempre precisa redigitar sua senha em vez de ter um tratamento parecido com uma sessão.
Fiquei muito otimista ao encontrar o exemplo de python para autenticação .
É um exemplo simples que funciona imediatamente:
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
Eu tenho sido ingênuo pensando que, após a autorização, eu poderia continuar no script com alguns comandos os.popen () -. Agora eu sei melhor :(
Eu posso ver o resultado da tupla no exemplo acima, mas na documentação adicional não consegui encontrar um código de trabalho para continuar neste momento.
O que eu tenho a ver com esse resultado? Como posso continuar executando as tarefas que preciso? Existe uma referência python com exemplos que oferecem os métodos disponíveis?
Tentei listar os métodos de autorização usando dir (), mas não consegui encontrar nenhuma pista sobre como prosseguir.
Eu realmente quero evitar usar meu substituto, mas seria meu último recurso. Por favor, me ajude a fazê-lo da maneira certa :)
Obrigado e cumprimentos
André
Editar:
Como eu não trouxe isso para funcionar, e minha solução anterior, iniciando meu programa com o gksu, não funciona em / opt /, finalmente tive que desistir e implementar mil solicitações de senha para fazer com que o programa funcionasse de maneira rudimentar para obter pelo menos uma camiseta no showdown do aplicativo.
Não percebi o problema porque primeiro compartilhei rapidamente. Lá tudo deu certo. Solicitando uma vez a senha no início. Estou totalmente triste agora. Minha contribuição para o AppShowdown foi https://launchpad.net/armorforge . ;-(