Bagaimana cara menjalankan aplikasi GUI sebagai root dengan menggunakan pkexec?

14

Saya menggunakan Trisquel GNU / Linux-Libre yang datang dengan Gnome3 Flashback Desktop Environment.

Saya tahu bahwa saya dapat menjalankan aplikasi GUI sebagai root oleh sudo& gksudotetapi saya ingin tahu bahwa Bagaimana cara menjalankan aplikasi GUI sebagai root dengan bantuan pkexec?

Ketika saya mencoba untuk menjalankan gedit(atau aplikasi lain seperti: nautilus) oleh pkexec geditkemudian Ini meminta password untuk otentikasi: -

tangkapan layar

Setelah memasukkan kata sandi keluar dengan kesalahan: -

$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.

(gedit:6135): Gtk-WARNING **: cannot open display:

Jadi, sepertinya ada yang salah dengan lingkungan tampilan.

Saya juga sudah mencoba DISPLAY=:0 pkexec gedittetapi tidak berhasil.


Informasi berikut tersedia dari man pkexec: -

Lingkungan tempat PROGRAM menjalankannya, akan ditetapkan ke lingkungan minimal yang diketahui dan aman untuk menghindari menyuntikkan kode melalui LD_LIBRARY_PATH atau mekanisme serupa. Selain itu variabel lingkungan PKEXEC_UID diatur ke id pengguna dari proses yang memanggil pkexec. Akibatnya, pkexec tidak akan memungkinkan Anda menjalankan aplikasi X11 sebagai pengguna lain karena variabel lingkungan $ DISPLAY dan $ XAUTHORITY tidak disetel. Dua variabel ini akan dipertahankan jika anotasi org.freedesktop.policykit.exec.allow_gui pada suatu aksi disetel ke nilai kosong; ini tidak disarankan, dan hanya digunakan untuk program-program warisan.

Sekarang saya tidak tahu apa yang harus dilakukan untuk mencapai ini.

Jadi, Bantu saya untuk mengetahui Cara menjalankan aplikasi GUI sebagai root dengan cara pkexec. Atau ini mungkin atau tidak?


BTW, Terinspirasi oleh gparted-pkexecperintah yang berfungsi dengan baik. Bagaimana cara gpartedmenggunakannya pkexec?

Pandya
sumber
(Kemudian ditemukan) Terkait: Bagaimana cara mengkonfigurasi pkexec?
Pandya
Lihat tautan ini yang berfungsi untuk saya.
TinyRickHole

Jawaban:

10

Ini dapat dilakukan dengan menambahkan tindakan khusus ke policykit. Jika Anda ingin menjalankan gedit sebagai root, pkexecAnda harus membuat file baru /usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.policymisalnya:

<?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.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</icon_name>
    <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/gedit</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
</policyconfig>

Akhirnya pkexec geditharus bekerja seperti yang diharapkan.


Kunjungi manual atau Referensi Manual yang menjelaskannya dengan CONTOH seperti: -

$ man pkexec | grep -i ^Example -A 60
EXAMPLE
       To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
       another user, simply write an action definition file like this

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

             <vendor>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>

           </policyconfig>

       and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
       the action). Note that in addition to specifying the program, the authentication message, description, icon
       and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
       the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
       if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
       "/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
       the action defined above, the following authentication dialog will be shown:

           [IMAGE][2]

               +----------------------------------------------------------+
               |                     Authenticate                     [X] |
               +----------------------------------------------------------+
               |                                                          |
               |  [Icon]  Authentication is required to run the PolicyKit |
               |          example program Frobnicate                      |
               |                                                          |
               |          An application is attempting to perform an      |
               |          action that requires privileges. Authentication |
               |          is required to perform this action.             |
               |                                                          |
               |          Password: [__________________________________]  |
               |                                                          |
               | [V] Details:                                             |
               |  Command: /usr/bin/pk-example-frobnicate                 |
               |  Run As:  Super User (root)                              |
               |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
               |  Vendor:  Examples for the PolicyKit Project             |
               |                                                          |
               |                                  [Cancel] [Authenticate] |
               +----------------------------------------------------------+
taliezin
sumber
Ya, saya akhirnya menemukannya di manpage ( man pkexec) juga!
Pandya
Bisakah Anda membantu saya di unix.stackexchange.com/q/204638/66803 ?
Pandya
@ Pandya, kesalahan sebenarnya adalah "Menolak untuk memberikan layanan kepada orang tua yang sudah mati", ada beberapa laporan bug ketika saya googled untuk itu. Untuk mengatasinya Anda dapat membuat file yang dapat dieksekusi di / usr / local / bin yang berisi sesuatu seperti: #! / bin / sh "pkexec" "nautilus" dan jalankan dengan F7. Saya pikir itu harus berhasil.
taliezin
BAIK. Saya sudah mencoba membuat executable yang berfungsi baik dengan F7.
Pandya
2
Saya benar-benar kecewa bahwa alat seperti itu memaksa saya untuk mengkonfigurasi sesuatu di luar / etc dan lebih buruk di bawah / usr / share daripada / usr / local / share.
niels