Jel*_*lby 5 x11 ssh tmux byobu
我有以下情况:
在我的工作计算机(A)中,打开一个byobu(tmux)会话。
在byobu内,我打开了几个终端。其中一些是(A)本地的,而其他一些是我连接到另一台计算机(B)的。
我回到家,从我的家用计算机(C)切换到(A),运行“ byobu”,然后在(A)或(B)中找到我的所有会话。
除运行X11应用程序外,这非常有效。更换计算机时,我不会让任何X11应用程序运行,但是仅运行“ xclock”有时会起作用,有时却无法(“无法连接到X服务器本地主机:n .0”)。
我知道这取决于DISPLAY变量,并且将其设置为X11将连接到我上次运行“ byobu”的计算机,然后再在byobu内创建会话,该计算机可以是(A)或(C)。我的问题是,我通常不知道该如何解决不再起作用的会话。有时,我可以打开另一个会话(byobu中的另一个选项卡)并$DISPLAY在其他会话中使用的值,但这仅在新会话打开的情况下有效,而并非总是如此。在其他情况下,我能够分离byobu(F6),重新连接它(运行“ byobu”),并打开与(B)的新ssh连接,然后该连接可以工作,但不能运行现有的会话。
我已经阅读了一些文档,例如SSH,X11转发和终端多路复用器,或者如何使tmux X显示返回?,但我不清楚它们如何应用于(如果适用)我的情况。例如,.bashrc前者的代码是在(A),(B)还是(C)中?
更新/编辑我找到了正确的方法来做到这一点。只需在任何 byobu shell 中键入此内容
. byobu-reconnect-sockets
以及用于新 ssh 连接的 DISPLAY 环境变量,以及 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 登录,并且要开始一个新的 byobu 会话,其中包含许多 shell 并且可能还有许多转发的 X11 窗口,这一切都可以正常工作,因为第一个 ssh shell 将 DISPLAY 环境变量设置为它正在侦听的内容用于 X11 连接。这可能类似于
[~/]$ printenv DISPLAY
localhost:11.0
byobu 启动的所有 shell(以及后端的 tmux 或 screen)都将继承在 byobu 最初启动时设置的所有环境变量的设置,即为您的用户第一次 ssh 连接转发的 X11 显示.
然后你分离你的 byobu 会话并回家,然后 ssh 重新进入。但是这次你得到一个不同的 X11 显示,因为其他一些用户有 localhost:11.0。在您在家中启动的新 ssh 会话中,DISPLAY 的值可能是 localhost:14.0(比如说)。对于通过此 ssh 连接进行 X11 转发,X11 客户端需要连接到显示 localhost:14.0 而不是 localhost:11.0 的 ssh X11 代理。那时您可能没有 localhost:11.0 的授权密钥,其他人会有,或者更糟的是,如果他们禁用了 X 身份验证,您尝试打开的 X11 窗口将开始显示在他们的屏幕上。要让它发挥作用,你需要做的就是——
printenv DISPLAY并注意显示的值(或复制它)export DISPLAY=localhost:14.0(在本例中就是该值,在您的情况下,您将使用为 #2 获得的任何值)这让我一直很烦恼,我很乐意花时间开发某种 hack 以至少使这不那么乏味,最重要的是将它与 ctrl-F5 一起完成,它可以有效地完成所有这些,但对于其他一些事情,您通常希望重新连接新的 ssh 会话,尤其是 ssh-agent 的 SSH_AUTH_SOCK。
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |