同样的方式https://askubuntu.com/questions/364458/running-gui-app-with-php,我需要从 Apache 服务器上的 php 页面运行 X11 应用程序(VLC)。
我需要在服务器上打开 VLC 应用程序,而不是在远程系统上。
我正在尝试通过 php shell_exec 调用包含 VLC 命令的 shell 脚本来获取它。
如果从命令行启动,sh 脚本可以正确打开 VLC 应用程序,但不能通过 php 调用启动,因为它没有找到(我认为)任何已启动的 X11 会话:它返回相关的错误消息:
- inhibit interface error: Failed to connect to the D-Bus session daemon: //bin/dbus-launch terminated abnormally with the following error: No protocol specified
- Autolaunch error: X11 initialization failed.
- main interface error: no suitable interface module
- xcb_xv vout display error: parent window not available
- ...
如果我授予 apache 用户 www-data 连接到 X 服务器
xhost +local:www-data
它适用于视频但不适用于音频;窗口可以打开并播放视频,但没有声音,并且还有其他与音频服务器相关的错误消息...
export DISPLAY=:0 似乎没有任何效果。
任何帮助,将不胜感激。
答案1
是否在与 PHP 相同的计算机上运行 X 服务器?如果是这种情况,您可以* 以与 X 服务器所有者相同的用户身份运行 PHP 进程(通过编辑/etc/apache2/apache2.conf
),然后将显示标识符链接到命令上:
shell_exec("DISPLAY=:0 vlc ....");
您还可以使用putenv
(IIRC)从 PHP 设置环境变量。
*但在你这样做之前,请考虑这样做的安全后果。如果 PHP 运行的某些东西被泄露(这种情况经常发生),会造成什么损害可以那可以吗?