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/

Вуаля.

Другие вопросы по тегам