lệnh pkexec trong tệp .desktop


13

Tôi đã tạo một tệp .desktop cho Flashtool của Androxyde (tiện ích cho các thiết bị Sony Xperia mà tôi phải mở bằng một tệp thực thi trong thư mục của nó) yêu cầu quyền root để sử dụng các tiện ích fastboot. Tôi đã từng làm cho nó hoạt động với gksu, nhưng tôi đang dùng Ubuntu 15.04 và gksu giờ đã cũ.

Tôi đã cố gắng sửa đổi execdòng từ

Exec=gksu /home/natasha/FlashTool/FlashTool
đến
Exec=pkexec /home/natasha/FlashTool/FlashTool
Sau đó, tôi đọc về pkexec không cho phép chạy các ứng dụng X11 và vì vậy tôi ghi đè theo cách này:

nhập mô tả hình ảnh ở đây

Liên kết đến hình ảnh đầy đủ trên Imgur.com

Vấn đề bây giờ là: Nó hỏi tôi mật khẩu nhưng GUI của Flashtool không khởi động. NHƯNG nếu tôi thực hiện lệnh đó trong terminal, chương trình bắt đầu mà không gặp vấn đề gì. Tôi có thể làm gì?

nhập mô tả hình ảnh ở đây

Liên kết đến hình ảnh đầy đủ trên Imgur.com


pkexec cần một tệp chính sách để hoạt động, bạn sẽ cần tạo một tệp, một số thông tin ở đây - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html hoặc sử dụng các tệp hiện có để xem cách thực hiện, - / usr / share / polkit-1 / hành động. Xin lưu ý rằng các chính sách đôi khi tốt hơn khi một phần của cài đặt ứng dụng, (ví dụ: hoạt động không có vấn đề), nếu bạn gặp lỗi 'Không thể hiển thị mở' thì có các cách giải quyết như ubuntuforums.org/iêu
doug

Câu trả lời:


9

Tạo một tệp mới trong /usr/share/polkit-1/actions/

sudo nano /usr/share/polkit-1/actions/FlashTool.policy

và thêm các dòng dưới đây:

<?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.run-FlashTool">
    <description>Run FlashTool</description>
    <message>Authentication is required to run FlashTool</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/home/natasha/FlashTool/FlashTool</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

Sau đó tạo một tệp mới /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

và thêm các dòng dưới đây:

#!/bin/sh
pkexec "/home/natasha/FlashTool/FlashTool" "$@"

Sử dụng dòng dưới đây cho Exectrong desktoptập tin của bạn :

Exec=/home/natasha/FlashTool/flashtool-pkexec

Đã thử nghiệm trên hệ thống của tôi Ubuntu 15.04 Gnome với các tệp sau:


$ cat /usr/share/applications/gedit.root.desktop 
[Desktop Entry]
Name=Gedit as root
GenericName=Text Editor
X-GNOME-FullName=
Comment=
Exec=gedit-pkexec
Icon=gedit
Terminal=false
Type=Application
Categories=GNOME;System;Filesystem;Settings;
StartupNotify=true
X-Ubuntu-Gettext-Domain=gedit

$ cat /usr/share/polkit-1/actions/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.run-FlashTool">
    <description>Run FlashTool</description>
    <message>Authentication is required to run FlashTool</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</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>

$ cat /usr/bin/gedit-pkexec 
#!/bin/sh
pkexec "gedit" "$@"

Nó hoạt động! Điều duy nhất tôi sửa đổi là trên Execlệnh: Tôi đã viết Exec=pkexec /home/natasha/FlashTool/FlashToolnhư trước đây, vì flashtool-pkexec không hoạt động trên tệp .desktop. Nhờ các tập tin chính sách, nó hoạt động như một nét duyên dáng. Cảm ơn bạn!
nplezka

@nplezka Để chạy tập lệnh shell từ tệp .desktop, ngay cả với #!, bạn cần phải thêm tiền tố vào Execlệnh /bin/sh.
TheSola10

0

sudo -Hlà đủ để bắt đầu một ứng dụng đồ họa ngăn chặn các thay đổi đối với các tệp cấu hình của người dùng ~/, vì nó đặt thư mục chính của môi trường đang chạy vào thư mục gốc của root:

Exec=sudo -H /home/natasha/FlashTool/FlashTool

Trong một desktoptập tin?
AB

@AB Có, tại sao không?
kos

@AB Nó giống như chạy nó trong bất kỳ shtrường hợp nào (có thể với một số biến môi trường được đặt ad hoc, nhưng đây không phải là vấn đề).
kos

Tôi không nghĩ sẽ hỏi mật khẩu của bạn và khởi chạy ứng dụng sudonếu bạn có Terminal=falsedòng trong .desktoptrình khởi chạy (như OP có ở đây). Tuy nhiên, hầu hết có lẽ nó sẽ làm việc với Terminal=truethay vào đó.
pomsky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.