如何让声音 (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 + o
, Enter
然后 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
场地:
完成所有这些后,单击 Install service
按钮。
如果您以后想要删除此 Windows 服务,请再次以管理员身份运行 PowerShell,这次运行以下命令以删除该服务:
1 | C:pulsenssm.exe remove PulseAudio |
启动PulseAudio Windows 服务。
启动 Windows 任务管理器,单击 Services
选项卡并滚动到 PulseAudio。 找到PulseAudio服务后,右键单击它并选择 Start
它:
我们已经完成了。 PulseAudio 现在正在工作。 你应该能够在 WSL2 中使用支持音频的应用程序,并在你的 Windows 10 桌面上听到它们的音频输出。
由于我们已在 Windows 10 上将 PulseAudio 作为服务安装,一旦启动,它会在您登录 Windows 桌面时自动启动,因此无需再次手动启动。
参考、引用、致谢
如何让声音 (PulseAudio) 在 WSL2 上工作 - Linux技术博客 (adatiya.com)
参考资料:Ubuntu Discourse、this、this 和 X2Go Wiki。