하나의 프롬프트 pkexec - 두 개의 명령

하나의 프롬프트 pkexec - 두 개의 명령

pkexec인증과 함께 두 가지 명령을 사용해야 할 때 어떻게 프롬프트를 표시할 수 있습니까? 내 간단한 예제 스크립트:

pkexec virsh net-start default;
pkexec "/home/user/program";

저는 리눅스 환경이 처음입니다. 감사합니다 :)

답변1

하나의 프롬프트를 사용하여 두 개 이상의 명령을 간단히 실행할 수 있으므로 sh -c 귀하의 경우에는 다음과 같이 작성할 수 있습니다.

pkexec sh -c 'virsh net-start default && /home/user/program'

원천

이 방법은 명령줄과 데스크톱 파일에서 효과적이었습니다. 스크립트에서 작동하는지 알려주세요.

답변2

이전 답변: 스크립트에서 pkexec를 제거할 수 있습니까? 다음 스크립트를 생성하고 코드를 붙여넣고(pkexec를 사용하지 않고) 스크립트에서 pkexec를 통해 실행해 보세요. 귀하의 스크립트: #!/bin/bash pkexec ./new_script 새 스크립트: #!/bin/bash your command:

편집 : 새로운 답변

@Thrig와 이야기를 나눈 후, 당신이 할 일은 다음과 같습니다. 이중 인증을 요구하지 않고(한 번만) 루트 권한으로 두 프로그램을 모두 실행하려고 합니다. 두 프로그램은 "virsh"와 "gnome-boxes"입니다. 이전 솔루션(위)은 괜찮았지만 이 경우에는 그렇지 않았습니다. "sudo" 사용을 고려하고 있음을 알리기 위해 @Thrig에 편지를 보냈습니다. "pkexec"와 "sudo"를 함께 사용하면 어떨까요? "/etc/sudoers"가 올바르게 완료되면 스크립트에서 "sudo" 명령을 사용할 때 인증할 필요가 없습니다. 나는 당신의 아이디어를 다듬을 수 있습니다. 나는 그것을 좋아하면 좋겠. 모든 것을 단계별로 설명하겠습니다.

1.세 가지 스크립트를 만듭니다.

a) main.sh - 연결 설정, 연결 끊기, gnome-box 실행. 모든 것을 루트로

b) net.sh - 명령 실행

c) die.sh - 명령 실행

ㅏ)

#!/Bin/bash
sudo /home/ham/..your..path../net.sh && pkexec /usr/bin/gnome-boxes;
sudo /home/ham/..your..path../die.sh;
exit

왜?운영자 설명

비)

#!/Bin/bash
virsh net-start default

씨)

#!/Bin/bash
virsh net-destroy default

2.스크립트가 b) c) 루트 권한으로 실행되도록 "sudoers" 파일을 편집합니다.

$ sudo nano /etc/sudoers

%sudo ALL=(root) NOPASSWD: /home/..your..path../net.sh
%sudo ALL=(root) NOPASSWD: /home/..your..path../die.sh 

삼.스크립트 b) c)의 소유자를 루트로 변경합니다.

$ sudo chown 700 /home/ham/..your..path../net.sh
$ sudo chown 700 /home/ham/..your..path../die.sh;

4.polkit에서 gnome-box에 대한 규칙을 만듭니다. 대답은 "무엇을 해야 할까요?"입니다.simple_polkit_rule

5.파일 편집:

  • org.gnome.Boxes.service

    Exec=/home/..your..path../start.sh

  • org.gnome.Boxes.desktop

    Exec=/home/..your..path../start.sh

6.이제 바로가기 아이콘을 클릭하여 gnome-boxes 애플리케이션을 실행하세요. 완전한. gnome-boxes 애플리케이션을 닫을 때 자동으로 연결을 닫는 기능을 직접 추가했습니다.

답변3

많은 사람들이 비슷한 문제에 직면했고 su 권한으로 GUI를 실행하고 싶어했습니다. 최근에는 터미널 창을 여는 문제에 대해 살펴보았습니다. 검색 후 이것이 나를 위해 일했습니다.

  • 내 사용법은 별칭을 사용하여 용어 및/또는 SU를 사용하는 ~/bin에서 GUI 및/또는 쉘 스크립트를 호출하는 것입니다.

"su" 또는 "sudo"의 GUI 권한 상승은 권장되지 않으며 수행 중인 작업의 위험을 이해하지 않고 수행해서는 안 됩니다.


  • pkexec는 다음을 통해 얻을 수 있습니다.

    sudo apt install policykit-1
    

  • 이 파일의 하단을 다음과 같이 편집하세요.

    sudo nano /usr/share/polkit-1/actions/org.freedesktop.policykit.policy
    
  • 당신의 모습은 다음과 같습니다:

    <action id="org.freedesktop.policykit.lockdown">
    
      <description>Configure lock down for an action</description>
    
        <message>Authentication is required to configure lock down policy</message>
    
      <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/pklalockdown</annotate>
    
    </action>
    

  • 그런 다음 다음을 시도하십시오.

    pkexec gedit 
    

터미널에 사용자 정의 bin 경로를 추가합니다. - 사용자의 쉘 ​​프로그램을 저장하는 것이 표준이다.

   /home/$USER/bin

또는

   ~/bin

*이 위치는 동일합니다. 첫 번째는 파일의 전체 경로이고 두 번째는 약어입니다.

    /home/$USER/bin
  • $USER $PATH에 사용자/bin을 추가하기만 하면 됩니다.

    mkdir /home/$USER/bin
    
  • 이제 터미널은 쉘 스크립트나 프로그램이 다음 위치에 있음을 인식합니다.

    ~/bin
    

예:

    $/path/to/file.sh 

이 되다:

    $file.sh

이것을 .bashrc에 추가하세요

내보내기 PATH=$PATH:$HOME/bin

여기서 "$HOME/bin"은 추가하려는 디렉토리입니다. 이 변경 사항은 일시적일 뿐이므로(셸의 현재 세션에서만 작동함) 홈 디렉터리에 있는 .bashrc 파일에 이전 줄을 추가하여 영구적으로 적용할 수 있습니다.

  • 나는 쉘 스크립트 내에서 pkexec를 사용하여 여러 프로그램을 실행할 수 있고 자격 증명을 임시로 저장할 수 있는 옵션이 있기 때문에 GUI 응용 프로그램에 대해 이 권한 상승 방법을 선호합니다.

  • 그런 다음 ~/.bash_aliases에 별칭을 추가해 볼 수 있습니다.

    echo 'alias gedit="pkexec gedit"' >> ~/.bash_aliases 
    

/PKEXEC /SU /GUI /GKsu /POLKIT /policykit-1

관련 정보