perintah pkexec dalam file .desktop

13

Saya membuat file .desktop untuk Flashtool Androxyde's (utilitas untuk perangkat Sony Xperia yang harus saya buka dengan file yang dapat dieksekusi di foldernya) yang memerlukan hak akses root untuk menggunakan utilitas fastboot. Saya dulu membuatnya berfungsi gksu, tapi saya di Ubuntu 15.04 dan gksu sekarang sudah tua.

Saya mencoba mengubah execgaris dari

Exec=gksu /home/natasha/FlashTool/FlashTool
untuk
Exec=pkexec /home/natasha/FlashTool/FlashTool
Kemudian, saya membaca tentang pkexec tidak memungkinkan untuk menjalankan aplikasi X11 dan jadi saya menimpa dengan cara ini:

masukkan deskripsi gambar di sini

Tautan ke gambar lengkap di Imgur.com

Masalahnya sekarang adalah: Ia meminta saya kata sandi tetapi GUI Flashtool tidak dimulai. TETAPI jika saya menjalankan perintah itu di terminal, program dimulai tanpa masalah. Apa yang dapat saya?

masukkan deskripsi gambar di sini

Tautan ke gambar lengkap di Imgur.com

nplezka
sumber
pkexec memerlukan file kebijakan untuk berfungsi, Anda harus membuatnya, beberapa info di sini - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html atau gunakan yang sudah ada untuk melihat bagaimana dilakukan, - / usr / share / polkit-1 / tindakan. Perhatikan bahwa kebijakan kadang-kadang lebih baik ketika bagian dari pemasangan aplikasi, (mis. Bekerja tanpa masalah), jika Anda mendapatkan kesalahan 'Tidak dapat membuka tampilan' maka ada solusi seperti ubuntuforums.org/…
doug

Jawaban:

9

Buat file baru di /usr/share/polkit-1/actions/

sudo nano /usr/share/polkit-1/actions/FlashTool.policy

dan tambahkan baris di bawah ini:

<?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-FlashTool">
    <description>Run FlashTool</description>
    <message>Authentication is required to run FlashTool</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">/home/natasha/FlashTool/FlashTool</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

Kemudian buat file baru /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

dan tambahkan baris di bawah ini:

#!/bin/sh
pkexec "/home/natasha/FlashTool/FlashTool" "$@"

Gunakan baris di bawah ini untuk Execdalam desktopfile Anda :

Exec=/home/natasha/FlashTool/flashtool-pkexec

Diuji pada sistem saya Ubuntu 15.04 GNOME dengan file-file berikut:


$ cat /usr/share/applications/gedit.root.desktop 
[Desktop Entry]
Name=Gedit as root
GenericName=Text Editor
X-GNOME-FullName=
Comment=
Exec=gedit-pkexec
Icon=gedit
Terminal=false
Type=Application
Categories=GNOME;System;Filesystem;Settings;
StartupNotify=true
X-Ubuntu-Gettext-Domain=gedit

$ cat /usr/share/polkit-1/actions/gedit.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-FlashTool">
    <description>Run FlashTool</description>
    <message>Authentication is required to run FlashTool</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/bin/gedit</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

$ cat /usr/bin/gedit-pkexec 
#!/bin/sh
pkexec "gedit" "$@"
AB
sumber
Berhasil! Satu-satunya hal yang saya modifikasi adalah pada Execperintah: Saya menulis Exec=pkexec /home/natasha/FlashTool/FlashToolseperti sebelumnya, karena flashtool-pkexec tidak berfungsi pada file .desktop. Berkat file kebijakan ini berfungsi seperti pesona. Terima kasih!
nplezka
@nplezka Untuk menjalankan skrip shell dari file .desktop, bahkan dengan #!, Anda harus mengawali Execperintah dengan /bin/sh.
TheSola10
0

sudo -Hsudah cukup untuk memulai aplikasi grafis yang mencegah perubahan pada file konfigurasi pengguna ~/, karena itu mengatur direktori home lingkungan yang berjalan ke direktori home root:

Exec=sudo -H /home/natasha/FlashTool/FlashTool
kos
sumber
Dalam sebuah desktopfile?
AB
@ AB Ya, mengapa tidak?
kos
@ AB Ini sama dengan menjalankannya dalam shinstance apa pun (mungkin dengan beberapa variabel lingkungan mengatur ad hoc, tapi ini bukan masalah).
kos
Saya tidak berpikir itu akan meminta kata sandi Anda dan meluncurkan aplikasi dengan sudojika Anda memiliki Terminal=falsebaris dalam .desktoppeluncur (seperti OP di sini). Namun kemungkinan besar itu akan berhasil Terminal=truesebagai gantinya.
pomsky