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