我需要的是允许远程用户通过 VNC 访问主机 (Ubuntu)。问题是,用户只能使用特定软件,不能使用其他任何软件。
我目前的解决方案是使用 x-gtk-vnc 在客户端的 html 页面中嵌入特定的 Xwindow。这可行……但弹出选项不会在客户端注册(因为它们被视为单独的窗口)。
可能的解决方案 #1 是使用脚本来报告新窗口何时打开。但是,我不知道有任何 shell 命令可以做到这一点(xwininfo 要求您选择一个窗口),而且我可能必须将大量可能的弹出窗口硬编码到 html 中。
可能的解决方案 #2 围绕创建一个裸虚拟桌面展开,其中感兴趣的软件作为主应用程序运行(不能最小化或关闭,没有任务栏等...),并且所有弹出菜单都出现在前台。不幸的是,我不知道如何做到这一点。我也可以使用嵌入在 html 中的 x-gtk-vnc 连接到特定桌面。
有人能用这两种解决方案给我指出正确的方向吗?我个人更喜欢 #2。也欢迎其他解决方案。
答案1
解决方案 2 会容易得多。
假设您正在使用vnc4viewer
Ubuntu 附带的软件包,只需编辑~/.vnc/xstartup
远程用户将在其下运行的用户帐户的脚本并将其替换为以下内容:
/bin/bash #!/bin/bash 函数 start_and_wait { #将您需要运行的程序的命令行放在这里,后面跟着 #ampersand (&)。例如,我们将启动 gedit: 编辑 & 等待$! 开始并等待 } [ -x /etc/vnc/xstartup ] && 执行 /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot-纯灰色 元城市 & 开始并等待
metacity
这将自动启动 GNOME 的窗口管理器,因此可以合理地处理弹出窗口。(如果需要,它们甚至可以Alt+Tab来回移动。)虽然用户可以最小化和调整窗口大小,但它只会为用户提供一个无法执行任何操作的空桌面。没有面板、没有菜单、没有图标,什么都没有。如果程序因任何原因退出,脚本还会重新启动程序。
完成这些后,只需启动即可vncserver
。您可以将此命令放入文件中/etc/rc.local
(或编写适当的启动脚本),exit 0
在每次启动时启动服务器的行之前:
su username -c "vncserver :7"
这将在桌面(端口 5907)上启动服务器,:7
因此您可能启动的任何其他 VNC 服务器都不会妨碍您,并且您将有一个可预测的桌面号码放入 HTML 文件中。
确保为远程用户使用单独的用户帐户,并且该帐户已充分锁定,因为即使他们只能访问一个程序,他们仍然可以通过多种方式进一步访问系统。(文件对话框、可能打开 shell 的命令等)
请注意,虽然可以使用任何窗口管理器,并且大多数人会使用简单的窗口管理器twm
(或现在孩子们正在使用的任何窗口管理器),但我坚持使用metacity
它,因为它默认包含在内,并且使事情保持简单。