如果我通过 ssh 进入一台机器,只要启用 X11 转发,我就可以运行图形应用程序 - 我gedit
从命令行运行,然后 gedit 会弹出一个窗口。我的问题是:有没有办法让已在运行的应用程序弹出一个窗口?
示例:假设我有两台机器,A 和 B。我在 A 上打开 gedit,输入并some text
离开。然后我从 B ssh 进入 A。如果我运行,gedit
我只会生成另一个进程。我可以访问已经运行的 gedit 进程吗(使用some text
)?或者这是 vnc 的工作?
答案1
这并不是真正意义上的“抓取已在运行的程序的窗口”的解决方案,但仍然......
使用xpra
。
在 X11 上,它也被称为 X11 的屏幕:它允许您运行程序(通常在远程主机上),将其显示直接发送到本地计算机,然后断开与这些程序的连接并从同一台或另一台计算机重新连接,而不会丢失任何状态。
[…]
Xpra 还允许转发声音、剪贴板和打印服务。会话可以通过 SSH 访问,或通过带或不带 SSL 的普通 TCP 套接字进行密码保护。
必须事先安装、配置和启动它,就像控制台应用程序screen
一样tmux
。您必须xpra
首先通过 运行程序,然后才能从不同的机器进行(重新)连接。
xpra
至少在 Debian 和 Ubuntu 中以软件包形式提供xpra
。我用过几次。性能比普通的 X 转发更好。
例如这里。以下内容取自man xpra
我的 Kubuntu:
xpra start :7
xpra
使用显示号启动服务器:7
。DISPLAY=:7 firefox
在服务器内开始
firefox
运行。在启动的xpra
主机上或通过 转发的终端上运行此程序。除非您使用 附加,否则不会出现任何窗口。xpra
xpra
xpra attach
你在 A 上运行上述示例。然后你可以直接从 A 连接:
xpra attach :7
连接到
xpra
使用本地显示号的服务器:7
。该服务器上运行的任何应用程序都将出现在您的屏幕上。
或者从你的 B:
xpra attach ssh:foo@frodo:7
使用以用户身份
ssh
连接到xpra
计算机上运行的服务器并使用 display 。该服务器上运行的任何应用程序都将出现在您的本地屏幕上。frodo
foo
:7