尝试在第二台机器上启动 GUI 进程

尝试在第二台机器上启动 GUI 进程

背景

我正在帮助当地一所大学利用闲置的计算机/屏幕创建媒体墙,以便使用 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 传统,即显示所在的计算机是服务器因为它使其显示可供在上运行的多个程序使用客户机器。

这可能看起来是倒退的,因为您可能习惯于将您正在使用的机器作为“客户端”,而将藏在壁橱里的机器作为“服务器”。

相关内容