web-dev-qa-db-ja.com

ダブルクリックでSudoスクリプトを実行する方法

30秒後にシステムをシャットダウンするこのスクリプトがあります。このスクリプトをダブルクリックして実行します(nautilusで変更したオプション)。これは私のスクリプトの内容です

#!/bin/bash
shutdown -h +30;
echo "succesfull"
read -p "Press any key to continue... " -n1 -s

パスワードなしでSudoスクリプトを実行可能にするために、私はこれに続いて answer を実行し、パスワード(Sudo ~/test/test.sh)を使用せずに端末からこのスクリプトを実行できます。問題は、上記のスクリプトをダブルクリックすると、再びルート権限を要求することです:

shutdown: Need to be root
successful
Press any key to continue... 

ここで問題は何ですか?

4
Eka

スクリプトを通常のユーザーとして起動する場合、スクリプトをルートとして再起動する条件を作成できます。


コンピューターをシャットダウンするには:

#!/bin/bash

if [[ $USER == "eka" ]]; then       # If the script is ran as "eka" then...
    Sudo $0                         # relaunch it as "root".
    exit 0                          # Once it finishes, exit gracefully.
Elif [[ $USER != "root" ]]; then    # If the user is not "eka" nor "root" then...
    exit 0                          # Once it finishes, exit gracefully.
fi                                  # End if.

shutdown -h +30;
read -p "Press any key to continue... " -n1 -s

簡易バージョン:

#!/bin/bash

[[ $USER == "eka" ]] && { Sudo $0; exit 0; }
[[ $USER != "root" ]] && exit 0

shutdown -h +30;

非常に簡略化されたバージョン(非推奨):

#!/bin/bash

Sudo $0          # Relaunch script as root (even if it's already running as root)
shutdown -h +30; # Shutdown the computer in 30 seconds.

コンピューターをサスペンドするには:

#!/bin/bash

if [[ $USER == "eka" ]]; then                 # If the script is ran as "eka":
    gnome-screensaver-command -a                  # Lock computer.
else                                          # Else:
    Sudo -u eka gnome-screensaver-command -a      # Once it finishes, exit gracefully.
fi                                            # End if.

簡易バージョン:

#!/bin/bash

[[ $USER != "eka" ]] && { Sudo -u eka gnome-screensaver-command -a; exit 0; }

非常に簡略化されたバージョン:

#!/bin/bash

Sudo -u eka gnome-screensaver-command -a

注:$0は、スクリプトへのフルパスを保持する変数です。

6
Helio