我正在尝试在某些情况下显示通知。我看到你可以用system()函数来做这件事。除非我不能让它工作;)。
error_reporting(E_ALL);
system("notify-send 'Text here?'");
system('notify-send "Text here?"');有人能告诉我我哪里做错了吗?或者是我的设置错了?我想用notify-send和PHP在Ubuntu上创建通知
问候
发布于 2013-04-23 01:26:19
好的,尽管这已经解决了,但我想在这里添加一些注释/信息,
据我所知,问题应该是运行PHP的用户不是运行桌面会话的用户(gnome/kde/etc),因此PHP可执行文件没有在该屏幕上显示通知的权限。
对我来说,我通过让PHP可执行文件在拥有会话的同一个用户下运行来解决这个问题(例如,如果我的用户名是abc,我已经设置PHP在同一个abc用户下运行,并且我还必须使用export DISPLAY=:0导出显示。
所以我的整个exec/system调用是这样的
exec("export DISPLAY=:0; notify-send 'title' '$message' ")发布于 2013-11-23 15:58:34
我将导出显示方法转换为/usr/bin脚本。我通过远程ssh在系统中对它进行了测试,并在bash脚本/crons中成功地使用了它。http://pastebin.com/h11p2HtN我很好奇的是如何在登录屏幕上显示桌面通知。如果能显示一些关于init脚本的信息,那就太好了。
发布于 2014-03-31 22:42:36
我试着用php来解决这个问题,但我在这里看到的每个解决方案都很糟糕,要么以用户身份运行apache,要么导出显示,等等。
我用node.js写了这个小脚本,它的优点是由桌面用户运行,不需要导出额外的环境变量:
安装框架(应该很容易下载,配置,制作,运行此应用程序的目录,例如mkdir ~/message
现在您可以触发类似于localhost:5555/?message=Hello+World的请求
在我浪费了几个小时尝试用apache、php、cgi或其他任何工具来获得它之后,这对我来说很有效。
脚本:
var express = require('express');
var app = express();
var sys = require('sys');
var exec = require('child_process').exec;
var child;
app.get('*', function (req, res) {
res.contentType('text/html');
res.send(200, '');
child = exec("/usr/bin/notify-send 'Message' '" + req.query.message + "'", function (error, stdout, stderr) {});
});
app.listen(5555);https://stackoverflow.com/questions/16132745
复制相似问题