X11 转发 - 抓取已经运行的程序窗口

Cha*_*oon 6 linux ssh

如果我通过 ssh 进入一台机器,如果我启用 X11 转发,我可以运行图形应用程序 - 我从命令行运行gedit,gedit 作为一个窗口弹出。我的问题是:有没有办法为已经在运行的应用程序弹出一个窗口?

示例:假设我有两台机器,A 和 B。我在 A 上打开 gedit,然后输入some text并离开。然后我从 B ssh 进入 A。如果我运行,gedit我将生成另一个进程。我可以访问已经运行的 gedit 进程(使用some text)吗?或者这是vnc的工作?

Kam*_*ski 6

不是真正的“抓取已经运行的程序的窗口”的解决方案,但仍然......

使用xpra.

在 X11 上,它也被称为 X11 的屏幕:它允许您运行程序,通常在远程主机上,将它们的显示定向到您的本地机器,然后与这些程序断开连接并从同一台或另一台机器重新连接,无需失去任何状态。

[…]

Xpra 还允许转发声音、剪贴板和打印服务。会话可以通过 SSH 访问,或者通过带有或不带有 SSL 的普通 TCP 套接字进行密码保护。

它必须事先安装、配置和启动,就像screentmux用于控制台应用程序一样。您必须xpra首先通过 运行您的程序,然后您才能实现从不同机器(重新)连接的魔力。

xpraxpra至少在 Debian 和 Ubuntu 中可以作为软件包使用。我已经用过几次了。性能优于普通 X 转发。

例子在这里。以下内容来自man xpra我的 Kubuntu:

xpra start :7
Run Code Online (Sandbox Code Playgroud)

xpra使用 display number启动服务器:7

DISPLAY=:7 firefox
Run Code Online (Sandbox Code Playgroud)

开始firefoxxpra服务器内部运行。在xpra启动的主机上或在由xpra. 在使用 附加之前不会出现任何窗口xpra attach

你在你的 A 上运行上面的例子。 然后你可以直接从 A 附加:

xpra attach :7
Run Code Online (Sandbox Code Playgroud)

附加到xpra使用本地显示号码的服务器:7。在该服务器上运行的任何应用程序都会出现在您的屏幕上。

或来自您的 B:

xpra attach ssh:foo@frodo:7
Run Code Online (Sandbox Code Playgroud)

使用ssh附加到xpra正在机器上运行的服务器frodo的用户foo和使用显示器:7。在该服务器上运行的任何应用程序都将显示在您的本地屏幕上。