如何使用Crontab在DISPLAY = 0.0上向用户显示某些内容,或运行一个GUI程序

我真的希望能够使用crontab每3小时更新一次,但crontab不会运行足够的priveleges脚本运行我的脚本。

澄清:我有一个复杂的脚本,每3小时生成一个图片(基于当前可用的Web服务器内容) – 我想让它显示它正在做什么,我知道它是否失败。

我已经试过了:1.添加一个文件到/etc/cron.d/myscript以供cron运行2.变种的xdg-open,gnome-terminal,mrxvt -e,env DISPLAY = 0.0,root / usr / local / bin / myscript 3.编辑我的用户cron – crontab -u username -e

Myscript是一个复杂的小野兽,下载一张图片(每半小时更新一次),然后下载一个不同的网站的网页作为index.html – sed的它,find它需要的特定图像(基于今天的date和时间),然后作物和变换它与imagemagick。

 man xauth man xhost 

你可以尝试xhost local:作为开始。

如果你想在用户的桌面上打开一个窗口,你需要从你的用户上下文中导出X11authentication信息,并把它提供给你的根上下文。

作为用户,导出xauth信息:

 $ xauth extract /home/foo/xauth-foo $DISPLAY $ echo $DISPLAY :0.0 

然后,以root身份导入并启动您的X客户端:

 # xauth merge /home/foo/xauth-foo # export DISPLAY=:0.0 # xclock 

这是从我的笔记未经testing。 至less5年我没有用过这个用例。

我实际上是自己问了这个问题,并在得到一些指导之后设法回答这个问题 ( 来源1和来源2 )。 但是,这是对于树莓派,所以你可能需要使用一些其他的命令。

gnome-terminal -e command

xterm -e command

konsole -e command

terminal -e command

lxterminal -e command

通过使用命令lxterminal -e command ,我可以使terminal打开一个新的窗口。 但是这并不是所有需要做的事情。 指定path而不是依赖crontab中的环境variables…而我已经在使用PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin所以我就跟着去了 然后创build一个简单的脚本在crontab中使用,调用另一个脚本。

 #!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin export DISPLAY=:0.0 lxterminal -e /home/pi/Public/./test 

Crontab(命令crontab -e)最终看起来像…

 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin * * * * * /home/pi/Public/test2 

这就是最后的脚本testing。

 #!/bin/bash echo 'This is a test.' echo 'This is a written test with lxterminal -e for real.' >> /home/pi/Public/testwrite.txt sleep 10