У якийсь момент моїй програмі потрібно виконати адміністративні завдання, такі як створення файлу в / etc або виконання команд з кореневими привілеями.
Я знаю, що просто міг би зробити питання:
os.popen("pkexec foo bar")
Але я також знаю, що це не передбачений чистий спосіб зробити це. Якийсь прикрість для користувача, тому що йому завжди потрібно повторно ввести свій пароль, а не працювати з сеансом.
Я був дуже оптимістичним, коли знайшов приклад пітона для автентичності .
Це простий приклад, який працює негайно:
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
Я досить наївно думав, що після авторизації я можу просто продовжувати роботу в сценарії з деякими командами os.popen () -. Тепер я знаю краще :(
Я можу побачити результат кортежу на прикладі вище, але в подальшій документації я не зміг знайти робочий код, який слід продовжувати в цей момент.
Що я маю робити з цим результатом? Як я можу продовжувати виконувати потрібні завдання? Чи є посилання python із прикладами, які пропонують доступні методи?
Я спробував перерахувати методи авторизації за допомогою dir (), але не міг знайти підказки, як далі.
Я дуже хочу уникати використання резервного моменту, але це було б моїм останнім заходом. Будь ласка, допоможіть мені зробити це правильно :)
Дякую та з повагою
Андре
Редагувати:
Через те, що я не привів це до роботи, і колишнє рішення, починаючи програму з gksu, не виходить / opt /, я нарешті повинен був відмовитись та реалізувати тисячу запитів пароля, щоб зробити програму рудиментарною роботою, щоб отримати хоча б футболку в розборі додатків.
Я не помітив проблеми, тому що спершу швидко поділився. Там все працювало правильно. Попросити один раз пароль на початку. Я зараз повністю знижений. Мій внесок у програму AppShowdown став https://launchpad.net/armorforge . ;-(