最近尝试在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图形化环境,可以选择其他三个。
在WSL中设置X转发
这里以Ubuntu下的bash为例,设置转发也很容易,只需要添加一条DISPLAY=:0
的环境变量即可:
echo 'export DISPLAY=:0' >> ~/.profile
然后重新打开WSL终端应用这条变更,或者 . ~/.profile
这样就完成了转发,可以通过安装xeyes进行测试:
sudo apt install -y x11-apps && xeyes
如果成功的话应该出现这样的一双大眼睛
音频支持
默认情况下,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,如果嫌麻烦的话可以添加自动启动或者添加到开始菜单,这个本文就不赘述了,可以自行通过搜索引擎解决。
参考文章:
PS:以上内容可能是针对WSL,从WSL 2开始,已经默认提供了对GUI窗口程序的支持,不需要再额外使用X Server了
wf
感谢博主的文章,解决了我的问题。
> 同样重新打开 WSL 终端应用这条变更,或者 `. ~/.prifile`
这里是博主手误吧,应该是 `. ~/.profile` 吧、
笔误,应该是profile文件。