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 só poderia fazer um Q & amp; D:
os.popen("pkexec foo bar")
Mas também sei que esta não é a forma limpa prevista para o fazer. Algum tipo de aborrecimento para o usuário, porque ele sempre precisa inserir novamente sua senha, em vez de ter uma manipulação semelhante a uma sessão.
Eu estava muito otimista quando encontrei o exemplo da Python para autenticar .
É 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 fui bastante ingênuo pensando que, após a autorização, eu poderia simplesmente 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 eu não consegui encontrar um código de trabalho para continuar neste ponto.
O que eu tenho a ver com esse resultado? Como posso continuar executando as tarefas de 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 fallback, mas seria meu último recurso. Por favor me ajude a fazer do jeito certo:)
Obrigado e cumprimentos
André
Editar:
Devido eu não trouxe isso para o trabalho e minha solução anterior, iniciando o meu programa com gksu não funciona fora / opt /, eu finalmente tive que desistir e implementar um mil pede senha para tornar o trabalho rudimentar do programa para obter pelo menos uma camiseta no showdown do aplicativo.
Eu não percebi o problema porque eu fiz um compartilhamento rápido. Lá tudo funcionou bem. Perguntando uma vez pela senha no começo. Estou totalmente desanimada agora. Minha contribuição para AppShowdown foi link . ; - (