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

上一级:index-wsl

前言

通过遵循这些说明,您将在 Windows/WSL2 上使用 PulseAudio 为控制台和 GUI 应用程序提供工作声音(尽管本文不涉及在 WSL2 上运行图形应用程序)。注意,通过本教程安装的PulseAudio将使得麦克风无法在WSL2中工作)。

如果您使用wslg,事情将变得异常简单,不需要再阅读本教程的其余部分,请直接阅读wslg-在不安装包本身的情况下提供依赖项-传递声音-pulseaudio-虚假依赖包

cmus 控制台音乐播放器

下面的屏幕截图显示了运行 Ubuntu/WSL2 的 Windows 终端,我正在使用 cmus 控制台音乐播放器播放音乐

如果您想在 WSL2 上使用 cmus,请编辑它的
~/.config/cmus/rc

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

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

下载 Windows 版 PulseAudio。

在 Windows 上:

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

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

为 Windows 配置 PulseAudio。

在 Windows 上:

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

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

1
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/12load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/12load-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)。

** 在 WSL2 中配置 PulseAudio。**

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

让我们确保你有 libpulse0 安装,否则这将不起作用。

它的名称和安装命令取决于您使用的 Linux 发行版,因此您需要搜索并安装它。 在 Ubuntu / Debian 上,您可以使用以下命令安装它:

1
sudo apt install libpulse0

仍然在 WSL2 上,您还需要编辑 ~/.bashrc 或~/.profile等配置文件

使用文本编辑器编辑文件 – 使用下面的命令,我们将使用 Nano 控制台编辑器编辑它:

1
nano ~/.bashrc

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

1
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 + oEnter 然后 x 保存文件并存在 Nano)。 接下来,源 ~/.bashrc 文件以使用新的环境变量:

1
source ~/.bashrc

** 将 PulseAudio 作为 Windows 服务安装。**

在 Windows 上:

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

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

在 PowerShell 中,键入或粘贴:

1
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,这次运行以下命令以删除该服务:

1
C:pulsenssm.exe remove PulseAudio

启动PulseAudio Windows 服务。

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

Windows 任务管理器服务 PulseAudio

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

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

参考、引用、致谢

如何让声音 (PulseAudio) 在 WSL2 上工作 - Linux技术博客 (adatiya.com)

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