Como executar um script sudo com duplo clique

4

Eu tenho este script para desligar meu sistema após 30 segundos. Eu quero executar este script clicando duas vezes nele (essa opção eu mudei no nautilus). Este é o conteúdo do meu script

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

para tornar o script sudo executável sem uma senha, eu segui esta resposta e eu sou capaz de executar este script a partir do terminal sem usar uma senha ( sudo ~/test/test.sh ). O problema é quando eu clico duas vezes no script acima e novamente pedindo privilégios de root:

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

Qual é o problema aqui?

    
por Eka 22.05.2015 / 19:31

1 resposta

6

Você pode condicionar o relançamento do script como root se ele for iniciado como um usuário normal.

Para desligar o computador:

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

Versão simplificada:

#!/bin/bash

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

shutdown -h +30;

Versão muito simplificada (não recomendada):

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

Para suspender o computador:

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

Versão simplificada:

#!/bin/bash

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

Versão muito simplificada:

#!/bin/bash

sudo -u eka gnome-screensaver-command -a

Observação: $0 é uma variável que contém o caminho completo para o script.

    
por Helio 22.05.2015 / 19:47