首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ssh和byobu更新显示

用ssh和byobu更新显示
EN

Stack Overflow用户
提问于 2017-03-24 14:57:56
回答 1查看 1.8K关注 0票数 8

我有以下情况:

在我的工作计算机(A)中,我打开一个byobu (tmux)会话。

在比布里面,我打开了几个终端。其中一些是本地的(A),而在另一些则是另一台计算机(B)。

我回到家,从我的家用电脑(C)到(A),运行"byobu“,并在(A)或(B)中找到我所有的会话。

除了运行X11应用程序之外,它工作得很好。在更改计算机时,我不会让任何X11应用程序运行,但只运行"xclock“有时工作,有时不工作(”无法连接到X服务器localhost:n.0")。

我理解这取决于DISPLAY变量,并且它的设置使得X11将连接到我在byobu中创建会话之前最后运行"byobu“的计算机,这可能是(A)或(C)。我的问题是,我经常不知道如何修复不再起作用的会话。有时,我只需打开另一个会话(byobu中的另一个选项卡),并在其他会话中使用$DISPLAY的值,但这只能在新会话打开时起作用,而不是总是这样。在其他情况下,我能够分离byobu (F6),重新附加它(运行"byobu"),并打开一个新的ssh连接到(B),然后这个连接可以工作,但是已经存在的会话不能工作。

我读过一些像SSH、X11转发和终端复用器如何让tmux X显示器回来?这样的文档,但我不清楚它们是如何应用到我的情况中的。例如,前者的.bashrc代码应该在(A)、(B)或(C)中吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 22:32:49

更新/编辑我找到了正确的方法。只需在任何byobu shell中键入

. byobu-reconnect-sockets

以及新的ssh连接的显示环境变量,以及SSH_AUTH_SOCK和其他几个可能有用和依赖于主登录shell (执行byobu attach-session -t session_name或屏幕后端、byobu -D -R session_name或无论如何您更喜欢这样做)的环境变量。

这一切都应该通过按下CTRL-F5来实现,但我怀疑你的计算机和我一样,正在拦截CTRL-F5 (对我来说,我在Mac上使用iTerm ),或者用它做自己的事情,或者发送错误的控制字符序列,所以byobu没有正确地接收它。这是一个更多的类型,但如上文所述,获取shell脚本将完成CTRL-F5应该做的事情,并将在会话中对所有byobu打开的shell执行此操作。下面我最初的答案,你可能现在可以忽略,但我会把它留在那里,以防它对某些人有用,也许是为了其他目的。

此外,您还可以编辑byobu-reconnect-sockets脚本(它只是一个shell脚本),并且有一些地方可以添加您想要更新的附加环境变量,因此实际上没有必要添加以下内容。

(原答覆如下)

当您再次使用ssh并重新附加byobu会话时,您的新ssh连接的ssh转发X11显示很可能与启动byobu时创建的初始ssh会话的代理显示不同。假设您第一次使用ssh,并将使用多个shell和许多转发的X11窗口启动一个新的byobu会话,这一切都会很好,因为第一个shell将显示环境变量设置为它正在侦听的X11连接。这可能就像

[~/]$ printenv DISPLAY localhost:11.0

由byobu启动的所有shell(以及后端的tmux或屏幕)将继承所有环境变量的设置,这些环境变量是在byobu最初启动时设置的,即为用户转发的用于第一个ssh连接的X11显示。

然后你脱下你的必修课,回家,然后回去。但是,这一次您将得到一个不同的X11显示,因为其他用户的localhost是:11.0。在您在家中启动的新ssh会话中,显示的值可能是localhost:14.0 (例如)。对于通过这个ssh连接转发的X11,X11客户端需要连接到显示localhost:14.0的ssh X11代理,而不是localhost:11.0。您可能没有本地主机的授权密钥:11.0到那时,会有其他人,或者更糟的是,如果他们已经禁用了X身份验证,您要打开的X11窗口将开始显示在它们的屏幕上。你只要做点什么就行了,就是-

  1. 分离比布
  2. 您现在应该在当前的ssh shell中。执行printenv DISPLAY并记下所显示的值(或复制它)
  3. 重接比布
  4. 在任何您想要在其中使用X11的shell中,执行export DISPLAY=localhost:14.0 (在本例中,它将是该值,在您的示例中,您将使用#2的任何值)
  5. X11现在将按照您的期望通过ssh转发到屏幕上。
  6. 如果要在shell中使用X,则必须在单独打开的每个byobu shell中执行此操作。据我所知,没有办法在所有的shell中设置它,除非我认为有一种方法可以在所有的shell中同时运行任意的命令,但我不知道从头顶上执行这些命令的关键顺序。
  7. 烦人的是,每次断开和断开ssh连接时,您都必须这样做,然后重新连接ssh并重新附加byobu,因为ssh shell中的显示环境变量可能已经更改,但是您的shell要么设置了在byobu最初启动时要显示的内容,要么设置了您上次设置的任何内容。
  8. 即使在以后的ssh连接中在byobu中打开新shell,这些shell仍将继承第一次启动byobu时设置的DISPLAY环境变量设置,然后一直返回到第一个ssh连接。你也得用新壳来做这件事。

这让我经常感到烦恼,我很想花些时间开发一些黑客,至少可以减少一些繁琐的工作,最好是与ctrl-F5一起完成,因为ctrl-f5有效地完成了所有这些工作,但是对于其他一些事情,您通常希望重新连接到新的ssh会话,特别是ssh代理的SSH_AUTH_SOCK。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43002749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档