SSH,屏幕和XDISPLAY

我使用屏幕来坚持我的工作会议,并从多台机器连接到同一个会话。 我如何设置SSH和屏幕,使我的永久屏幕会话中的XDISPLAYvariables始终设置为我目前正在连接的计算机?

即。 我在工作中启动屏幕会话并使用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。

在外部进程中改变环境变量没有“微不足道”的方法。

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


为了移动X应用程序,看看X11vncXvnc

我也对这个答案感兴趣。 不应该有可能列出你的用户的SSH进程按时间排序和猫的环境可能?