Назад | Перейти на главную страницу

Запустите сценарий от имени пользователя root из пользовательского графического интерфейса

Итак, у меня есть сценарий для установки программного обеспечения, но сценарий необходимо запускать от имени пользователя root.

Я создал значок рабочего стола в графическом интерфейсе (используя рабочий стол Ubuntu), где в идеале пользователь щелкнет этот значок, он запросит пароль, а затем запустит сценарий от имени пользователя root.

Пока что сценарий делает то, что задумано, если запускается от имени пользователя root, но не пользователя. Скрипт выглядит так:

 #!/bin/bash -l

zenity --question --text "This script will reboot after installation is complete" --title="Warning\!" 2> /dev/null
if [ $? = 0 ]; then
  install dependencies 
  dpkg -i package.deb
  etc
fi

reboot

Однако, если я нажимаю на значок для запуска сценария, он загружается и ничего не делает, тогда я проверяю журналы и понимаю, что он не работает: sudo: no tty present and no askpass program specified Я знаю, что могу изменять файлы sudoers, но я не хочу этого делать, так как мне нужно, чтобы этот пользователь оставался независимым.

Есть ли способ заставить при запуске скрипта попросить пользователя стать пользователем root? или заставить GUI запрашивать пароль? как лучше всего это сделать? Мне нужны пользователи для запуска этой программы, но мне нужно запускать программу от имени root, а sudo не делает этого по какой-либо причине.

В полученном вами сообщении об ошибке указано, что вам нужно сделать:

sudo: no tty present and no askpass program specified

Вам необходимо настроить программу askpass, чтобы она работала. Если вы еще не установили его, вам сначала нужно установить его. Это выглядит как ssh-askpass должно сработать.

sudo apt-get install ssh-askpass

Далее вам нужно настроить sudo использовать это. Это можно сделать через sudo.conf или переменная окружения. Поскольку вы пишете сценарий, я думаю, вы хотите использовать переменную среды. Я проверил эту команду:

SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A ls

Первая часть устанавливает переменную окружения. В -A аргумент силы sudo чтобы всегда использовать графический интерфейс для запроса пароля, даже если он запущен в терминале.