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.

Скриншот LXPolkit

Почему приложения запускаются с 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 работает нормально.

Другие вопросы по тегам