Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个登录用户的桌面上用PHP执行shell命令_Php_Linux_Apache - Fatal编程技术网

在另一个登录用户的桌面上用PHP执行shell命令

在另一个登录用户的桌面上用PHP执行shell命令,php,linux,apache,Php,Linux,Apache,设置: 我有一个LAMP服务器(Ubuntu9.10),它也连接到我的HDTV上。引导时,一个用户将自动登录,以便在屏幕上显示桌面环境 我想要的是: 我一直在用PHP开发一个远程web界面,用于各种用途(例如播放音乐)。然而,我遇到了一个障碍,我想运行一个窗口程序并在电视上显示它。显然,由于PHP/Apache是在用户www数据下运行的,因此仅通过exec()运行我的命令是不会发生这种情况的 是否有一个Linux命令可以将其作为其他用户当前登录的会话运行,或者有一个程序可以使用DISPLAY变量

设置: 我有一个LAMP服务器(Ubuntu9.10),它也连接到我的HDTV上。引导时,一个用户将自动登录,以便在屏幕上显示桌面环境

我想要的是: 我一直在用PHP开发一个远程web界面,用于各种用途(例如播放音乐)。然而,我遇到了一个障碍,我想运行一个窗口程序并在电视上显示它。显然,由于PHP/Apache是在用户www数据下运行的,因此仅通过exec()运行我的命令是不会发生这种情况的

是否有一个Linux命令可以将其作为其他用户当前登录的会话运行,或者有一个程序可以使用DISPLAY变量确定要连接到哪个X会话。如果这是一个单用户框,则需要确定用户当前拥有的X会话:0

然后您可以编写一个简单的bash脚本 1.设置显示(以及其他需要的变量) 2.执行

--


另一种解决方案是将必要的信息写入平面文件,然后让cron作业每隔一秒或三秒检查一次更新。可以将cron配置为作为指定用户运行。难看,但应该可以工作。

正如mataisf所说,您需要设置DISPLAY变量,以便程序知道在哪里生成窗口。但是,有一个身份验证系统可以防止未经授权的程序访问X服务器(键盘、屏幕和鼠标所在的位置)。解决此问题的一种方法是让从本地计算机连接的任何程序都可以访问:

xhost +localhost
…但更好的解决方案是在用户登录时运行程序。有很多不同的方法可以做到这一点,但最实际的可能是通过sudo,例如

sudo -u console_user program
请注意,在执行此操作之前,您可能希望设置HOME变量,以便xauth正常工作(可以使用sudo的-H标志执行此操作)

注意,您需要在/etc/sudoers文件中配置程序、控制台用户和web服务器用户

C