kdialog индикатор выполнения "объект не доступен" как root
У меня есть скрипт, содержащий много команд, которым нужны права root. Вместо запуска всех этих команд с помощью sudo внутри сценария, я предпочитаю запускать весь сценарий с помощью sudo. Это также удобнее поместить в файл sudoers.
sudo ./script.sh
Тем не менее, я хотел бы показать прогресс с индикатором выполнения kdialog, который не работает. Появляется окно сообщения, содержащее панель, но при попытке обновить ход выполнения появляется сообщение об ошибке "объект недоступен".
dcopRef=`kdialog --progressbar "Initialising..." 5` # works
dcop $dcopRef setProgress 1 # error object not accessible
Я уверен, что это связано с правами пользователя, так как штрих-код выполнения работает, затем вызывает скрипт без sudo, но я не знаю, с чего начать. Кто-нибудь знает, как это исправить и все-таки вызывать скрипт с помощью sudo?
Я использую openSUSE 10.3 с KDE 3.5.7
Спасибо Крис
1 ответ
Наконец-то я нашел способ решить мою проблему! Это не красиво, но это работает...
Внутри файла "script.sh" вы получаете доступ к индикатору выполнения как первоначальный (не root) пользователь с помощью sudo:
dcopRef=`sudo -H -u $SUDO_USER kdialog --progressbar "Initialising..." 5`
dcop sudo -H -u $SUDO_USER $dcopRef setProgress 1
Вы должны явно разрешить root использовать вызовы "kdialog" и "dcop" в качестве пользователя (хотя это кажется немного странным), сначала добавив это в файл sudoers:
root ALL = (ALL) NOPASSWD: /opt/kde3/bin/
Вуаля.