Мое приложение должно выполнять некоторые привилегированные работы. Я искал везде, но я не могу найти ничего полезного. Я знаю, что хочу использовать Policykit1 и dbus, потому что все остальные альтернативы, которые я нашел, больше не используются.Как получить корневые сообщения для моего приложения?
Это код, который я получил до сих пор:
import dbus
import os
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 i
result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)
os.makedirs('/usr/local/share/somefolder')
Я не могу сделать каталог, что я делаю не так?
Все дело в том, чтобы не использовать что-то вроде «sudo ./myscript.py», используя dbus и policykit как средство получения привилегий. Пока эта строка кода: result = authority.CheckAuthorization (subject, action_id, details, flags, cancelation_id) может запрашивать аутентификацию, но привилегии приложения не повышаются, даже когда я правильно добавляю свой пароль root. – zimio
Если вы хотите повысить привилегии, вызывая методы PolicyKit D-Bus (что невозможно), это не имеет никакого значения при работе под 'sudo', потому что пользователь должен доверять всему вашему приложению. PolicyKit разрешает только вызов предварительно настроенных методов привилегированных системных служб. – rkhayrov
Считаете ли вы использование «gksudo» и просто упаковку своего приложения с помощью простого сценария bash, который выполняет «gksudo myscript.py»? Это, безусловно, будет простым обходным путем. – jathanism