Я достаточно давно использую Linux дистрибутив Elementary OS. Это форк дистрибутива Ubuntu с очень красивым и удобным интерфейсом. Много лет назад я выбрал его из множества других и до сих пор доволен своим выбором. Сегодня я расскажу как в этом дистрибутиве создать ярлык для запуска графического приложения от имени суперпользователя root.
Необходимость создать такой ярлык появилась после установки приложения LuckyBackup, с помощью которого можно создавать резервные копии файлов. У приложения есть два режима запуска - обычный и режим суперпользователя. В обычном режиме можно копировать пользовательские файлы и файлы доступные для чтения. В режиме суперпользователя можно копировать системные файлы, что позволяет создать архив всей системы. Именно это мне и было нужно, но после установки приложения я обнаружил, что ярлыка для запуска в режиме суперпользователя в меню нет.
Все ярлыки приложений в Elementary OS содержатся в каталоге /usr/share/applications. Там я обнаружил три ярлыка для запуска LuckyBackup. Один был для запуска в обычном режиме и два других для запуска в режиме суперпользователя для интерфейсов Gnome и KDE. Но ни тот ни другой не отображались в меню.
Внутри файла luckybackup-gnome-su.desktop для запуска от имени суперпользователя используется скрипт su-to-root, но он исключен из этого дистрибутива:
Exec=su-to-root -X -c /usr/bin/luckybackup
NotShowIn=KDE;
Внутри файла luckybackup-kde-su.desktop для запуска от имени суперпользователя используются дополнительные параметры X-KDE-SubstituteUID и X-KDE-Username, но они не работают в этом дистрибутиве:
Exec=/usr/bin/luckybackup
OnlyShowIn=KDE;
X-KDE-SubstituteUID=true
X-KDE-Username=root
Раз эти два варианта не работают нужно сделать свой рабочий. В Elementary OS для запуска приложений от имени суперпользователя можно использовать встроенный механизм под названием PolicyKit. Суть его в том, что мы заранее описываем в специальном файле параметры запуска приложения чтобы автоматизировать этот процесс. Файлы представляют собой обычный xml документ с расширением *.policy и находятся в каталоге /usr/share/polkit-1/actions. Создадим там новый файл с именем com.ubuntu.pkexec.luckybackup.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.luckybackup">
<description>Run luckyBackup as root</description>
<message>Authentication is required to run the luckyBackup as root</message>
<message xml:lang="ru">Для запуска luckyBackup от имени суперпользователя требуется аутентификация</message>
<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/luckybackup</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
Структура файла простая, её можно скопировать из другого файла с расширением *.policy и немного подкорректировать. Здесь важными являются следующие параметры:
После того как файл создан и в него добавлены вышеуказанные строки можно попробовать запустить приложение. Для этого нужно в терминале набрать следующую команду:
pkexec luckybackup
Здесь pkexec это команда запуска PolicyKit, а luckybackup это исполняемый файл приложения. Если всё сделано правильно, то после выполнения этой команды на экране появится диалог авторизации:
В диалоге авторизации можно увидеть тот текст, который мы добавили в тэге <message>. После успешного ввода пароля откроется окно приложения LuckyBackup с предупреждением о том, что оно запущено от имени суперпользователя.
Теперь нужно сделать так, чтобы запуск происходил с помощью ярлыка. Для этого немного подредактируем файл luckybackup-gnome-su.desktop в каталоге /usr/share/applications. Логичным было бы предположить, что нужно заменить строку
Exec=su-to-root -X -c /usr/bin/luckybackup
на строку
Exec=pkexec luckybackup
К сожалению такой вариант не работает. Не знаю причин, но приложение не запускается. Пришлось использовать дополнительный скрипт. В домашнем каталоге /home/{user} (где {user} имя Вашего пользователя) нужно создать файл luckybackup.sh с правами на исполнение и со следующим содержимым:
#!/bin/sh
pkexec luckybackup
Теперь в файле luckybackup-gnome-su.desktop нужно строку
Exec=su-to-root -X -c /usr/bin/luckybackup
заменить на
Exec=/home/{user}/luckyBackup.sh
где {user} имя Вашего пользователя. Если всё сделано правильно, то в меню появится иконка для запуска приложения от имени суперпользователя.
Пользуясь этой методикой можно создать ярлыки для запуска любых графических приложений от имени суперпользователя.
Копирование материалов сайта разрешается только при указании ссылки на источник