3

有没有办法在服务器上执行程序,例如:Firefox、Gimp 等。

我的概念是能够在我的手机上登录我的本地 LAMP 服务器,在文本框中输入命令(例如:/usr/bin/firefox)并按下一个按钮,该按钮使用 post 方法将命令字符串发送到另一个在我的服务器上启动程序的 PHP 脚本。这会很好,所以当我在路上并想要启动“firefox http://www.blahblah.net ”并打开firefox回到我的电脑时。是的,我知道安全问题,但这只是一个概念验证。

我已经尝试了 exec() 和 system() 命令,但它们似乎不起作用....我做错了什么吗?

#!/usr/bin/env ruby

require 'rubygems'
require 'sinatra'

disable :protection # not needed on something this simple
set :port, 11111    # think 1APPX

get '/' do
# this handles both apps (via ?app=...) and files (via ?file=...)

if params[:app] then
    # as a side effect, this also happens to actually run the app, which is
    # pretty much what we wanted in the first place
    @fn = params[:app][1..-2];
    `/usr/bin/env #{@fn}`
elsif params[:file] then
    # bugfix, remove quotes...
    @fn = params[:file][1..-2];
    # xdg-open anyone?
    puts "DEBUG /usr/bin/env xdg-open #{@fn}";
    `"/usr/bin/env xdg-open #{@fn}"`
else
    # nothing...
    404
end

end

not_found do
status 404
"Application #{@fn} not found. Usage: /?app=\"[appname]\" or /?file=\"[filename]\""
end
4

4 回答 4

3

不要为此使用 Web 应用程序。安全障碍很多,需要广泛的 Linux 系统管理知识才能实现。

我的建议是为您的手机获取一个 SSH 客户端——它们适用于 Android 和 iOS,并通过 SSH 连接到您的计算机。您还可以为这两个平台获取 VNC 客户端,这样您就可以直接在 GUI 上进行操作,而无需诱使 X11 在您实际上并未查看的显示器上启动应用程序。

于 2012-06-01T02:57:45.400 回答
2

首先,您应该使用将要登录的用户来运行您的 apache 服务器。接下来,您应该执行:

<?php
system("export DISPLAY=:0; /usr/bin/firefox;");

我在这里测试并工作

于 2012-06-01T03:27:24.123 回答
1

我会考虑编写一个“userland”守护程序,它在系统托盘中运行,侦听 HTTP(或 HTTPS)请求并打开相应的程序。

于 2012-06-01T02:58:07.320 回答
1

您需要指定完整路径

exec('/full/path/to/firefox http://google.com');
于 2012-06-01T03:00:12.390 回答