Вопрос Сценарий Bash с использованием `sudo` выполняется корректно из cli, но не при нажатии на него


Я пытаюсь запустить простой скрипт bash, когда я нажимаю на него. Он отлично работает от cli, но начинает motion с sudo не запускается. У меня есть эта настройка скрипта с sudoers уже для nopasswd, она запускается правильно и не запрашивает пароль при запуске из cli. Он также полностью закрывает все, когда бегает от cli, но это почти похоже на sudo строки пропускаются, когда я просто дважды щелкаю по файлу и говорю ему, чтобы он запускался.

Вот мой сценарий:

#!/bin/bash

check_process() {
  [ "$1" = "" ]  && return 0
  [ `pgrep -n $1` ] && 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

2
2017-08-02 04:51


происхождения


попробуйте заменить «sudo» на «gksu». - Sudheer


ответы:


В Nautilus у вас есть два варианта запуска скрипта при двойном нажатии на него:

Run a script from Nautilus

1. Запуск в терминале

  • Используя этот параметр, ваш скрипт будет работать правильно (как вы сказали).

2. Запустите

  • Используя эту опцию, вы должны использовать pkexec (или gksu если вы его установили) вместо sudo, Это связано с тем, что вы не можете запускать графические команды, которые используют sudo без использования эмулятора X-терминала, даже если вы установите sudo не запрашивать пароль.

  • Итак, в этом случае ваш скрипт должен выглядеть так:

    #!/bin/bash
    
    check_process() {
      [ "$1" = "" ]  && return 0
      [ `pgrep -n $1` ] && 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
    

2
2017-08-02 10:24



переход на pkexec действительно работал, но все равно приходится вводить пароль каждый раз. Не ужасно, но я надеялся сделать пусковую установку, которую я только что нажал, чтобы включить и выключить движение. Есть ли способ сделать это, поэтому мне не нужно каждый раз вводить мой пароль? - user311472
@ user311472 Вам не нужно вводить пароль каждый раз если вы выполните следующий ответ: Как настроить pkexec, чтобы не запрашивать пароль? :) - Radu Rădeanu
работает отлично! большое спасибо. - user311472