วิธีกำหนดค่าpkexecเพื่อหลีกเลี่ยงข้อผิดพลาดเมื่อเรียกใช้แอปพลิเคชัน GUI
ฉันพบวิธีที่เป็นไปได้สองวิธี:
- อย่างที่คุณเห็นโดยใช้สิ่งต่อไปนี้: - pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
 - จะไม่ได้รับข้อผิดพลาดใด ๆ และนี่เป็นเรื่องปกติเพราะ- man pkexecมีความชัดเจนในเรื่องนี้:
 - 
-        [...] pkexec will not allow you to run X11 applications
       as another user since the $DISPLAY and $XAUTHORITY environment
       variables are not set.[...]
 
 - ดังนั้นคุณสามารถสร้างนามแฝง ( ถาวร ) (นี่คือวิธีที่ง่ายที่สุด): - alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
 
- หรือ (อีกครั้ง) ตามที่- man pkexecพูดว่า:
 - 
-        [...] These two variables will be retained if the
       org.freedesktop.policykit.exec.allow_gui annotation on an action is set
       to a nonempty value; this is discouraged, though, and should only be
       used for legacy programs.[...]
 
 - คุณสามารถสร้างไฟล์นโยบายใหม่ใน- /usr/share/polkit-1/actionsชื่อ- com.ubuntu.pkexec.gedit.policyด้วยรหัส xml ต่อไปนี้ภายในซึ่งสิ่งที่สำคัญที่สุดคือการตั้งค่า- org.freedesktop.policykit.exec.allow_guiเป็น nonempty:
 - <?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="com.ubuntu.pkexec.gedit">
    <message gettext-domain="gparted">Authentication is required to run gedit</message>
    <icon_name>gedit</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>
 
จะบอกได้อย่างไรว่าจะไม่ขอรหัสผ่านหลังจากใช้ครั้งแรกกับคำสั่งได้อย่างไร
สำหรับทั้งสามแท็กการตั้งค่า: allow_any, allow_inactiveและallow_activeจากไฟล์นโยบายตัวเลือกต่อไปนี้:
- ไม่ : ผู้ใช้ไม่ได้รับอนุญาตให้ดำเนินการ ดังนั้นจึงไม่จำเป็นต้องมีการตรวจสอบ
- ใช่ : ผู้ใช้ได้รับอนุญาตให้ดำเนินการโดยไม่ต้องมีการตรวจสอบสิทธิ์ใด ๆ
- auth_self : ต้องการการรับรองความถูกต้อง แต่ผู้ใช้ไม่จำเป็นต้องเป็นผู้ใช้ที่เป็นผู้ดูแลระบบ
- auth_admin : ต้องการการรับรองความถูกต้องในฐานะผู้ใช้ที่เป็นผู้ดูแลระบบ
- auth_self_keep : เช่นเดียวกับauth_selfแต่เช่นsudoการอนุญาตใช้เวลาไม่กี่นาที
- auth_admin_keep : เหมือนกับauth_adminแต่เช่นsudoการอนุญาตใช้เวลาไม่กี่นาที
     ที่มา: Polkit - โครงสร้าง - การกระทำ
ดังนั้นหากคุณใช้ตัวเลือกauth_admin_keep (หรือตามความเหมาะสมauth_self_keep ) pkexecจะไม่ถามรหัสผ่านอีกครั้งในบางครั้ง (โดยค่าเริ่มต้นเวลานี้จะถูกตั้งค่าเป็น 5 นาทีตามที่ฉันตรวจสอบ) ข้อเสียของที่นี่คือสิ่งนี้ใช้ได้เฉพาะกับคำสั่ง / แอปพลิเคชันเท่านั้นและใช้ได้สำหรับผู้ใช้ทุกคน (เว้นแต่จะมีการแก้ไขในการกำหนดค่าในภายหลัง)
จะบันทึกไฟล์กำหนดค่าไว้ที่ไหนถ้ายังไม่มี?
ไฟล์การกำหนดค่าหรือคำจำกัดความของ polkit สามารถแบ่งออกเป็นสองชนิด:
- การดำเนินการที่กำหนดไว้ในไฟล์ XML .policy - /usr/share/polkit-1/actionsตั้งอยู่ใน แต่ละการกระทำมีชุดของสิทธิ์เริ่มต้นที่แนบมากับมัน (เช่นคุณต้องระบุว่าเป็นผู้ดูแลระบบเพื่อใช้การกระทำ GParted) ค่าเริ่มต้นสามารถแก้ไขได้ แต่การแก้ไขไฟล์การกระทำไม่ใช่วิธีที่ถูกต้อง ชื่อของไฟล์นโยบายนี้ควรมีรูปแบบนี้:
 - com.ubuntu.pkexec.app_name.policy
 
- กฎการให้สิทธิ์ถูกกำหนดในไฟล์ JavaScript. rules พบได้ในสองที่: แพ็คเกจของบุคคลที่สามสามารถใช้- /usr/share/polkit-1/rules.d(แม้ว่าจะมีจำนวนน้อยก็ตาม) และใช้- /etc/polkit-1/rules.dสำหรับการกำหนดค่าท้องถิ่น ไฟล์. rules กำหนดส่วนย่อยของผู้ใช้อ้างอิงหนึ่ง (หรือมากกว่า) ของการกระทำที่ระบุในไฟล์การกระทำและพิจารณาด้วยข้อ จำกัด ว่าการกระทำเหล่านี้สามารถทำได้โดยผู้ใช้นั้น / ผู้ใช้เหล่านั้น ตัวอย่างเช่นไฟล์กฏสามารถลบล้างข้อกำหนดเริ่มต้นสำหรับผู้ใช้ทั้งหมดในการตรวจสอบสิทธิ์ในฐานะผู้ดูแลระบบเมื่อใช้ GParted โดยพิจารณาว่าผู้ใช้บางรายไม่จำเป็นต้องทำ หรือไม่ได้รับอนุญาตให้ใช้ GParted เลย
 
     ที่มา: Polkit - โครงสร้าง
มีแอพพลิเคชั่น GUI สำหรับตั้งค่าpkexecการใช้งานหรือไม่?
จากสิ่งที่ฉันรู้จนถึงตอนนี้ (18.01.2014) ไม่มีอะไรเช่นนี้ หากในอนาคตฉันจะพบบางอย่างฉันจะไม่ลืมที่จะอัปเดตคำตอบนี้ด้วย