O script Bash usando 'sudo' é executado corretamente a partir do cli, mas não quando clicado para executar

2

Estou tentando fazer um script simples executar quando clico nele. Ele roda perfeitamente a partir do CLI, mas a inicialização de motion com sudo falha ao iniciar. Eu tenho essa configuração de script com sudoers já para nopasswd, ele inicia corretamente e não pede senha quando executado a partir de cli. Ele também fecha tudo corretamente quando executado a partir do cli, mas é quase como se as linhas sudo fossem puladas quando eu apenas clico duas vezes no arquivo e digo para ele executar.

Aqui está o meu script:

#!/bin/bash

check_process() {
  [ "" = "" ]  && return 0
  [ 'pgrep -n ' ] && return 1 || return 0
}

check_process "motion"
if [ $? -eq 0 ]
then
  sudo /etc/init.d/motion start
  firefox http://localhost:8081/ > /dev/null &
else
  sudo /etc/init.d/motion stop
  killall firefox > /dev/null &
fi
    
por user311472 02.08.2014 / 06:51

1 resposta

2

No Nautilus, você tem duas opções para executar um script ao clicar duas vezes nele:

1. Correr no Terminal

  • Usando essa opção, seu script será executado corretamente (como você disse).

2. Executar

  • Usando essa opção, você tem que usar pkexec (ou gksu se você tiver instalado) em vez de sudo . Isso porque você não pode executar comandos gráficos que usam sudo sem usar um emulador de terminal X, mesmo se você definir sudo para não solicitar senha.

  • Então, neste caso, seu script deve se parecer com:

    #!/bin/bash
    
    check_process() {
      [ "" = "" ]  && return 0
      [ 'pgrep -n ' ] && return 1 || return 0
    }
    
    check_process "motion"
    if [ $? -eq 0 ]
    then
      pkexec /etc/init.d/motion start
      firefox http://localhost:8081/ > /dev/null &
    else
      pkexec /etc/init.d/motion stop
      killall firefox > /dev/null &
    fi
    
por Radu Rădeanu 02.08.2014 / 12:24