pkexec не запускает графический интерфейс polkit в Lubuntu / LXDE
Я выполнил новую установку Lubuntu 12.04 с минимальным рабочим столом, как описано здесь.
Чтобы уточнить, я выполнил установку из командной строки с альтернативного установочного диска Lubuntu, а затем apt-get install --no-install-recommends lubuntu-desktop
,
Все работает нормально, за исключением того, что Synaptic не будет запускаться из пункта меню на панели. У меня не запрашивается пароль, и после нажатия кнопки меню никакое окно не появляется. Я установил lxshortcut, чтобы увидеть, что ярлык был запущен, и команда synaptic-pkexec
, Если я ввожу эту команду в меню "Выполнить", я получаю такое же поведение (или его отсутствие).
Я могу заставить Synaptic открываться просто отлично, набрав gksudo synaptic
в меню "Выполнить". Кроме того, если я запускаю "synaptic-pkexec" из терминала, то у меня запрашивают пароль в терминале, и после этого Synaptic открывается нормально.
Может кто-нибудь предложить, пожалуйста, правильный способ заставить работать Synaptic? Я мог бы просто изменить пункт меню на "gksudo synaptic", но я предполагаю, что он установлен на synaptic-pkexec
по причине. Я смутно понимаю, что это pkexec
бизнес имеет отношение к PolicyKit, но я действительно не знаю, что такое PolicyKit или как определить, что с ним что-то не так.
3 ответа
Оказывается, мне нужно было установить policykit-1-gnome
пакет. После того, как я установил этот пакет и перезагрузился, Synaptic работал нормально.
Я установил полный рабочий стол Lubuntu на ВМ для сравнения с моей минимальной установкой, и вот как я обнаружил, чего не хватало. Согласно описанию пакета:
PolicyKit-gnome предоставляет сервис шины сеанса D-Bus, который используется для вызова диалогов аутентификации, используемых для получения привилегий.
Очевидно, что без описанной функциональности я никогда не собирался получать приглашение аутентификации GUI, чтобы открыть Synaptic.
synaptic
это зависимость от lubuntu-desktop
metapackage, поэтому он был установлен по умолчанию в моей минимальной установке. не должны policykit-1-gnome
быть зависимым от lubuntu-desktop
также, так как Synaptic не будет работать без него? Как вы думаете, я должен сообщить об ошибке?
Я использую альтернативное решение принятому ответу. Я предпочитаю использовать lxpolkit
вместо policykit-1-gnome
так как он предназначен для LXDE.
Эта проблема с pkexec
не запускать экран аутентификации очень часто. Первое, что нужно проверить, есть ли у вас графический набор политик (либо lxpolkit
или же policykit-1-gnome
) установлен и настроен для LXDE, поскольку эти пакеты помечены для удаления во время серьезного обновления lubuntu. Видимо ни то, ни другое при установке дистрибутива не включены.
Решение
устанавливать
lxpolkit
,sudo apt-get install lxpolkit
Выйти и войти.
Задавать
lxpolkit
в качестве агента политики по умолчанию
В меню перейдите кPreferences > Default applications for LXSession
(или запуститьlxsession-default-apps
в терминале). В первом разделе "Запуск приложений" (Обновление: Менеджер приложений по умолчанию 14.10 отличается. ИспользуйтеCore applications
Вкладка.), перейдите к вариантуPolkit agent
и убедитесь, что lxpolkit выбран.
Вместо использования пакета policykit-1-gnome
, lxsession
теперь будет использовать lxpolkit
для LXDE.
Почему приложения запускаются с pkexec
Не запускайте из меню LXDE
Все дело в том, как приложения в системе X11 запускаются с помощью pkexec.
Приложения, отображаемые в меню lxpanel, хранятся и настраиваются в /usr/share/applications
(пункты глобального меню) или ~/.local/share/applications
(зависит от пользователя). Смотрите LXDE Wiki - Главное меню
В этих каталогах вы найдете файл.desktop для каждого приложения, отображаемого в вашем меню. Вот пример /usr/share/applications/synaptic.desktop
:
[Desktop Entry]
Name=Synaptic Package Manager
GenericName=Package Manager
Comment=Install, remove and upgrade software packages
Exec=synaptic-pkexec
Icon=synaptic
Terminal=false
Type=Application
Categories=PackageManager;GTK;System;Settings;
NotShowIn=KDE;
X-Ubuntu-Gettext-Domain=synaptic
Обратите внимание на линию Exec=synaptic-pkexec
,
При отсутствии интерфейса набора политик у пользователя обычно запрашивается пароль в командной строке. Поскольку это пункт меню, он запускается в фоновом режиме, и нет командной строки для ввода пароля. Следовательно, вы должны убедиться, что вы используете lxpolkit
, Или, если вы предпочитаете gnome polkit, установите пакет policykit-1-gnome
который запускает меню входа каждый раз pkexec
используется. Я удалил пакет policykit-1-gnome
и используя lxpolkit
хорошо работает для всех приложений.
Альтернативные решения
Используйте gksudo вместо pkexec
Вы можете щелкнуть правой кнопкой мыши приложения, такие как synaptic, в меню, выбрать пункт "Свойства" и изменить поле "Команда" с synaptic-pkexec
в gksudo synaptic
, Или с помощью командной строки скопируйте исходный файл в каталог приложений вашего пользователя с помощью sudo cp /usr/share/applications/synaptic.desktop ${HOME}/.local/share/applications/synaptic.desktop
Затем отредактируйте строку Exec=synaptic-pkexec
и заменить его на Exec=gksudo synaptic
"Основная цель gksudo - запуск графических команд, которым нужен root, без необходимости запускать эмулятор терминала X и непосредственное использование su". - ГКСУ (1)
И не зря! См. Запуск Судо Графически.
Это, конечно, требует, чтобы каждое приложение, использующее pkexec, было отредактировано для запуска с gksudo, что требует больше работы с вашей стороны, если вы используете lxpanel. Хорошее сравнение функций безопасности и удобства использования для gksudo и PolicyKit можно найти в разделе Сравнение функций авторизации привилегий.
Напишите свой собственный pkexec
Политика для индивидуальных приложений
Это больше, чем я хочу, но в некоторых ситуациях это может быть полезно. Я не рекомендую делать это без глубокого понимания написания PolicyKit Actions.
Действия, доступные вам через polkit, будут зависеть от установленных вами пакетов. Некоторые из них используются в различных средах рабочего стола (org.freedesktop. ), Некоторые - для конкретного DE (org.gnome.), А некоторые - для отдельной программы (org.archlinux.pkexec.gparted.policy). Команда pkaction перечисляет все действия, определенные в /usr/share/polkit-1/actions, для быстрого ознакомления.
Вот пример, который я не проверял, из команды City-busz, использующей команду "pkexec" вместо "gksu":
Например, если вы хотите запустить gparted как root с
$ pkexec gparted
команда, а затем создать новый файл
/usr/share/polkit-1/actions/org.freedesktop.policykit.pkexec.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="org.freedesktop.policykit.pkexec.run-gparted"> <description>Run GParted</description> <message>Authentication is required to run GParted</message> <defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_admin_keep</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate> </action> </policyconfig>
Дополнительные действия могут быть добавлены в тот же файл.
Шляпный совет, чтобы отступить на archlinux.org для составления соответствующих выдержек из связанной документации LXDE и PolicyKit, что в конечном итоге привело меня к использованию LXPolkit в качестве предпочтительного решения.
Воспользовавшись предложением, щелкните правой кнопкой мыши по синаптической записи в меню в разделе "Системные инструменты", выберите "Свойства", затем вкладку "Запись рабочего стола" и измените synaptic-pkexec на gksudo synaptic.
Это не сработало, поэтому я исследовал с помощью терминала, запускающего synaptic (gksudo synaptic).
Для меня попытка использования gksudo привела к сообщению о том, как установить gksu. Когда я попытался установить, это привело к сообщению о том, что gksu уже установлен (и все еще не работает). Я удалил gksu и переустановил, и теперь synaptic работает нормально.