Итак, у меня есть сценарий для установки программного обеспечения, но сценарий необходимо запускать от имени пользователя 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
чтобы всегда использовать графический интерфейс для запроса пароля, даже если он запущен в терминале.