Komenda pkexec w pliku .desktop

13

Zrobiłem plik .desktop dla Flashtool Androxyde (narzędzie dla urządzeń Sony Xperia, które muszę otworzyć za pomocą pliku wykonywalnego w jego folderze), który wymaga uprawnień roota do korzystania z narzędzi Fastboot. Kiedyś gksudziałałem z tym , ale pracuję na Ubuntu 15.04, a gksu jest już stary.

Próbowałem zmodyfikować execlinię z

Exec=gksu /home/natasha/FlashTool/FlashTool
do
Exec=pkexec /home/natasha/FlashTool/FlashTool
Później przeczytałem, że pkexec nie pozwala na uruchamianie aplikacji X11, więc zastępuję w ten sposób:

wprowadź opis zdjęcia tutaj

Link do pełnego obrazu na Imgur.com

Problem polega teraz na tym, że pyta mnie o hasło, ale GUI Flashtoola się nie uruchamia. ALE jeśli wykonam to polecenie w terminalu, program uruchomi się bez problemów. Co mogę zrobić?

wprowadź opis zdjęcia tutaj

Link do pełnego obrazu na Imgur.com

nplezka
źródło
pkexec potrzebuje pliku zasad do działania, musisz go utworzyć, kilka informacji tutaj - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html lub użyj już istniejących, aby zobaczyć, jak to zrobić, - / usr / share / polkit-1 / Actions. Należy pamiętać, że zasady są czasami lepiej kiedy jest częścią instalacji aplikacji (tj pracę bez problemu.), Jeśli się „nie można otworzyć wyświetlacza” błąd to istnieją obejścia takich jak ubuntuforums.org/...
Doug

Odpowiedzi:

9

Utwórz nowy plik w /usr/share/polkit-1/actions/

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

i dodaj poniższe linie:

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

Następnie utwórz nowy plik /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

i dodaj poniższe linie:

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

Użyj poniższego wiersza dla Execw swoim desktoppliku:

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

Przetestowano na moim systemie Ubuntu 15.04 GNOME z następującymi plikami:


$ 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
źródło
To działa! Jedyne, co zmodyfikowałem, to Execpolecenie: napisałem Exec=pkexec /home/natasha/FlashTool/FlashTooltak jak wcześniej, ponieważ flashtool-pkexec nie działa na pliku .desktop. Dzięki plikowi polisy działa jak urok. Dziękuję Ci!
nplezka
@nplezka Aby uruchomić skrypt powłoki z pliku .desktop, nawet przy pomocy #!, musisz poprzedzić Execkomendę /bin/sh.
TheSola10
0

sudo -Hwystarczy uruchomić aplikację graficzną zapobiegającą zmianom w plikach konfiguracyjnych użytkownika ~/, ponieważ ustawia katalog domowy uruchomionego środowiska na katalog główny root:

Exec=sudo -H /home/natasha/FlashTool/FlashTool
kos
źródło
W desktoppliku?
AB
@AB Tak, dlaczego nie?
Kos
@AB Jest to to samo, co uruchamianie go w dowolnej shinstancji (prawdopodobnie przy niektórych zmiennych środowiskowych ustawianych ad hoc, ale tutaj nie ma problemu).
Kos
Nie sądzę, że poprosi o podanie hasła i uruchomienie aplikacji, sudojeśli masz Terminal=falselinię w programie .desktopuruchamiającym (tak jak tutaj OP). Jednak najprawdopodobniej działałoby to Terminal=truezamiast tego.
pomsky