【问题标题】:SSH, screen and XDISPLAYSSH、屏幕和 XDISPLAY
【发布时间】:2008-10-29 04:29:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux ssh gnu-screen


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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


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

      【讨论】:

        猜你喜欢
        • 2016-07-01
        • 1970-01-01
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多