Запуск программ с использованием pkexec
В Runtu Gnome 12.04 программа Synaptic запускается командой
pkexec /usr/sbin/synaptic
Захотелось разобраться как это работает.
В man pkexec написано, что pkexec предназначена для выполнения команды от имени другого пользователя.
Внизу руководства был рекомендован man polkit, посмотрел и в нем информацию.
Что понял:
В системе должен быть установлен пакет policykit-1-gnome, он имеется.
Для выполнения команды с помощью pkexec, нужно создать для нее правило в /usr/share/polkit-1/actions/
Например для Synaptic: /usr/share/polkit-1/actions/com.ubuntu.pkexec.synaptic.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<action id="com.ubuntu.pkexec.synaptic">
<message>Authentication is required to run the Synaptic Package Manager</message>
<icon_name>synaptic</icon_name>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/synaptic</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
Сначала идет стандартная шапка.
В теге <policyconfig></policyconfig> уже прописаны правила для запуска Synaptic через pkexec.
id - идентификатор процесса
message - сообщение в всплывающем окне при запуске
icon_name - название иконки, которая будет отображена в всплывающем окне при запуске
В теге <defaults></defaults> указано как выполнять команду (с паролем, без пароля, или запретить запуск)
allow_any - для прочих
allow_inactive - для неактивной сессии
allow_active - для активной сессии, то есть для текущего пользователя
auth_admin - каждый раз при запуске спрашивать пароль
annotate key="org.freedesktop.policykit.exec.path" - путь к исполняемому файлу
annotate key="org.freedesktop.policykit.exec.allow_gui" - запуск в графическом режиме
Для пробы создал правило для nautilus
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<action id="com.ubuntu.pkexec.nautilus">
<message>Authentication is required to run the Nautilus</message>
<message xml:lang="ru">Авторизация выполняется для запуска Nautilus</message>
<icon_name>nautilus</icon_name>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/nautilus</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
Выложил эту информацию,так как считаю что пригодится.