9

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

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

如果我可以在运行时将gvim 从我的工作机器移动到我的家用机器上,则可以获得奖励积分。我尝试了 xmove,但永远无法让它发挥得很好。

4

2 回答 2

5

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

假设您的本地 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 更新它。

于 2009-03-22T13:08:11.253 回答
3

没有“简单”的方法可以更改外部进程中的环境变量。

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


要移动 X 应用程序,请查看类似X11vncXvnc.

于 2008-10-29T07:31:21.177 回答