pkexec를 사용하여 GUI 응용 프로그램을 루트로 실행하려면 어떻게합니까?


16

내가 사용하고 Trisquel 함께 제공 GNU / 리눅스 리브레 Gnome3 플래시백 데스크탑 환경.

나는에 의해 루트로 GUI 응용 프로그램을 실행할 수 있다는 것을 알고 sudo& 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로 설정됩니다. 결과적으로 $ pk 및 $ XAUTHORITY 환경 변수가 설정되지 않았기 때문에 pkexec는 X11 응용 프로그램을 다른 사용자로 실행할 수 없습니다. 조치에 대한 org.freedesktop.policykit.exec.allow_gui 주석이 비어 있지 않은 값으로 설정된 경우이 두 변수가 유지됩니다. 그러나 권장하지 않으며 레거시 프로그램에만 사용해야합니다.

이제 나는 이것을 달성하기 위해 무엇을 해야할지 모르겠다.

따라서로 GUI 애플리케이션을 루트로 실행하는 방법을 찾을 수 있도록 도와주세요 pkexec. 아니면 가능합니까?


BTW, gparted-pkexec잘 작동 하는 명령 에서 영감을 얻었습니다 . 어떻게 gparted사용 pkexec합니까?


(나중에 발견) 관련 : pkexec를 구성하는 방법?
Pandya

그것이 나를 위해 일한 이 링크를 확인하십시오 .
TinyRickHole

답변:


11

policykit에 사용자 정의 조치를 추가하여 수행 할 수 있습니다. 루트로 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으로 예상대로 작동합니다.


다음과 같이 EXAMPLE로 설명하는 맨 페이지 또는 참조 설명서 를 방문하십시오 .

$ 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] |
               +----------------------------------------------------------+

예, 맨 페이지 ( man pkexec)에서도 찾았습니다 !
Pandya

unix.stackexchange.com/q/204638/66803 에서 나를 도울 수 있습니까 ?
Pandya

@Pandya, 실제 오류는 "죽은 부모에게 서비스를 렌더링하는 것을 거부합니다"입니다 .Google에서 검색 할 때 몇 가지 버그 보고서가 있습니다. 이 문제를 해결하려면 / usr / local / bin에 다음과 같은 실행 파일을 만들 수 있습니다. #! / bin / sh "pkexec" "nautilus"를 실행하고 F7으로 실행하십시오. 나는 그것이 작동해야한다고 생각합니다.
taliezin

확인. F7에서 제대로 작동하는 실행 파일을 만들어 보았습니다.
Pandya

2
이러한 도구를 사용하여 / usr / local / share 대신 / usr / share 아래에서 / etc 외부에 무언가를 구성하고 더 최악의 환경을 구성해야한다는 사실에 정말 실망했습니다.
niels
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.