나는 사용하고있다물방울GNU/Linux-Libre가 함께 제공됩니다.Gnome3 플래시백데스크탑 환경.
sudo
&를 통해 GUI 응용 프로그램을 루트로 실행할 수 있다는 것을 알고 있지만 gksudo
다음 명령을 사용하여 GUI 응용 프로그램을 루트로 실행하는 방법을 알고 싶습니다.pkexec
?
gedit
(또는 다음과 같은 다른 응용 프로그램)을 실행하려고 nautilus
하면 pkexec gedit
인증할 비밀번호를 묻는 메시지가 표시됩니다.
비밀번호를 입력하면 오류가 발생하여 종료됩니다.-
$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.
(gedit:6135): Gtk-WARNING **: cannot open display:
그래서 디스플레이 환경에 뭔가 문제가 있는 것 같습니다.
나도 시도했지만 DISPLAY=:0 pkexec gedit
작동하지 않습니다.
다음 정보는 man pkexec
다음에서 제공됩니다.
PROGRAM이 실행되는 환경은 LD_LIBRARY_PATH 또는 유사한 메커니즘을 통한 코드 삽입을 피하기 위해 알려진 가장 작은 안전 환경으로 설정됩니다. 또한 PKEXEC_UID 환경 변수는 pkexec를 호출하는 프로세스의 사용자 ID로 설정됩니다. 따라서 $DISPLAY 및 $XAUTHORITY 환경 변수가 설정되지 않았기 때문에 pkexec에서는 다른 사용자로 X11 응용 프로그램을 실행할 수 없습니다. 이 두 변수는 작업의 org.freedesktop.policykit.exec.allow_gui 주석이 null이 아닌 값으로 설정된 경우 보존됩니다. 그러나 이는 권장되지 않으며 레거시 프로그램에서만 사용해야 합니다.
이제 나는 이것을 달성하기 위해 무엇을 해야할지 모르겠습니다.
그럼 통과하는 방법을 이해하도록 도와주세요 pkexec
.가능합니까?
그건 그렇고, gparted-pkexec
명령에서 영감을 받아 훌륭하게 작동합니다. gparted
사용하는 방법 pkexec
?
답변1
이는 정책 패키지에 사용자 지정 작업을 추가하여 수행할 수 있습니다. gedit를 루트로 실행하려면 pkexec
새 파일을 만들어야 합니다 /usr/share/polkit-1/actions/org.freedesktop.policykit.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.gedit">
<description>Run gedit program</description>
<message>Authentication is required to run the gedit</message>
<icon_name>accessories-text-editor</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>
마침내 pkexec gedit
예상대로 작동해야 합니다.
맨페이지를 방문하거나참고 도서다음과 같은 예를 들어 설명합니다.
$ man pkexec | grep -i ^Example -A 60
EXAMPLE
To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
another user, simply write an action definition file like this
<?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>
<vendor>Examples for the PolicyKit Project</vendor>
<vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>
<action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
<description>Run the PolicyKit example program Frobnicate</description>
<description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
<message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
<message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
<icon_name>audio-x-generic</icon_name>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>auth_self_keep</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
</action>
</policyconfig>
and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
the action). Note that in addition to specifying the program, the authentication message, description, icon
and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
"/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
the action defined above, the following authentication dialog will be shown:
[IMAGE][2]
+----------------------------------------------------------+
| Authenticate [X] |
+----------------------------------------------------------+
| |
| [Icon] Authentication is required to run the PolicyKit |
| example program Frobnicate |
| |
| An application is attempting to perform an |
| action that requires privileges. Authentication |
| is required to perform this action. |
| |
| Password: [__________________________________] |
| |
| [V] Details: |
| Command: /usr/bin/pk-example-frobnicate |
| Run As: Super User (root) |
| Action: org.fd.pk.example.pkexec.run-frobnicate |
| Vendor: Examples for the PolicyKit Project |
| |
| [Cancel] [Authenticate] |
+----------------------------------------------------------+
답변2
나를 위해 Ubuntu를 사용하여 실행어려운 정보~처럼뿌리,
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY hardinfo
좋은 결과. 이 팁은여자 이름(프랑스어 우분투 포럼).
답변3
$DISPLAY
root
사용자가 한 명만 필요한 경우 다음을 사용하지 않고 현재 쿠키를 해당 사용자와 공유할 수 있습니다 pam_xauth
.
sudo xauth -f /root/.Xauthority add $(xauth list $DISPLAY)
이 명령을 실행한 후(세션당 한 번만 수행해야 함) pkexec
GUI 프로그램을 간단히 공유할 수 있습니다 $DISPLAY
.
pkexec env DISPLAY=$DISPLAY gparted
또한 편집기를 root
.
gedit admin:///etc/fstab
이는 polkit 인증 에이전트(비밀번호 필요)를 실행하는 것과 비슷 pkexec
하지만 편집기를 루트로 실행하는 대신 개별 파일에 대한 무제한 액세스 권한을 부여합니다.