วิธีกำหนดค่า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) ไม่มีอะไรเช่นนี้ หากในอนาคตฉันจะพบบางอย่างฉันจะไม่ลืมที่จะอัปเดตคำตอบนี้ด้วย