背景:
我正在帮助当地一所大学利用闲置的计算机/屏幕创建媒体墙,以便使用 processing.org/java 在多台机器上分发渲染。但是,它仍然有问题,我需要偶尔重启客户端。
问题:
我目前无法弄清楚如何从服务器远程重新启动客户端 Java 应用程序。注意:客户端直接连接到双屏幕 - 而不是无头渲染
调查:
我在 AWS/EC2 上重新创建了一个类似的环境,我可以让客户端-服务器模型工作,但无法远程启动 GUI 客户端。我不断收到:
无法打开显示。
具体问题:
目前我使用以下服务器:
ssh ubuntu@guiclient1 “导出 DISPLAY=:0; cd ~/wallclient/; xclock &”
额外的:
我使用 x2go 监控同一个 guiclient1 桌面。我没有进行任何特定的 xauth / xhost 配置 - 因为还没有看到与此相关的任何问题。
我应该进行哪些不同的配置?我在网上没有找到太多帮助 - 我不想将端口转发回服务器,这是大多数问题的答案。
谢谢
答案1
用于通过网络直接连接 X
X 有一个权限模型,允许远程客户端{*}使用特定的显示器。阅读手册页xhost
,但简短版本是
server$ xhost remote_client
以交互方式允许remote_client
使用您的屏幕。
然后在客户端运行
client$ xeyes
直接 ssh
通过 ssh 连接则是另一回事。您应该使用-X
或-Y
或在 .ssh/config 中设置相应的值(ForwardX11
对于 -X)。然后您的 ssh 客户端应该设置正确的值DISPLAY
,您不应该弄乱它。
server$ ssh -X client
client(by ssh)$ printenv DISPLAY
localhost:10.0
client(by ssh)$ xeyes
隧道 ssh
使用类似以下命令打开防火墙隧道
server$ ssh -X -L 1111:client:22 user@firewall
然后在另一个 shell 中
server$ ssh -X -p 1111 user@localhost
client(by ssh)$ printenv DISPLAY
localhost:10.0
client(by ssh tunnel)$ xeyes
(再次注意-X
)打开在 上运行的 shell destination
。与直接 ssh 连接一样,您的DISPLAY
变量应该已经为您设置。
{*} 在这里我遵循 X 传统,即显示所在的计算机是服务器因为它使其显示可供在上运行的多个程序使用客户机器。
这可能看起来是倒退的,因为您可能习惯于将您正在使用的机器作为“客户端”,而将藏在壁橱里的机器作为“服务器”。