Bisakah saya menggunakan pkexec dalam skrip python atau file .desktop?

8

Dari pertanyaan berikut

kami melihat bahwa gksu tidak akan lagi didukung dalam jangka panjang, dan itu tidak akan diinstal secara default dari> = 13,04. Sebaliknya, kita harus menggunakan pkexec yang berfungsi dengan baik untuk aplikasi non-grafis tetapi tidak untuk aplikasi pada GUI:

pkexec gedit

saat mengganti gksu dalam file .desktop

EXEC=pkexec /usr/bin/gedit

atau ketika saya menjalankan skrip python untuk menjalankan aplikasi grafis dengan izin root saya mendapatkan kesalahan berikut:

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

Bagaimana saya harus menulis ulang skrip atau file .desktop saya untuk mendukung dialog otentikasi dan menjalankan aplikasi sebagai root jika saya tidak harus bergantung pada gksu?

Takkat
sumber
Salah satu pembaruan yang sudosaya lihat mengatakan sesuatu tentang mengintegrasikan dukungan untuk gksu ke dalam sudo. Hal lain yang perlu dilihat adalah sudo -Abahwa menurut halaman manual meluncurkan (mungkin) login grafis.
j0h

Jawaban:

6

Pertama buat .policyfile tindakan di /usr/share/polkit-1/actions/. Itu konvensional untuk memberi nama file tindakan dengan cara "vendor hierarkis", seperti com.ubuntu.pkexec.gparted.policyatauorg.debian.apt.policy

Kemudian rekatkan konten berikut:

<?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>

Ganti [Short/Full Program Name/Path]dengan nilai yang sesuai, misalnya gedit, gedit Text Editordan /usr/bin/gedit. <action id>nilai tidak perlu cocok dengan nama file yang dipilih (dan satu file dapat berisi beberapa tindakan), tetapi nama file konvensional adalah awalan untuk semua tindakannya.

Setelah menyimpan file, program spesifik akan berjalan dengan X dan GUI dan semacamnya.

Perbaikan lain tampaknya: Tambahkan baris berikut di /etc/pam.d/polkit-1:

sesi opsional pam_xauth.so

pengguna43787
sumber
1

Namun perbaikan lain untuk skrip pengguna: Tentukan variabel lingkungan yang sesuai di dalam skrip Anda.

Anda dapat menggunakan cuplikan seperti yang berikut ini untuk melakukan ini:

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

(berdasarkan pada getXuserfungsi ACPI )

Jika Anda menemukan .desktopfile Anda masih tidak berfungsi, Anda dapat mencoba membungkusnya pkexec commandlinedalam shpotongan, misalnya:

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

Masalah terakhir adalah bug yang diketahui, tampaknya:

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.org/show_bug.cgi?id=686059

Glutanimate
sumber