![irssi 在 ssh 连接丢失时重新连接到服务器](https://linux22.com/image/1254595/irssi%20%E5%9C%A8%20ssh%20%E8%BF%9E%E6%8E%A5%E4%B8%A2%E5%A4%B1%E6%97%B6%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我在 screen 中运行 irssi,并通过 ssh(使用 PuTTY)连接到它。当我意外丢失 ssh 连接时,如果 irssi 是活动的 screen 窗口,则在重新连接/重新附加时,它通常会断开并重新连接到所有 IRC 服务器。有没有办法将它与 ssh 会话“隔离”以使其保持连接?
答案1
实际情况是,irssi 尝试向 screen(其终端)写入一些内容,screen 尝试写入您的 ssh 连接。Screen 的写入处于阻塞状态,因此它也会阻塞 irssi,然后 irssi 不再响应来自服务器的 PING,然后断开连接。
解决方案是,如果 screen 阻塞,则告诉 screen 不要阻塞其中的应用程序。您可以使用nonblock
screen 命令执行此操作:ctrl-A :nonblock on
。这只会影响 screen 中的当前窗口。要将其默认应用于新窗口,请使用defnonblock on
。每次启动 screen 时都要这样做,请将其放入您的~/.screenrc
:
defnonblock on
从man screen
:
nonblock [on|off|numsecs]
告诉 screen 如何处理停止接受输出的用户界面(显示器)。如果用户按下 ^S 或 TCP/调制解调器连接被切断但未收到挂断,则会发生这种情况。如果 nonblock 处于关闭状态(这是默认设置),screen 将等待显示器重新启动以接受输出。如果 nonblock 处于打开状态,screen 将等待直到达到超时(打开被视为 1 秒)。如果显示器仍然没有收到字符,screen 将认为它“被阻止”并停止向其发送字符。如果它在某个时间重新启动以接受字符,screen 将解除对显示器的阻止并重新显示更新的窗口内容。