SSH, screen and XDISPLAY

9
我使用screen来持久化我的工作会话,并从多台机器连接到同一个会话。如何设置SSH和screen,以便在我持久的screen会话中,XDISPLAY变量始终设置为我当前连接的机器?
例如,我在工作时启动screen会话并使用gvim,它使用运行在我的工作机器上的X服务器。稍后,我从家里连接到同一个会话,也想使用gvim。但是这一次,我希望gvim使用我家里机器上的X服务器。我意识到我可以手动更新XDISPLAY,每次从不同的机器连接,但我更愿意拥有自动化系统。
如果我能在gvim运行时将其从我的工作机器移动到我的家庭机器上,那就更好了。我尝试过xmove,但无法让它正常工作。
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使用。


3

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

一个直观的解决方案可能是将您的XDISPLAY持久化到登录文件中,并在打印下一个提示之前使用PROMPT_COMMAND读取此文件。


如果要移动X应用程序,请查看类似于X11vncXvnc之类的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接