Могу ли я использовать pkexec в скрипте Python или в файле .desktop?

Из следующих вопросов

мы видим, что gksu больше не будет поддерживаться в долгосрочной перспективе, и он не будет установлен по умолчанию с> = 13.04. Вместо этого мы должны использовать pkexec, который прекрасно работает для неграфических приложений, но не для приложений в графическом интерфейсе:

pkexec gedit

при замене gksu в файле .desktop

EXEC=pkexec /usr/bin/gedit

или Когда я запускаю скрипт Python для запуска графического приложения с правами root, я получаю следующую ошибку:

>>>subprocess.Popen(['pkexec','gedit'])
** (gedit:3203): WARNING **: Could not open X display

Как мне переписать мои скрипты или мои файлы .desktop для поддержки диалога аутентификации и запустить приложение от имени пользователя root, если у меня не будет зависеть от gksu?

8
задан 13 April 2017 в 15:23

2 ответа

Сначала создайте файл действия .policy в /usr/share/polkit-1/actions/. Принято называть файлы действий «иерархическим» способом поставщика, например com.ubuntu.pkexec.gparted.policy или org.debian.apt.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-[Short Program Name]">
    <description>Run [Full Program Name]</description>
    <message>Authentication is required to run [Full Program Name]</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">[Full Program Path]</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

Заменить [Short/Full Program Name/Path] на соответствующий значения, например gedit, gedit Text Editor и /usr/bin/gedit. Значение <action id> не обязательно должно соответствовать выбранному имени файла (и один файл может содержать несколько действий), но условно имя файла является префиксом для всех его действий.

После сохранения файла определенная программа будет работать с X и графическим интерфейсом и так далее.

Еще одно исправление: добавьте следующую строку в /etc/pam.d/polkit-1:

необязательный сеанс pam_xauth.so

0
ответ дан 13 April 2017 в 15:23

Еще одно исправление для пользовательских скриптов: определите соответствующие переменные среды внутри вашего скрипта.

Вы можете использовать фрагмент, подобный следующему, чтобы сделать это:

getXuser() {
        user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
        if [ x"$user" = x"" ]; then
                startx=`pgrep -n startx`
                if [ x"$startx" != x"" ]; then
                        user=`ps -o user --no-headers $startx`
                fi
        fi
        if [ x"$user" = x"" ]; then
               user=$(pinky -fw | awk '{ print $1; exit; }')
        fi
        if [ x"$user" != x"" ]; then
                userhome=`getent passwd $user | cut -d: -f6`
                export XAUTHORITY=$userhome/.Xauthority
        else
                export XAUTHORITY=""
        fi
        export XUSER=$user
}


for x in /tmp/.X11-unix/*; do
   displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
   getXuser;
      if [ x"$XAUTHORITY" != x"" ]; then
        export DISPLAY=":$displaynum"
      fi
done

(на основе функции ACPI getXuser)

Если файл .desktop все еще не найден не работает, вы можете попробовать обернуть ваш pkexec commandline во фрагмент sh, например:

Exec=sh -c "pkexec --user root script_that_needs_root.sh"

Последняя проблема - известная ошибка, по-видимому:

http: / /bugs.debian.org/cgi-bin/bugreport.cgi?bug=690339

https://bugzilla.xfce.org/show_bug.cgi?id=9373

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650038

https: //bugzilla.gnome. орг / show_bug.cgi? ID = 686059

0
ответ дан 13 April 2017 в 15:23

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

Похожие вопросы: