ฉันจะรันแอปพลิเคชัน GUI เป็นรูทโดยใช้ pkexec ได้อย่างไร


16

ฉันใช้Trisquel GNU / Linux-Libre ซึ่งมาพร้อมกับGnome3 Flashback Desktop Environment

ฉันรู้ว่าฉันสามารถเรียกใช้แอปพลิเคชัน GUI เป็นรูทได้โดยsudo& gksudoแต่ฉันต้องการรู้ว่าฉันจะรันแอปพลิเคชัน GUI เป็นรูทด้วยความช่วยเหลือได้pkexecอย่างไร

เมื่อฉันพยายามเรียกใช้gedit(หรือแอปพลิเคชันอื่นเช่น:) nautilusจากpkexec geditนั้นจะพร้อมท์ให้ใส่รหัสผ่านสำหรับการตรวจสอบสิทธิ์: -

ภาพหน้าจอ

หลังจากป้อนรหัสผ่านแล้วจะออกโดยมีข้อผิดพลาด: -

$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.

(gedit:6135): Gtk-WARNING **: cannot open display:

ดังนั้นดูเหมือนว่ามีบางอย่างผิดปกติกับสภาพแวดล้อมการแสดงผล

ฉันเคยลองด้วยDISPLAY=:0 pkexec geditแต่ไม่ได้ผล


ข้อมูลต่อไปนี้ได้จากman pkexec: -

สภาพแวดล้อมที่โปรแกรมจะเรียกใช้จะถูกตั้งค่าเป็นสภาพแวดล้อมที่ปลอดภัยและรู้จักน้อยที่สุดเพื่อหลีกเลี่ยงการฉีดรหัสผ่าน LD_LIBRARY_PATH หรือกลไกที่คล้ายกัน นอกจากนี้ตัวแปรสภาพแวดล้อม PKEXEC_UID ถูกตั้งค่าเป็น id ผู้ใช้ของกระบวนการที่เรียกใช้ pkexec ดังนั้น pkexec จะไม่อนุญาตให้คุณเรียกใช้แอปพลิเคชัน X11 ในฐานะผู้ใช้รายอื่นเนื่องจากตัวแปรสภาพแวดล้อม $ DISPLAY และ $ XAUTHORITY ไม่ได้ถูกตั้งค่าไว้ ตัวแปรสองตัวเหล่านี้จะถูกเก็บไว้หากหมายเหตุประกอบ org.freedesktop.policykit.exec.allow_gui ในการดำเนินการถูกตั้งค่าเป็นค่าที่ไม่ว่างเปล่า สิ่งนี้เป็นสิ่งที่ท้อแท้และควรใช้สำหรับโปรแกรมดั้งเดิมเท่านั้น

ตอนนี้ฉันไม่รู้จะทำอย่างไรเพื่อจะทำสิ่งนี้ให้สำเร็จ

ดังนั้นความช่วยเหลือผมที่จะหาวิธีการเรียกใช้โปรแกรม GUI pkexecเป็นรากโดยวิธีการของ หรือเป็นไปได้หรือไม่?


BTW แรงบันดาลใจจากgparted-pkexecคำสั่งที่ทำงานได้ดี วิธีgpartedการใช้งานpkexec?


(ค้นพบในภายหลัง) ที่เกี่ยวข้อง: วิธีกำหนดค่า pkexec
Pandya

ลองดูลิงค์นี้มันใช้งานได้สำหรับฉัน
TinyRickHole

คำตอบ:


11

สามารถทำได้โดยการเพิ่มการกระทำที่กำหนดเองเพื่อ policykit หากคุณต้องการรัน gedit ในฐานะรูทด้วยpkexecคุณต้องสร้างไฟล์ใหม่/usr/share/polkit-1/actions/org.freedesktop.policykit.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.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</icon_name>
    <defaults>
        <allow_any>auth_admin</allow_any>
        <allow_inactive>auth_admin</allow_inactive>
        <allow_active>auth_admin</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>

ในที่สุดpkexec geditควรทำงานตามที่คาดไว้


เยี่ยมชม manpage หรือคู่มืออ้างอิงซึ่งอธิบายด้วย EXAMPLE เช่น: -

$ man pkexec | grep -i ^Example -A 60
EXAMPLE
       To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
       another user, simply write an action definition file like this

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

             <vendor>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>

           </policyconfig>

       and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
       the action). Note that in addition to specifying the program, the authentication message, description, icon
       and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
       the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
       if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
       "/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
       the action defined above, the following authentication dialog will be shown:

           [IMAGE][2]

               +----------------------------------------------------------+
               |                     Authenticate                     [X] |
               +----------------------------------------------------------+
               |                                                          |
               |  [Icon]  Authentication is required to run the PolicyKit |
               |          example program Frobnicate                      |
               |                                                          |
               |          An application is attempting to perform an      |
               |          action that requires privileges. Authentication |
               |          is required to perform this action.             |
               |                                                          |
               |          Password: [__________________________________]  |
               |                                                          |
               | [V] Details:                                             |
               |  Command: /usr/bin/pk-example-frobnicate                 |
               |  Run As:  Super User (root)                              |
               |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
               |  Vendor:  Examples for the PolicyKit Project             |
               |                                                          |
               |                                  [Cancel] [Authenticate] |
               +----------------------------------------------------------+

ใช่ในที่สุดฉันก็พบมันใน manpage ( man pkexec) ด้วย!
Pandya

คุณสามารถช่วยเราได้ที่unix.stackexchange.com/q/204638/66803 ?
Pandya

@Pandya ข้อผิดพลาดจริงคือ "ปฏิเสธที่จะให้บริการกับผู้ปกครองที่ตายแล้ว" มีรายงานข้อผิดพลาดบางอย่างเมื่อฉัน googled มัน สำหรับวิธีแก้ปัญหาคุณสามารถสร้างไฟล์ที่เรียกใช้งานได้ใน / usr / local / bin ซึ่งมีบางอย่างเช่น: #! / bin / sh "pkexec" "nautilus" และเรียกใช้ด้วย F7 ฉันคิดว่ามันควรจะทำงาน
taliezin

ตกลง. ฉันได้ลองใช้โปรแกรมที่ทำงานได้ดีกับ F7
Pandya

2
ฉันผิดหวังจริง ๆ ที่เครื่องมือดังกล่าวบังคับให้ฉันกำหนดค่าบางอย่างนอก / etc และแย่ที่สุดภายใต้ / usr / share แทน / usr / local / share
niels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.