如何从SSH启动X应用程序

我试图在谷歌搜索这个主题,但没有任何重大结果。

我需要从终端启动一些GUI应用程序,但我不在乎这个应用程序向我展示了什么。 另外,我需要在不同的会话中启动此应用程序的几个实例。 它与一些GUI自动化测试相关联,所以我知道我想要什么,我正在寻找答案:)。

我认为适当的步骤应该是:

  1. 初始化新的X窗口会话
  2. 获取我的新会话ID
  3. 将其导出到env变量(导出显示:13.0)
  4. 运行我的应用程序

但我第一步陷入困境。 这里有人有类似的问题吗?

—编辑:1)我不关心GUI输出 – 我只需要我的应用程序中的stdout和stderr。 – 这就是为什么这个问题不重复 – 知道谷歌好:)。 我不想将输出重定向到我自己的GUI。

如果您不关心应用程序正在执行的操作,可以使用xvfb为其提供“虚拟”x服务器:

Xvfb提供的X服务器可以在没有显示硬件且没有物理输入设备的机器上运行。 它使用虚拟内存模拟哑帧缓冲。 此服务器的主要用途是用于服务器测试,但已发现其他新用途,包括针对exception深度和屏幕配置测试客户端,使用Xvfb作为后台渲染引擎进行批处理,负载测试,作为辅助将X服务器移植到一个新平台,并提供一种不引人注目的方式来运行不需要X服务器但仍然坚持使用X服务器的应用程序。

安装后,您可以启动它:

sudo Xvfb :10 -ac -screen 0 1024x768x24 & 

它将在后台运行,然后您启动您的客户:

 DISPLAY=:10 your-client 

一个简短的命令:

 ssh -X @ gedit & 

来自man ssh

 -X Enables X11 forwarding. This can also be specified on a per-host basis in a configuration file. X11 forwarding should be enabled with caution. Users with the ability to bypass file permissions on the remote host (for the user's X authorization database) can access the local X11 display through the forwarded connection. An attacker may then be able to perform activities such as keystroke monitoring. 

  1. 检查服务器端的/etc/ssh/sshd_config

     sudo nano /etc/ssh/sshd_config 

    对于以下行:

     X11Forwarding yes X11UseLocalhost no 

    如果您进行了更改,请重新启动ssh srever:

     sudo service ssh restart 
  2. 检查客户端上的/etc/ssh/ssh_config

     sudo nano /etc/ssh/ssh_config 

    对于下面的行

     ForwardX11 yes ForwardX11Trusted yes 

您只需要在ssh会话中运行export DISPLAY =:id#,程序运行将在远程显示器上运行。 一个简单的例子:

 maythux@maythuxPC:~$ ssh testSSH@myServer maythux@maythuxPC:~$ export DISPLAY=:0 maythux@maythuxPC:~$ gedit 

现在gedit将在名为testSSH display的用户上运行

您可以将这一切缩短为单个命令:

 ssh testSSH@myServer "DISPLAY=:0 nohup gedit"