pkexec를 통해 .desktop에서 sudo Exec 실행: Qt 오류

pkexec를 통해 .desktop에서 sudo Exec 실행: Qt 오류

sudo 권한으로 애플리케이션을 실행해야 하는 구성이 virtualbox에 있습니다. 나는 .desktopsudo로 실행하기 위해 파일을 편집하고 있습니다. (sudoers 파일을 적절하게 변경하더라도 단순히 변수를 Exec다음으로 변경하는 것은 Exec=sudo virtualbox작동하지 않습니다.)

$ cat /usr/share/applications/virtualbox.desktop 
[Desktop Entry]
Name=VirtualBox
GenericName=PC virtualization solution

Type=Application
Exec=virtualbox %U
TryExec=VirtualBox
Keywords=virtualization;
Keywords[de]=Virtualisierung;
Keywords[ru]=виртуализация;
MimeType=application/x-virtualbox-vbox;application/x-virtualbox-vbox-extpack;application/x-virtualbox-ovf;application/x-virtualbox-ova;
Icon=virtualbox
Categories=Emulator;System;Utility;
Actions=RootManager;Manager
Comment=Run several virtual systems on a single host computer
Comment[de]=Mehrere virtuelle Maschinen auf einem einzigen Rechner ausführen
Comment[it]=Esegui più macchine virtuali su un singolo computer
Comment[ko]=가상 머신
Comment[pl]=Uruchamianie wielu systemów wirtualnych na jednym komputerze gospodarza
Comment[ru]=Запуск нескольких виртуальных машин на одном компьютере
Comment[sv]=Kör flera virtuella system på en enda värddator

[Desktop Action Manager]
Exec=virtualbox
Name=Open Oracle VM Manager
Name[de]=Oracle VM Manager öffnen

[Desktop Action RootManager]
Exec=gnome-terminal -e "bash -c 'sudo -i /usr/bin/virtualbox;'"
Name=Open Manager as Admin

위의 방법은 현재로서는 효과가 있고 좋은 해결 방법이지만 인증은 gnome 터미널에서 발생한다는 점에 유의하세요. 이 문제를 우회하기 위해 pkexec(예: ) 를 사용하고 싶지만 Exec=pkexec virtualbox다음 오류가 발생합니다.

 ~$ pkexec virtualbox
Qt WARNING: could not connect to display 
Qt FATAL: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Aborted (core dumped)

몇 가지 가능한 원인/해결책을 확인했습니다.

응용 프로그램이 사용되지 않기 때문에 내 문제는 첫 번째 링크와 별로 관련이 없다고 생각합니다 pkexec. 두 번째 링크는 매우 복잡해 보이지만 단지 그럴 수도 있는 사용자 정의 작업을 freedesktop 정책 패키지에 추가합니다. 필요.

어떤 통찰력이 있습니까?

답변1

두 번째 링크가 작동합니다.

$ cat /usr/share/polkit-1/actions/org.freedesktop.policykit.virtualbox.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.virtualbox">
    <description>Run VirtualBox as Admin</description>
    <message>Authentication is required to run VirtualBox as administrator</message>
    <icon_name>virtualbox</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/virtualbox</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
</policyconfig>

그리고

$ cat /usr/share/applications/virtualbox.desktop 
[Desktop Entry]
Name=VirtualBox
GenericName=PC virtualization solution

Type=Application
Exec=pkexec virtualbox %U
TryExec=VirtualBox
Keywords=virtualization;
Keywords[de]=Virtualisierung;
Keywords[ru]=виртуализация;
MimeType=application/x-virtualbox-vbox;application/x-virtualbox-vbox-extpack;application/x-virtualbox-ovf;application/x-virtualbox-ova;
Icon=virtualbox
Categories=Emulator;System;Utility;
Actions=RootManager;Manager
Comment=Run several virtual systems on a single host computer
Comment[de]=Mehrere virtuelle Maschinen auf einem einzigen Rechner ausführen
Comment[it]=Esegui più macchine virtuali su un singolo computer
Comment[ko]=가상 머신
Comment[pl]=Uruchamianie wielu systemów wirtualnych na jednym komputerze gospodarza
Comment[ru]=Запуск нескольких виртуальных машин на одном компьютере
Comment[sv]=Kör flera virtuella system på en enda värddator

[Desktop Action Manager]
Exec=virtualbox
Name=Open Oracle VM Manager
Name[de]=Oracle VM Manager öffnen

[Desktop Action RootManager]
Exec=pkexec virtualbox
Name=Open Oracle VM Manager (admin)

관련 정보