是否可以在不通过 rdp 会话的情况下启动 gui 应用程序

是否可以在不通过 rdp 会话的情况下启动 gui 应用程序

我有一个 Ubuntu 20.04 Linux 设置,其中安装了 xfce、xorg 和 xrdp。我的目标是在图形环境中运行一个应用程序,进行一些点击,监控其性能,然后在一段时间后关闭它。

我可以使用 RDP 会话来完成此操作,方法是在远程机器的终端上运行“app.sh”。但我希望这个过程更加自动化,并且应用程序可以使用远程 ssh 启动,而无需执行 RDP 会话。不幸的是,我对 Linux 不够熟悉,不知道从哪里开始。

到目前为止我已经尝试过什么:

  1. 仅从远程 ssh 运行“app.sh”会导致“无法检测图形环境”错误。
  2. 使用“xinit app.sh 'displayconfig'”命令。应用程序似乎运行了,但应用程序用户界面似乎没有在远程机器上初始化(或者至少我无法检测到它)

就我的目的而言,我并不关心显示会话或 rdp 会话是否处于活动状态(如果我的术语有误,请纠正我)。我的唯一目标是在远程机器上启动应用程序,向某些 (X,Y) 坐标发送点击事件,然后关闭应用程序。我并不想真正看到实际的 UI。

编辑1:预期行为(为了清晰起见):

  1. 我通过 ssh 连接到远程机器
  2. 我运行一些命令来启动远程服务器上的应用程序
  3. 应用程序在远程服务器上启动(带有用户界面和所有内容)
  4. 我没有在本地机器上看到 UI,但它正在远程运行
  5. 我向一些 (X,Y) 坐标发送一个点击事件(我有一个用于该目的的 Python 脚本)
  6. 我监控应用程序的性能(云设置帮我完成这项工作)
  7. 一段时间后我关闭了应用程序
  8. 我关闭了 ssh 连接

可能相关:我的应用程序是基于 Java Swing 的应用程序,我正在使用 JVMTI 来检测 UI

编辑2:我将尝试进一步解释我的设置,因为提供的答案做出了错误的假设:

我有 2 台 Linux 服务器:服务器 A 和服务器 B。服务器 A 充当存储库(没有图形或任何东西),其中上传了同一应用程序的不同版本。一旦上传了我的应用程序的新版本,服务器 A 就会将该版本上传到服务器 B,并删除旧版本(这部分我已经弄清楚了)。现在服务器 B 安装了一些图形。我需要服务器 A 向服务器 B 发送一些命令来启动应用程序,就像它是使用 GUI 的用户(人类)一样。现在服务器 A 没有任何显示,所以我无法将 GUI 转发到任何地方。到目前为止,我有一个“app.sh”文件,可以使用 RDP(从 Windows 机器)连接来启动应用程序。不幸的是,这不是生产选项。我需要某种方式从服务器 A 启动服务器 B 上的图形环境并在那里运行应用程序,或者只是有一些在服务器 B 上有图形环境的“始终开启”会话,并以某种方式使用该会话从服务器 A 启动我的应用程序。我实际上并不需要 GUI 的视觉反馈,因为我不需要看到它,也不会为它提供任何物理显示,它可以在服务器 B 上纯粹虚拟/模拟,或者如果有一种方法可以在没有它的情况下“单击按钮”,它可能会完全消失。

截图(出于保密原因已删除):

  1. 使用 RDP 会话运行的应用程序 您可以看到:打开 RDP 会话,应用程序在后台运行(在终端后面,而不是作为后台进程),终端 2 通过调用“app.sh”启动应用程序,终端 1 向应用程序发送“list ui”命令。一切正常

  2. SSH 连接,尝试执行与之前相同的命令(请记住,生产中没有可用的物理显示/桌面屏幕

您能看到什么:一个打开的 SSH 连接,尝试调用与之前相同的“app.sh”。

更多信息:运行“echo $XDG_CURRENT_DESKTOP”:

  1. 在 RDP 会话中:> 'XFCE'
  2. 在 SSH 会话中:>''

这可能吗?请随时索取更多信息

答案1

使用以下命令启动 ssh: 并提供登录凭据。例如,使用其命令启动 X11 软件(可以使用 & 来保留提示符)。要在 Windows 10/11 环境中启动程序,最推荐的是具有 GUI 支持的 WSL2。Windows 的其他选项是 Xming (ssh -Y [email protected]xclockhttps://sourceforge.net/projects/xming/)。在 Linux 系统上,只需使用 -Y 进行 ssh 并启动程序。必须在目标计算机(启动程序的地方)中启用 X11 转发,方法/etc/ssh/sshd_config是在文件中删除 X11Forwarding yes 中的 #(如果没有则更改为 yes)。良好做法是在客户端启用转发(/etc/ssh/ssh_config)ForwardX11 yes。记得通过 重新启动 ssh sudo systemctl restart ssh

答案2

从你的评论来看,

我不想在本地看到用户界面。如果需要,它可以出现在远程机器上,我只是不想看到它。我想要一个在某种意义上“在后台”启动的脚本,无需在本地机器上打开任何 UI进而将结果写入文件。如果 UI 确实在远程机器上运行,那就没问题。

听起来您想要对远程计算机上运行的软件进行命令行控制,到目前为止,该软件一直专门用于 GUI,以便您可以使用该软件自动执行某些任务。您想在远程计算机上执行命令并接收输出。

如果不知道该软件是什么,就不可能知道该软件的 CLI 命令是什么,但总体结构如下:

ssh user@remotemachine [command {flags, objects}] > /file/path/to/output/file/output.extension

例如,如果我想看文件系统远程计算机上的 IP 地址上的内容123.45.67.890,那么我会做以下事情:

ssh [email protected] cat /etc/fstab > /home/me/fstab.txt

对于您的情况,您需要找到您想要使用的软件的命令行命令。

相关内容