web-dev-qa-db-fra.com

Comment exécuter un script Sudo avec un double clic

J'ai ce script pour éteindre mon système après 30 secondes. Je veux exécuter ce script en double-cliquant dessus (cette option que j'ai changée dans Nautilus). Ceci est le contenu de mon script

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

pour que le script Sudo soit exécutable sans mot de passe, j'ai suivi ceci réponse et je suis en mesure d'exécuter ce script à partir du terminal sans utiliser de mot de passe (Sudo ~/test/test.sh). Le problème est que lorsque je double-clique sur le script ci-dessus, il demande à nouveau des privilèges root:

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

Quel est le problème ici?

4
Eka

Vous pouvez conditionner la relance du script en tant que root s'il est lancé en tant qu'utilisateur normal.


Pour éteindre l'ordinateur:

#!/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

Version simplifiée:

#!/bin/bash

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

shutdown -h +30;

Version très simplifiée (non recommandée):

#!/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.

Pour suspendre l'ordinateur :)

#!/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.

Version simplifiée:

#!/bin/bash

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

Version très simplifiée:

#!/bin/bash

Sudo -u eka gnome-screensaver-command -a

Remarque:$0 est une variable qui contient le chemin d'accès complet au script.

6
Helio