我使用屏幕来保持我的工作会话并从多台机器连接到同一会话。如何设置SSH和屏幕,以便我的持久屏幕会话中的XDISPLAY变量始终设置为我当前连接的机器?

即。我在工作时启动屏幕会话并使用gvim,它使用在我的工作机器上运行的X服务器。后来,我从家里连接到同一个会话,也想使用gvim。但是这次,我希望gvim在家用机器上使用X服务器。我意识到每次从不同的机器连接时我都可以手动更新XDISPLAY,但我宁愿拥有自动化系统。

如果我能够 gvim从我的工作机器移动到我的家用机器上,那么

奖励积分。我试过 xmove ,但却永远无法让它发挥得很好。

有帮助吗?

解决方案

以下是手动解决方案,但没有理由你不能 使用别名或脚本在远程登录时自动完成。

假设您的本地shell适当地设置了DISPLAY变量, 你可以使用 screen -X 将以下的逗号发送到你的远程屏幕 连接。

# set future remote shells started by screen to have the correct XDISPLAY
% screen -X "setenv XDISPLAY $DISPLAY" #...

# set up the keystroke F1 to update the XDISPLAY in current shells
% screen -X "bindkey -k k1 stuff export XDISPLAY=$DISPLAY\015" #...

如果您知道所有窗口都留在shell中(不是正在运行的编辑器或其他类似),您可以使用:at 来更改 XDISPLAY 而不是密钥绑定:

# update the XDISPLAY in all current windows
% screen -X "at % stuff export XDISPLAY=$DISPLAY\015" #...

或者,如果您知道某种方法来获取父进程的环境变量值,那么您可以将它与shell的提示钩子一起使用来获取SCREEN的XDISPLAY值(由setenv设置)并为shell更新它。 / p>

其他提示

没有“平凡”的东西。在外国进程中改变环境变量的方法。

一个简单的解决方案可能是在登录时将 XDISPLAY 保存到文件中,并在打印下一个提示符之前使用 PROMPT_COMMAND 来读取此文件。


对于移动X应用程序,请查看 X11vnc 之类的内容或 Xvnc

我也对此答案感兴趣。是不是可以列出按时间排序的用户的SSH进程,并且cat可能是该进程的环境?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top