pkexec कमांड एक .desktop फ़ाइल में


13

मैंने एंड्रॉसीड के फ्लैशटूल (सोनी एक्सपीरिया उपकरणों के लिए उपयोगिता जो मुझे इसके फ़ोल्डर में एक निष्पादन योग्य फ़ाइल के साथ खोलना है) के लिए एक .desktop फ़ाइल बनाई, जिसमें फास्टबूट उपयोगिताओं के उपयोग के लिए रूट विशेषाधिकारों की आवश्यकता होती है। मैं इसके साथ काम करता था gksu, लेकिन मैं उबंटू 15.04 पर हूं और gksu अब पुराना हो चुका है।

मैंने execलाइन को संशोधित करने का प्रयास किया

Exec=gksu /home/natasha/FlashTool/FlashTool
सेवा
Exec=pkexec /home/natasha/FlashTool/FlashTool
तब, मैंने pkexec के बारे में X11 एप्लिकेशन चलाने की अनुमति नहीं दी है और इसलिए मैं इस तरह से ओवरराइड करता हूं:

यहाँ छवि विवरण दर्ज करें

Imgur.com पर पूर्ण छवि के लिए लिंक

अब समस्या यह है: यह मुझसे पासवर्ड पूछता है लेकिन फ्लैशटूल का GUI शुरू नहीं होता है। लेकिन अगर मैं टर्मिनल में उस कमांड को निष्पादित करता हूं, तो कार्यक्रम समस्याओं के बिना शुरू होता है। मैं क्या कर सकता हूँ?

यहाँ छवि विवरण दर्ज करें

Imgur.com पर पूर्ण छवि के लिए लिंक


pkexec को काम करने के लिए एक नीति फ़ाइल की आवश्यकता है, आपको यहां एक, कुछ जानकारी बनाने की आवश्यकता होगी - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html या मौजूदा लोगों का उपयोग करके देखें कि कैसे किया, - / usr / शेयर / polkit -1 / कार्रवाई। ध्यान दें कि ऐप इंस्टॉल होने पर, (यानी बिना किसी समस्या के) काम करने के दौरान नीतियां कभी-कभी बेहतर हो जाती हैं, यदि आपको एक 'ओपन ओपन डिस्प्ले' त्रुटि नहीं मिलती है, तो ubuntuforums.org/…
doug

जवाबों:


9

में एक नई फ़ाइल बनाएँ /usr/share/polkit-1/actions/

sudo nano /usr/share/polkit-1/actions/FlashTool.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">/home/natasha/FlashTool/FlashTool</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

फिर एक नई फ़ाइल बनाएँ /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

और नीचे लाइनें जोड़ें:

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

Execअपनी desktopफ़ाइल के लिए नीचे दी गई पंक्ति का उपयोग करें :

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

निम्न फ़ाइलों के साथ मेरे सिस्टम Ubuntu 15.04 GNOME पर परीक्षण किया गया:


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

यह काम करता हैं! केवल एक चीज जो मैंने संशोधित की है वह Execकमांड पर है: मैंने Exec=pkexec /home/natasha/FlashTool/FlashToolपहले की तरह लिखा था , क्योंकि फ्लैशटूल-पीएक्सएक्सईसी .desoft.top फ़ाइल पर काम नहीं करता है। नीति फ़ाइल के लिए धन्यवाद यह एक आकर्षण की तरह काम करता है। धन्यवाद!
nplezka

@nplezka एक .desktop फ़ाइल से एक शेल स्क्रिप्ट चलाने के लिए, यहां तक ​​कि #!, आपको Execकमांड के साथ उपसर्ग करने की आवश्यकता है /bin/sh
TheSola10

0

sudo -Hउपयोगकर्ता के कॉन्फ़िगरेशन फ़ाइलों में परिवर्तन को रोकने के लिए एक ग्राफिकल एप्लिकेशन को शुरू करने के लिए पर्याप्त है ~/, क्योंकि यह चल रहे पर्यावरण के होम डायरेक्टरी को रूट के होम पेज पर सेट करता है:

Exec=sudo -H /home/natasha/FlashTool/FlashTool

एक desktopफाइल में?
एबी

@AB हां, क्यों नहीं?
कोस

@AB यह जो कुछ भी shउदाहरण में चल रहा है के रूप में ही है (शायद कुछ पर्यावरण चर के साथ तदर्थ सेट, लेकिन यहाँ एक समस्या नहीं है)।
कोस

मुझे नहीं लगता कि यह आपके पासवर्ड के लिए पूछने जा रहा है और sudoयदि आपके पास लॉन्चर Terminal=falseमें लाइन है .desktop(जैसा कि ओपी के पास है), तो एप्लिकेशन लॉन्च करें। हालांकि सबसे शायद यह Terminal=trueइसके बजाय काम करेगा ।
पोमस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.