我使用屏幕来保持我的工作会话并从多台机器连接到同一会话.我如何设置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更新它.