คำสั่ง pkexec ในไฟล์ .desktop


13

ฉันสร้างไฟล์ .desktop สำหรับ Flashtool ของ Androxyde (ยูทิลิตี้สำหรับอุปกรณ์ Sony Xperia ที่ฉันต้องเปิดด้วยไฟล์ปฏิบัติการในโฟลเดอร์) ที่ต้องใช้สิทธิ์รูทเพื่อใช้ยูทิลิตี้ fastboot ฉันเคยทำให้มันใช้งานได้gksuแต่ฉันบน Ubuntu 15.04 และ gksu นั้นเก่าแล้ว

ฉันพยายามแก้ไขexecบรรทัดจาก

Exec=gksu /home/natasha/FlashTool/FlashTool
ถึง
Exec=pkexec /home/natasha/FlashTool/FlashTool
จากนั้นฉันอ่านเกี่ยวกับ pkexec ไม่อนุญาตให้เรียกใช้แอปพลิเคชัน X11 และดังนั้นฉันจึงแทนที่ด้วยวิธีนี้:

ป้อนคำอธิบายรูปภาพที่นี่

เชื่อมโยงไปยังภาพเต็มใน Imgur.com

ปัญหาตอนนี้คือมันถามรหัสผ่านให้ฉัน แต่ GUI ของ Flashtool ไม่เริ่มทำงาน แต่ถ้าฉันรันคำสั่งนั้นในเทอร์มินัลโปรแกรมจะเริ่มโดยไม่มีปัญหา ฉันควรทำอย่างไร

ป้อนคำอธิบายรูปภาพที่นี่

เชื่อมโยงไปยังภาพเต็มใน Imgur.com


pkexec ต้องการไฟล์นโยบายเพื่อทำงานคุณจะต้องสร้างหนึ่งข้อมูลบางอย่างที่นี่ - freedesktop.org/software/polkit/docs/0.105/pkexec.1.htmlหรือใช้สิ่งที่มีอยู่เพื่อดูวิธีการทำงาน - / usr / share / 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เหมือนก่อนเพราะ flashtool-pkexec ไม่ทำงานบนไฟล์. desktop ขอบคุณไฟล์นโยบายที่ใช้งานได้อย่างมีเสน่ห์ ขอขอบคุณ!
nplezka

@nplezka ต้องการเรียกใช้สคริปต์เปลือกจากไฟล์เดสก์ทอปแม้จะมี#!คุณจะต้องคำนำหน้าคำสั่งด้วยExec /bin/sh
TheSola10

0

sudo -Hก็พอที่จะเริ่มต้นแอปพลิเคชันแบบกราฟิกที่ป้องกันการเปลี่ยนแปลงไฟล์การกำหนดค่าของผู้ใช้~/เนื่องจากมันตั้งค่าโฮมไดเร็กตอรี่ของสภาพแวดล้อมการทำงานเป็นโฮมไดเร็กตอรี่ของรูท:

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

อยู่ในdesktopไฟล์?
AB

@AB ใช่ทำไมล่ะ
kos

@AB มันเหมือนกับการเรียกใช้ในshอินสแตนซ์ใด ๆ(อาจมีตัวแปรสภาพแวดล้อมบางตัวตั้งค่าเฉพาะกิจ แต่นี่ไม่ใช่ปัญหา)
kos

ฉันไม่คิดว่ามันจะขอรหัสผ่านของคุณและเปิดแอปพลิเคชันด้วยsudoหากคุณมีTerminal=falseไลน์ใน.desktopตัวเรียกใช้งาน (ดังที่ OP มีที่นี่) อย่างไรก็ตามอาจเป็นไปได้ที่จะทำงานTerminal=trueแทน
pomsky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.