ในบางจุดแอปพลิเคชันของฉันต้องทำงานด้านการดูแลระบบเช่นการสร้างไฟล์ใน / etc หรือการรันคำสั่งด้วย root priveleges
ฉันรู้ว่าสามารถทำ Q&D ได้:
os.popen("pkexec foo bar")
แต่ฉันก็รู้ว่านี่ไม่ใช่วิธีที่สะอาดตาที่จะทำ บางประเภทที่น่ารำคาญสำหรับผู้ใช้เพราะเขาต้องการป้อนรหัสผ่านของเขาอีกครั้งแทนการจัดการแบบเซสชั่น
ผมเป็นในแง่ดีมากเท่าที่ผมพบตัวอย่างหลามสำหรับที่ถูกตรวจสอบ
มันเป็นตัวอย่างง่ายๆที่ใช้งานได้ทันที:
import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')
system_bus_name = bus.get_unique_name()
subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1 # AllowUserInteraction flag
cancellation_id = '' # No cancellation id
result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)
print result
ฉันค่อนข้างไร้เดียงสาคิดว่าหลังจากได้รับอนุญาตฉันก็สามารถดำเนินการต่อในสคริปต์ด้วยคำสั่ง os.popen () - ตอนนี้ฉันรู้ดีกว่า :(
ฉันเห็นผลลัพธ์ tuple ในตัวอย่างด้านบน แต่ในเอกสารเพิ่มเติมฉันไม่พบรหัสที่ใช้งานได้ในตอนนี้
ฉันต้องทำอะไรกับผลลัพธ์นี้ ฉันจะทำงานต่อไปตามที่ฉันต้องการได้อย่างไร มีการอ้างอิงหลามพร้อมตัวอย่างที่เสนอวิธีการที่ใช้ได้หรือไม่
ฉันพยายามที่จะแสดงรายการวิธีการอนุญาตโดยใช้ dir () แต่ไม่สามารถหาเบาะแสได้ว่าจะทำอย่างไร
ฉันต้องการหลีกเลี่ยงการใช้ทางเลือกของฉัน แต่มันจะเป็นทางเลือกสุดท้ายของฉัน โปรดช่วยฉันทำอย่างถูกวิธี :)
ขอบคุณและขอแสดงความนับถือ
André
แก้ไข:
เนื่องจากฉันไม่ได้นำสิ่งนี้ไปใช้งานได้และวิธีแก้ปัญหาเดิมของฉันโดยการเริ่มต้นโปรแกรมของฉันกับ gksu ไม่ได้ผลจาก / opt / ในที่สุดฉันก็ต้องยอมแพ้และใช้รหัสผ่านนับพันขอรหัสผ่านเพื่อให้โปรแกรมพื้นฐานทำงานอย่างน้อย เสื้อยืดในแอปโชว์ดาวน์
ฉันไม่ได้สังเกตเห็นปัญหาเพราะฉันแบ่งปันครั้งแรกอย่างรวดเร็ว ทุกอย่างทำงานถูกต้อง ถามรหัสผ่านครั้งแรกในตอนต้น ตอนนี้ฉันหมดแล้ว ผลงานของฉันสำหรับ AppShowdown เป็นhttps://launchpad.net/armorforge ;-(