最近尝试在Windows下做一些音视频处理的工作,因为比较熟悉Linux的工具链所以尝试在WSL中完成(虚拟机性能太感人了),但是发现WSL默认是不支持图形化界面和音频的,很难进行可视化的调试,本文就介绍了一种为WSL启用图形化及音频支持的方法。

图形化支持

在WSL中运行图形化程序,本质上是利用了Linux的X协议的C/S架构,在Windows下面安装一个X Server,接收WSL中Client的请求进行显示,因此这一部分内容也由Server和Client两个大步骤组成。

为Windows安装X Server

在Win下安装X Server,一个比较好的选择是VcXsrv Windows X Server,只需要下载并安装,然后启动即可。

在运行的首屏可以选择启动模式等,如果只是打算用几个Linux下的图形化程序,建议选择Multiple Windows,如果打算用比较完整的Linux图形化环境,可以选择其他三个。

VcXsrv

在WSL中设置X转发

这里以Ubuntu下的bash为例,设置转发也很容易,只需要添加一条DISPLAY=:0的环境变量即可:

echo 'export DISPLAY=:0' >> ~/.profile

然后重新打开WSL终端应用这条变更,或者 . ~/.profile

这样就完成了转发,可以通过安装xeyes进行测试:

sudo apt install -y x11-apps && xeyes

如果成功的话应该出现这样的一双大眼睛

Imgur

音频支持

默认情况下,WSL内的音频设备也无法正常使用,整体思路和上文类似,也是需要通过两部分转发。

为Windows安装PulseAudio

首先从PulseAudio on Windows下载所需的文件,也可以直接使用这个下载链接

然后将zip压缩包解压到任意位置,并对配置文件进行一定的修改:

# 设置允许接受的客户端地址
# 打开etc\pulse\default.pa文件,找到第61行
# 将 load-module module-native-protocol-tcp 修改为
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
# 设置最大监听时间
# 打开etc\pulse\daemon.conf文件,找到第39行
# 将 ; exit-idle-time = 20 修改为 -1,代表无限制
exit-idle-time = -1

接下来只要运行 bin\pulseaudio.exe 即可,可以通过如下命令测试:

# 在命令行中运行
[解压目录]\bin\paplay.exe -p --server=tcp:localhost C:\Windows\Media\ding.wav

听到“叮”的一声就代表成功了。

为WSL设置音频转发

首先在WSL中安装pulseaudio

sudo apt install pulseaudio

然后添加环境变量

echo 'export PULSE_SERVER=tcp:127.0.0.1' >> ~/.profile

同样重新打开WSL终端应用这条变更,或者 . ~/.prifile

这时WSL下的程序,音频就会转发到Windows中打开的pulseaudio.exe中播放,Linux终端没有比较好的发声测试工具,这里用ffplay播放一个网络音频进行测试。

sudo apt install -y ffmpeg
ffplay https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3

如果听到一段动感的音乐就说明转发成功了。

后记

上文记述的方法并不完美,每次使用时都要手动打开Windows下的VcXsrv和PulseAudio,如果嫌麻烦的话可以添加自动启动或者添加到开始菜单,这个本文就不赘述了,可以自行通过搜索引擎解决。


参考文章:


本文由 sandtears 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

5 条评论

  1. MasterVind
    MasterVind

    PS:以上内容可能是针对WSL,从WSL 2开始,已经默认提供了对GUI窗口程序的支持,不需要再额外使用X Server了

  2. 个人哥哥
    个人哥哥

    wf

  3. lfdisk
    lfdisk

    感谢博主的文章,解决了我的问题。

  4. newbiechd
    newbiechd

    > 同样重新打开 WSL 终端应用这条变更,或者 `. ~/.prifile`
    这里是博主手误吧,应该是 `. ~/.profile` 吧、

    1. MasterVind
      MasterVind

      笔误,应该是profile文件。

添加新评论