尝试在Windows中使用WSL2实现Linux GUI程序的开发,但是在配置环境阶段就遇到了一些问题。中文社区相关的资料较少,因此我花费了不少时间,特此记录一下。
1 安装WSL 2
以下选一个教程看就可以了,甚至可以互补着看。
2 打开Ubuntu App报错
2.1 报「参考的对象类型不支持尝试的操作。」
参考更改注册表
2.2 报「Wsl/Service/0x8007273d」
可能是更新了wsl版本引起的,参考解决方案@Fainelli的回复。
- 在应用管理中卸载「Windows Subsystem for Linux Update」「Windows Subsystem for Linux」;
- 点击下载
wsl_update_x64.msi
并重新安装wsl内核; - 重启Ubuntu App.
3 无法打开GUI程序
安装完Wsl和Ubuntu后是可以打开终端的,且可以编译代码。但是按照教程安装microsoft-edge或gedit后,启动报错且没有界面。有以下报错。
3.1 failed to connect to the bus
sudo service dbus start
3.1 Missing X server or $DISPLAY 或 wsl cannot open display:
完整错误是
ERROR:ozone_platform_x11.cc(247) Missing X server or $DISPLAY
The platform failed to initialize. Exiting.
解决办法是(原文参考@kvnptl的回复)
- 在Windows上安装 vcxsrv;
- 启动
XLaunch.exe
- 选择
Multiple Windows (default)
- 选择
Start no client (default)
- 勾选✅
Disable access control
- 取消勾选 ☐
Native opengl
(否则会引起GUI程序段错误) - 保存配置文件到启动目录 C:\Users"YOUR_USERNAME"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (把
YOUR_USERNAME
替换成你本机的) - 打开
Ubuntu
app, 运行命令export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0
,阤反命令追加到环境变量~/.bashrc
- Ubuntu下使用
echo $DISPLAY
查看IP地址是否是Win的Wsl虚拟网卡的IP,如果不是,使用export DISPLAY=<IP>:0.0
手动调整下; - 如果你的程序仍然打不开可试试安装
sudo apt install x11-apps -y
后重试
4 打开edge文字乱码
5 可以使用远程登陆Ubuntu桌面
原文参考
Ubuntu中安装xrdp
sudo apt-get purge xrdp
sudo apt-get install xrdp -y
sudo apt-get install xfce4 -y
sudo apt-get install xfce4-goodies -y
启动
sudo /etc/init.d/xrdp start
最后WIN+R输入mstsc
打开远程桌面连接输入Ubuntu的ip连接即可。