Làm cách nào để định cấu hình pkexec
để tránh gặp lỗi khi chạy các ứng dụng GUI?
Tôi tìm thấy hai cách có thể:
Như bạn có thể thấy, sử dụng như sau:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
sẽ không nhận được bất kỳ lỗi nào. Và điều này là bình thường vì man pkexec
rất rõ ràng trong vấn đề này:
[...] pkexec will not allow you to run X11 applications
as another user since the $DISPLAY and $XAUTHORITY environment
variables are not set.[...]
Kết quả là bạn có thể tạo một bí danh ( vĩnh viễn ) (đây là cách đơn giản nhất):
alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
Hoặc, (một lần nữa) như man pkexec
nói:
[...] 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.[...]
bạn có thể tạo một tệp chính sách mới /usr/share/polkit-1/actions
được đặt tên com.ubuntu.pkexec.gedit.policy
bằng mã xml sau bên trong nơi điều quan trọng nhất là đặt thành org.freedesktop.policykit.exec.allow_gui
giá trị không trống:
<?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>
Làm thế nào để nói với nó để không yêu cầu mật khẩu sau lần đầu tiên áp dụng nó vào một lệnh?
Đối với ba thẻ thiết lập: allow_any
, allow_inactive
và allow_active
từ các tập tin chính sách, các tùy chọn sau:
- không : Người dùng không được phép thực hiện hành động. Do đó không cần xác thực.
- Vâng : Người dùng được ủy quyền để thực hiện hành động mà không cần bất kỳ xác thực nào.
- tự động : Yêu cầu xác thực nhưng người dùng không cần phải là người dùng quản trị.
- auth_admin : xác thực là người dùng quản trị.
- auth_elf_keep : Giống như auth_elf nhưng, như
sudo
, ủy quyền kéo dài một vài phút.
- auth_admin_keep : Giống như auth_admin nhưng, như
sudo
, ủy quyền kéo dài một vài phút.
Nguồn: Polkit - Cấu trúc - Hành động
Vì vậy, nếu bạn sử dụng tùy chọn auth_admin_keep (hoặc, như áp dụng, auth_elf_keep ),pkexec
sẽ không yêu cầu nhập lại mật khẩu một thời gian (theo mặc định thời gian này được đặt thành 5 phút khi tôi kiểm tra). Nhược điểm ở đây là điều này chỉ áp dụng cho một - cùng - lệnh / ứng dụng và hợp lệ cho tất cả người dùng (trừ khi nó được ghi đè trong cấu hình sau này).
Lưu tập tin cấu hình ở đâu nếu chưa có?
Các tệp cấu hình hoặc định nghĩa polkit có thể được chia thành hai loại:
Các hành động được định nghĩa trong các tệp .policy XML nằm trong /usr/share/polkit-1/actions
. Mỗi hành động có một tập các quyền mặc định được đính kèm (ví dụ: bạn cần xác định là quản trị viên để sử dụng hành động GParted). Mặc định có thể được ghi đè nhưng chỉnh sửa tệp hành động KHÔNG phải là cách chính xác. Tên của tệp chính sách này phải có định dạng này:
com.ubuntu.pkexec.app_name.policy
Quy tắc ủy quyền được xác định trong tệp JavaScript .rules. Chúng được tìm thấy ở hai nơi: các gói của bên thứ 3 có thể sử dụng /usr/share/polkit-1/rules.d
(mặc dù rất ít nếu có) và /etc/polkit-1/rules.d
dành cho cấu hình cục bộ. Các tệp .rules chỉ định một tập hợp con của người dùng, tham khảo một (hoặc nhiều) hành động được chỉ định trong tệp hành động và xác định những hạn chế nào những hành động này có thể được thực hiện bởi những người dùng đó. Ví dụ: một tệp quy tắc có thể ghi đè yêu cầu mặc định cho tất cả người dùng để xác thực là quản trị viên khi sử dụng GParted, xác định rằng một số người dùng cụ thể không cần. Hoặc không được phép sử dụng GParted.
Nguồn: Polkit - Cấu trúc
Có một ứng dụng GUI để cấu hình pkexec
sử dụng?
Từ những gì tôi biết, cho đến bây giờ (18.01.2014) không tồn tại một cái gì đó như thế này. Nếu trong tương lai tôi sẽ tìm thấy thứ gì đó, tôi cũng sẽ không quên cập nhật câu trả lời này.