我有以下情况:
在我的工作计算机(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)中吗?
发布于 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窗口将开始显示在它们的屏幕上。你只要做点什么就行了,就是-
printenv DISPLAY并记下所显示的值(或复制它)export DISPLAY=localhost:14.0 (在本例中,它将是该值,在您的示例中,您将使用#2的任何值)这让我经常感到烦恼,我很想花些时间开发一些黑客,至少可以减少一些繁琐的工作,最好是与ctrl-F5一起完成,因为ctrl-f5有效地完成了所有这些工作,但是对于其他一些事情,您通常希望重新连接到新的ssh会话,特别是ssh代理的SSH_AUTH_SOCK。
https://stackoverflow.com/questions/43002749
复制相似问题