Comment appeler une boîte de dialogue pour l'authentification?


13

J'écris un programme gui en utilisant le module wx en python. Dans le programme chaque fois que j'accède à un dossier qui nécessite le privilège root, il demande un mot de passe au terminal mais je veux afficher la boîte de dialogue pour que l'utilisateur saisisse le mot de passe et l'authentifie. Comment appeler cette boîte de dialogue et authentifier l'utilisateur dans Ubuntu?


Vous écrivez qu'il "demande un mot de passe au terminal", cela signifie-t-il que vous appelez les commandes du terminal sudo depuis python?
TLE

Je pense que vous devriez probablement utiliser PolicyKit plutôt que sudo, mais je n'ai pas suffisamment de connaissances sur Python ou PolicyKit pour écrire une bonne réponse expliquant comment. Peut-être que quelqu'un d'autre peut le faire.
Eliah Kagan

Comment allez-vous l'utiliser? juste exécuter une commande
marguerite

Réponses:


9

Il y a deux questions et réponses différentes à stackoverflow répondant à votre question: ici et ici .

Les deux réponses utilisent la commande gksudo(déjà mentionnée par @khamer). Si vous exécutez gksudo command(également sans python), il fera essentiellement ce qu'il sudofait, mais avec une interface graphique - c'est-à-dire demander à l'utilisateur un mot de passe, puis exécuter la commande en tant que root si l'utilisateur est dans le fichier sudoers.

Pour implémenter la solution suggérée à partir des réponses liées en python, vous pouvez utiliser quelque chose comme indiqué dans l'exemple suivant:

Créez un fichier run.py:

#!/usr/bin/python

import subprocess
subprocess.call(['gksudo','python create.py'])

Et un fichier create.py:

#!/usr/bin/python

# Create test file..
f = file("mytestfile", "w")

Ensuite, exécutez python run.pyet après avoir entré votre mot de passe, un fichier appartenant à root sera créé. Si vous l'exécutez, python create.pyil vous appartiendra (le fichier ne devrait pas exister avant d'exécuter le script).


3

Bien que je sois sûr qu'il existe une solution python plus sophistiquée, la version bas et sale est d'utiliser gksudo. gksudo fait la même chose que sudo, sauf qu'il crée cette boîte de dialogue pour l'authentification que vous avez mentionnée au lieu de demander sur la ligne de commande.

Voir https://help.ubuntu.com/community/RootSudo#Graphical_sudo


Puisqu'il s'agit d'une question sur la programmation d'Ubuntu en Python, pouvez-vous donner un exemple de code montrant comment utiliser gksu/ gksudodans un programme Python?
Eliah Kagan

@EliahKagan J'ai écrit une réponse avec un exemple qui, je l'espère, répond à vos demandes! :)
lumbric

0

Insérez ce script dans votre code:

import os

Password = raw_input('Please enter your root password!')

sudo_command = '<your command>'

execute = os.system('echo %s|sudo -S %s' % (Password, sudo_command))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.