Windows Terminal Hang on Remote Host

Windows Terminal 是个好东西,远程控制也是个好东西,但是两个好东西放在一起,似乎就没那么妙了。

问题

如果你常用命令行工具,而且是在远程桌面上用,那么我想你可能和我一样遇到过类似的情况: 每次重连上远程桌面时, Windows Terminal 大概率就卡死了。

这是一件很要命的事情,因为远程控制本身就要应对这种情况。比如, 我们需要在远程桌面上执行一个耗时很长的命令,没有道理要求我们要一直连着远程桌面, 我们应该完全可以输好命令断开连接,过段时间再连上来看看。然而如果是现在这种情况, 那我们要一直保持连接直到执行结束。这个就有点不讲道理了,而且有些时候,不是我不想一直连线, 网络突然断了,我能有什么办法?

解决

最初我的解决方法,与其说是解决,不如说是规避:如果是耗时比较短的命令,断了就断了,重开就是了; 如果我知道,接下来这个命令可能会跑很长时间,我会老老实实地打开一个 MSYS2 来跑。 注意是单独的 MSYS2,不是套在 Terminal 里面的那个,那个一样会挂。 所以问题一定是出在 Terminal,不是其它终端的问题。

既然是 Windows Terminal 自己的问题,而且基本上每次都可以复现, 那我觉得应该也不会只有我有这个烦恼。我就查了查,这才知道问题的所在,原来达成卡死,需要两个条件:

  1. 远程连接
  2. Nvidia 显卡

这个时候, Terminal 就能达成死锁,造成控制台本身的卡死。那么这个问题能不能解决, 目前看来是不能,起码目前还没有修复。而且我推测从根本解决这个问题很难, 这个 issue 开开关关了好多次了,可能 Terminal 的程序和 Nvidia 的驱动相容性很低, 解决起来没那么容易。

当然开发者们也给了我们一个补救方法,虽然也是回避问题,但比我给出的「不要用」的方法来说, 还是好了很多:打开软件渲染

可能性能上低了一点,不过我想对于控制台程序,性能应该也不是什么问题。

总结

如果你和我一样是 n 卡用户,然后又经常使用 RDP 控制远程主机的 Windows Terminal 执行一些耗时较长的命令,那么你很可能会遇到 Windows Terminal 卡死的问题。 这个问题目前无解,权益之计是打开软件渲染来规避这个问题。