'pkexec'를 사용하여 다른 사용자로 GUI 응용 프로그램을 실행할 수 없습니다.

'pkexec'를 사용하여 다른 사용자로 GUI 응용 프로그램을 실행할 수 없습니다.

다음 정책 파일을 만들었습니다./usr/share/polkit-1/actions/com.xyz.xyz.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>   
        <vendor>XYZ Technologies Inc.</vendor>   
        <vendor_url>http://www.xyz.com</vendor_url>   
        <action id="org.xyz.policykit.pkexec.run-xyz">
            <description>Run XYZ</description>
            <message>Authentication is required to run XYZ</message>
            <defaults>
                <allow_any>no</allow_any>
                <allow_inactive>no</allow_inactive>
                <allow_active>auth_admin</allow_active>
            </defaults>
            <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/xyz</annotate>
            <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>   
        </action> 
    </policyconfig>

및 데스크톱 파일은 다음 위치에 있습니다./usr/local/share/applications/xyz-gui-root.desktop

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Name[en_in]=XYZ administrator (root)
Exec=pkexec xyz
Comment[en_IN]=Launches XYZ administrator
Name=XYZ administrator (root)
Comment=Launches XYZ administrator
Icon[en_IN]=/xyz/xyzroot.png
Icon=/xyz/xyzroot.png

XYZ를 검색하여 실행하면 Activity->Search활동이 표시되지 않으며 비밀번호도 묻지 않습니다. 하지만 xyz-gui-root.desktop파일을 두 번 클릭하면 비밀번호 인증이 예상대로 작동합니다.

내가 변하면

Exec=pkexec xyz

~처럼

Exec=gnome-terminal -x pkexec xyz

인증과 함께 작동 Activity->Search하지만 원하지 않는 터미널을 엽니다.

위 파일에서 내가 무엇을 놓치고 있나요? gnome-terminal입력을 통해 원치 않는 터미널 열림을 방지하는 방법은 무엇입니까 ? 인증이나 다른 방법을 사용하여 pkexecGUI 응용 프로그램을 실행할 수 있는 방법이 있습니까 consolehelper?

미리 감사드립니다!

답변1

내 질문에 대한 완전한 대답은 다음과 같습니다.여기. 간단히 말해서:

1) 쉘 스크립트 /usr/local/bin/foo.sh를 작성하십시오.

#!/bin/sh
pkexec "/usr/sbin/foo" "$@"

2) 위 스크립트에 실행 권한을 부여합니다.

chmod +x /usr/local/bin/foo.sh

3) .desktop 파일을 사용하는 경우 Exec 값을 다음으로 변경합니다.

Exec=/usr/local/bin/foo.sh

4) /usr/share/polkit-1/actions/의 정책 파일에 GUI를 허용하는 다음 항목이 있는지 확인하십시오.

<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>

그게 다야!

관련 정보