我正在运行Ubuntu 11.10(Unity界面),我创建了一个使用'gnome-open'打开我每天早上使用的一系列网页的Bash脚本。当我在终端中手动执行脚本时,bash脚本工作得很好。这是一个脚本示例(它完全相同所以我缩短了它):
#!/bin/bash
gnome-open 'https://docs.google.com';
gnome-open 'https://mail.google.com';
由于它似乎运行良好,我在我的crontab(我的,而不是root)中添加了一个作业,以便在特定时间的每个工作日执行。
这是crontab条目:
30 10 * * 1,2,3,4,5 ~/bin/webcheck.sh
问题是在bash脚本中为每个'gnome-open'命令返回此错误:
GConf-WARNING **:客户端无法连接到D-BUS守护程序: 如果没有$ DISPLAY for X11,则无法自动启动dbus-daemon GConf错误:没有D-BUS守护程序正在运行 错误:未指定显示
我做了一些搜索试图弄清楚这一点。我尝试的第一件事是使用SIGHUP重新启动守护进程:
killall -s SIGHUP gconfd-2
这没用,所以我尝试使用dbus-launch手册页中的代码启动dbus-daemon:
## test for an existing bus daemon, just to be safe
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
## if not found, launch a new one
eval `dbus-launch --sh-syntax --exit-with-session`
echo "D-Bus per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
fi
但那没有做任何事情。
我尝试在我的bash脚本顶部添加简单的'dbus-launch',但这也不起作用。
我也尝试编辑crontab以包含Bash的路径,因为我在另一个线程上看到了这个建议但是没有用。
关于如何启动并运行的任何想法?
答案 0 :(得分:3)
问题是如何解决的。事实证明,问题主要是由于Bash无法访问X窗口会话(或者至少是我理解它的方式)。所以通过编辑我的crontab解决了我的问题:
30 10 * * 1,2,3,4,5 export DISPLAY=:0 && ~/bin/webcheck.sh
“export DISPLAY =:0”语句告诉cron使用哪个显示器。在搜索“没有指定显示”之后,我在这个存档的Ubuntu论坛上找到了答案:
http://ubuntuforums.org/archive/index.php/t-105250.html
所以现在,每当我登录时,正好在10:30,我的系统将自动启动一系列我每天需要查看的网页。每次我都要经历艰难的输入我的三个字母别名的过程,这样我就不用了。)
答案 1 :(得分:2)
很高兴你问过!
这取决于它何时运行。
如果Gnome GDM Greeter处于活动状态,您可以使用登录对话框中的DBUS会话。例如,如果没有人登录,您可以使用此功能将通知发送到登录屏幕:
function do_notification
{
for pid in $(pgrep gnome-session); do
unset COOKIE
COOKIE="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ|cut -d= -f2-)"
GNUSER="$(ps --no-heading -o uname $pid)"
echo "Notifying user $GNUSER (gnome-session $pid) with '$@'"
sudo -u "$GNUSER" DBUS_SESSION_BUS_ADDRESS="$COOKIE" /usr/bin/notify-send -c "From CRON:" "$@"
done
unset COOKIE
}
正如您所看到的,上面的代码只是在所有可用的gnome-sessions上运行相同的命令(notify-send
),如下所示:
do_notification "I wanted to let you guys know"
您可以将它拆开并将其用于您自己的目的。