1

我有一个脚本,其中包含许多需要 root 权限的命令。而不是在脚本中使用 sudo 运行所有这些命令,我​​更喜欢使用 sudo 运行整个脚本。这样放在sudoers文件里也比较舒服。

sudo ./script.sh

但是,我想用 kdialog 进度条显示进度,但它不起作用。显示包含该栏的消息框,但在尝试更新进度时出现错误消息“对象不可访问”。

dcopRef=`kdialog --progressbar "Initialising..." 5`  # works
dcop $dcopRef setProgress 1  # error object not accessible

我很确定这与用户权限有关,因为进度条代码有效,然后在没有 sudo 的情况下调用脚本,但我不知道从哪里开始。有谁知道如何解决这个问题并且仍然使用 sudo 调用脚本?

我正在使用带有 KDE 3.5.7 的 openSUSE 10.3

谢谢,克里斯

4

1 回答 1

0

终于找到了解决问题的方法!它并不漂亮,但它确实有效......

在“script.sh”文件中,您可以在 sudo 的帮助下以原始(非 root)用户身份访问进度条:

dcopRef=`sudo -H -u $SUDO_USER kdialog --progressbar "Initialising..." 5`
dcop sudo -H -u $SUDO_USER $dcopRef setProgress 1

您必须首先将其添加到您的 sudoers 文件中,从而明确允许 root 以用户身份使用 call 'kdialog' 和 'dcop' (尽管这看起来有点奇怪):

root  ALL = (ALL)  NOPASSWD: /opt/kde3/bin/

瞧。

于 2009-11-05T13:29:57.923 回答