如何让声音 (PulseAudio) 在 WSL2 上工作

本文解释了如何在 Microsoft Windows 下让声音 (PulseAudio) 在 WSL2 上工作。

通过遵循这些说明,您将在 Windows/WSL2 上使用 PulseAudio 为控制台和 GUI 应用程序提供工作声音(尽管本文不涉及在 WSL2 上运行图形应用程序)。 使用这个,麦克风将无法工作,或者至少它对我不起作用(对于我来说,无论如何都不需要它)。

微软计划为 WSL2 添加对运行图形应用程序和声音的内置支持。 但在那之前,您可以使用这些说明让声音在 WSL2 上工作。

如果您仍在使用 WSL1,请在此处查看如何升级到 WSL2。 您可以通过运行来检查您是否已经在使用 WSL2 wsl -l -v 在 Windows PowerShell 中。 此处应列出每台使用 WSL2 的机器,其中 2 作为它们的 VERSION; 如果您没有看到版本号,或者看到错误消息,则您有 WSL1。

下面的屏幕截图显示了运行 Ubuntu/WSL2 的 Windows 终端,我正在使用 cmus 控制台音乐播放器播放音乐。 你听不到音乐来检查它是否真的有效,所以这个截图很没用,但我需要一个截图作为文章缩略图?️。

作为一个完全不相关的说明,如果您想在 WSL2 上使用 cmus,请编辑它的
~/.config/cmus/rc

文件(如果它不存在则创建它)并添加
set output_plugin=pulse

使其声音输出在您的 Windows 桌面上工作。

如何让声音在 WSL2 中工作

1. 下载 Windows 版 PulseAudio。

在 Windows 上:

我能找到的适用于 Windows 10 的 PulseAudio 的最新版本是这里的第 7 版,专为 X2Go 构建。 您可以访问该链接并单击“快照”下载 Windows 版 PulseAudio,或单击此处下载。

这下载了一个 .tar.gz 档案。 解压缩此存档并重命名包含 pulseaudio.exe,以及其他 PulseAudio 可执行文件和文件,以 pulse,并复制这个新的 pulse 文件夹到 C: (所以你应该有例如 C:pulsepulseaudio.exe)。

2. 为 Windows 配置 PulseAudio。

在 Windows 上:

创建一个名为 config.paC:pulse. 为了能够在 Windows 上重命名文件扩展名,您需要启用从文件资源管理器中显示文件扩展名。

在这 C:pulseconfig.pa 文件,添加以下内容并在完成后保存文件:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/12
load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/12
load-module module-waveout sink_name=output source_name=input record=0

在这里,我们允许来自 127.0.0.1 这是本地 IP 地址,以及 172.16.0.0/12 这是 WSL2 的默认空间 (172.16.0.0 – 172.31.255.255)。

3. 在 WSL2 中配置 PulseAudio。

在 WSL2(Ubuntu / 无论您使用什么)上:

让我们确保你有 libpulse0 安装,否则这将不起作用。 它的名称和安装命令取决于您使用的 Linux 发行版,因此您需要搜索并安装它。 在 Ubuntu / Debian 上,您可以使用以下命令安装它:

sudo apt install libpulse0

仍然在 WSL2 上,您还需要编辑 ~/.bashrc 使用文本编辑器编辑文件 – 使用下面的命令,我们将使用 Nano 控制台编辑器编辑它:

nano ~/.bashrc

在此文件中向下滚动到其末尾,然后粘贴以下内容:

export HOST_IP="$(ip route |awk '/^default/{print $3}')"
export PULSE_SERVER="tcp:$HOST_IP"
#export DISPLAY="$HOST_IP:0.0"

在这里你可以取消注释 export DISPLAY 线也导出 DISPLAY 环境变量(我默认已将其注释掉,因为不是每个人都需要它)。 如果你想使用 VcxSrv 之类的东西从 WSL2 启动图形应用程序,这是必需的(使用本文中的配置,在 WSL2 中运行的图形应用程序将有良好的支持)。

完成后,保存文件并退出 Nano (Ctrl + o, Enter 然后 x 保存文件并存在 Nano)。 接下来,源 ~/.bashrc 文件以使用新的环境变量:

source ~/.bashrc

4. 将 PulseAudio 作为 Windows 服务安装。

在 Windows 上:

要将 PulseAudio 作为 Windows 服务启动,我们将使用 NSSM。 从这里下载 NSSM,解压下载的存档并复制 win64 nssm.exe 可执行到 C:pulse. 你可以在 win64 下载的 NSSM zip 存档中的文件夹。

接下来,在 Windows 开始菜单中搜索 PowerShell,右键单击 PowerShell 条目并选择 Run as Administrator.

在 PowerShell 中,键入或粘贴:

C:pulsenssm.exe install PulseAudio

运行此命令时将显示 NSSM GUI。 在其 Application 标签,使用:

  • 申请途径: C:pulsepulseaudio.exe
  • 启动目录: C:pulse
  • 参数: -F C:pulseconfig.pa --exit-idle-time=-1
  • 服务名称(应该在 NSSM 对话框打开时自动填写): PulseAudio

在我们使用的参数字段中 -F,它告诉 PulseAudio 在启动时运行指定的脚本,而 --exit-idle-time=-1 禁用在几秒钟不活动后终止守护程序的选项。

Details 选项卡,输入 PulseAudio 在里面 Display name 场地:

NSSM 详细信息选项卡

完成所有这些后,单击 Install service 按钮。

如果您以后想要删除此 Windows 服务,请再次以管理员身份运行 PowerShell,这次运行以下命令以删除该服务:

C:pulsenssm.exe remove PulseAudio

5. 启动PulseAudio Windows 服务。

启动 Windows 任务管理器,单击 Services 选项卡并滚动到 PulseAudio。 找到PulseAudio服务后,右键单击它并选择 Start 它:

Windows 任务管理器服务 PulseAudio

我们已经完成了。 PulseAudio 现在正在工作。 你应该能够在 WSL2 中使用支持音频的应用程序,并在你的 Windows 10 桌面上听到它们的音频输出。

由于我们已在 Windows 10 上将 PulseAudio 作为服务安装,一旦启动,它会在您登录 Windows 桌面时自动启动,因此无需再次手动启动。

参考资料:Ubuntu Discourse、this、this 和 X2Go Wiki。