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


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" "$@"

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.