如何修复 Windows 10 上的 WSL(适用于 Linux 的 Windows 子系统)字体

如何修复 Windows 10 上的 WSL(适用于 Linux 的 Windows 子系统)字体

当我启动其他实用程序(man、vi、nano 等...)时,我的 WSL 字体会一直更改为默认字体(甚至不是单色字体!)

我检查了 WSL 的“默认值”和“属性”,并将字体设置为“Consolas”。但每次启动其他实用程序时,它都会恢复为默认字体……

谷歌了一下,仍然不知道发生了什么,或者无论如何我可以为此进行配置。

答案1

该问题似乎在两个错误报告中提到:

开发人员对该问题尚未做出明确回应。第二个链接给出了一些解释:

它只在 1809 中被检测到,因为控制台的默认字体是 Consolas。在此之前,我相信是 Lucida Console?并且代码对该字体的工作方式相同。我对该代码的理解(它一直存在,在我加入 PowerShell 团队之前)是,在 Windows 源代码中,我们只有一个用于 PowerShell 的快捷方式,该快捷方式定义了默认字体。因此,当默认字体被更改时,东亚用户会抱怨他们的字形无法呈现,因为字体不支持它。因此,此代码检测到字体和语言环境不兼容,并将其切换到可以呈现的语言环境。

我对于在 Windows PowerShell 中进行任何更改犹豫不决,因为即使是像这样看似很小的更改也会导致意外的回归。

第一个链接中建议了一种解决方法(但并不适用于所有人),即FaceName在注册表中的键值处更改为 WSL 控制台中使用的字体:

HKEY_CURRENT_USER\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe
HKEY_CURRENT_USER\Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe

我现在的价值FaceNameLucida Console

在第一个链接中也提到:

观察:如果您有一个 BAT 文件,其中您调用 powershell script.ps1 两次,第二次调用会将字体重置为光栅。

在调用之间插入 chcp 437 会有所帮助。

结论是,这一直存在问题,但现在问题才出现,因为 Windows 版本 1809 将默认字体更改为 Consolas。将默认字体更改为Lucida Console 或 Consolas 可能会有所帮助,虽然不能解决错误,但可能会稍微隐藏它。在调用 PowerShell 之前FaceName添加命令也可能有帮助。chcp

唯一真正的解决方案是微软修复该错误,但似乎所涉及的代码相当旧,因此当前的 PowerShell 团队对修改它犹豫不决。

答案2

我将提供一个稍微正交的解决方案。我不知道您的字体为何被重置。原因可能非常简单,如果有人发布了它,您应该接受他们的答案。

但我认为这不值得进行故障排除。

WSL 使用的“默认”终端(目前)是传统的“Windows 控制台主机”,据我所知,它已有 20 多年历史了。微软在过去几年中发布了Windows 终端作为其替代品。它是:

  • 功能丰富的选项卡式终端界面,适用于 WSL、PowerShell、CMD 和任何 Windows 控制台应用程序。
  • 可从 Microsoft Store 安装。
  • 开源(Github 链接
  • 积极开发,(目前)定期发布新功能
  • 可设置为 Windows 11 中的默认终端,从而取代控制台主机。

对于任何遇到 Windows 控制台主机问题的人,我个人的建议是升级到 Windows 终端。

相关内容