.desktop 파일의 pkexec 명령


13

Fastboot 유틸리티를 사용하려면 루트 권한이 필요한 Androxyde의 Flashtool (폴더에 실행 파일로 열어야하는 Sony Xperia 장치 용 유틸리티) 용 .desktop 파일을 만들었습니다. 나는 그것을 사용하도록 gksu만들었지 만 우분투 15.04에 있고 gksu는 오래되었습니다.

에서 exec줄 을 수정하려고했습니다.

Exec=gksu /home/natasha/FlashTool/FlashTool
Exec=pkexec /home/natasha/FlashTool/FlashTool
그런 다음 pkexec에서 X11 응용 프로그램을 실행할 수 없으므로 다음과 같이 재정의합니다.

여기에 이미지 설명을 입력하십시오

Imgur.com에서 전체 이미지 링크

이제 문제는 : 비밀번호를 묻지 만 Flashtool의 GUI가 시작되지 않습니다. 그러나 터미널에서 해당 명령을 실행하면 문제없이 프로그램이 시작됩니다. 어떡해?

여기에 이미지 설명을 입력하십시오

Imgur.com에서 전체 이미지 링크


pkexec가 작동하려면 정책 파일이 필요합니다. 여기서 freedesktop.org/software/polkit/docs/0.105/pkexec.1.html 파일을 생성 하거나 기존 파일을 사용하여 수행 된 작업을 확인하십시오.-/ usr / share / polkit-1 / actions. '디스플레이를 열 수 없음'오류가 발생하는 경우 앱 설치의 일부 (예 : 문제없는 작업)에서 정책이 더 나은 경우가 있습니다. ubuntuforums.org/…
doug

답변:


9

에 새 파일 만들기 /usr/share/polkit-1/actions/

sudo nano /usr/share/polkit-1/actions/FlashTool.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">/home/natasha/FlashTool/FlashTool</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

그런 다음 새 파일을 작성하십시오. /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

아래 줄을 추가하십시오.

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

파일 Exec에서 아래 줄을 사용하십시오 desktop.

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

다음 파일을 사용하여 내 시스템 Ubuntu 15.04 GNOME에서 테스트 했습니다.


$ 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" "$@"

효과가있다! 내가 수정 유일한 것은에 Exec명령을 내가 쓴 Exec=pkexec /home/natasha/FlashTool/FlashToolflashtool-pkexec가의 .desktop 파일 작업을하지 않기 때문에, 예전처럼. 정책 파일 덕분에 그것은 매력처럼 작동합니다. 감사합니다!
nplezka 2016 년

@nplezka .desktop 파일에서 셸 스크립트를 실행하려면를 #!사용하여 Exec명령 앞에 접두사를 추가해야합니다 /bin/sh.
TheSola10

0

sudo -H~/실행중인 환경의 홈 디렉토리를 루트의 홈 디렉토리로 설정하기 때문에 의 사용자 구성 파일 변경을 방지하는 그래픽 응용 프로그램을 시작하기에 충분합니다 .

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

A의 desktop파일?
AB

@AB 예, 왜 그렇지 않습니까?
kos

@AB 어떤 sh인스턴스 에서든 실행하는 것과 같습니다 (아마도 일부 환경 변수가 임시로 설정되었지만 문제는 없습니다).
kos

나는 암호를 물어와 응용 프로그램을 실행하는 거라고 생각하지 않습니다 sudo당신이있는 경우 Terminal=false에 선 .desktop(OP 여기가로) 실행합니다. 그러나 대부분은 아마도 Terminal=true대신 작동 합니다.
pomsky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.