作为开发者,你可能遇到过这样的困境:公司电脑只装了Windows系统,但项目代码偏偏跑在Linux环境。以前我的解决方案是双系统来回切换,或者用虚拟机卡成幻灯片,直到发现了WSL这个神器。WSL全称Windows Subsystem for Linux,它不像虚拟机那样吃内存,又能原生运行Linux程序。更妙的是,我们还能给它装上图形界面,用Windows远程桌面直接操作Ubuntu的窗口程序。
实测下来,这套方案特别适合这些场景:
我去年给团队部署这套环境时,有个前端同事原本每天要重启切换系统3次,现在他一边用VS Code写Node.js,一边开着Photoshop改图,效率直接翻倍。
在开始菜单右键选择Windows PowerShell(管理员),别用普通cmd,权限不够会报错。逐行执行以下命令:
bash复制dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
这步相当于给Windows装上"理解Linux语言"的插件。完成后必须重启电脑,我上次偷懒没重启,后面配置全乱套了。
重启后继续在PowerShell执行:
bash复制wsl --install -d Ubuntu
这里有个坑要注意:如果你之前装过WSL1,需要先执行wsl --set-default-version 2升级到WSL2。我遇到过有人卡在这里半天,最后发现是BIOS没开虚拟化支持,如果你的安装异常,记得去BIOS确认Intel VT-x或AMD-V已启用。
安装完成后,开始菜单会出现Ubuntu图标,首次启动需要设置用户名密码。这里密码可以简单点,反正只是本地环境,我直接用了"123456"(别学我)。
Ubuntu默认源在国外,下载速度堪比蜗牛。先执行这些命令更换国内镜像源:
bash复制sudo sed -i "s@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
阿里云的镜像我用着最稳,清华源有时候会抽风。更新软件列表时如果报错,试试sudo apt-get update --fix-missing。
Gnome太吃资源,KDE配置复杂,经过多次测试,XFCE是最适合WSL的轻量级桌面:
bash复制sudo apt-get update
sudo apt-get install -y xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
安装过程中会弹出配置选项,直接按回车选默认就行。有次我手贱选了lightdm,结果启动不了,最后只能重装系统。
接下来安装xrdp服务,注意默认端口3389会跟Windows远程桌面冲突:
bash复制sudo apt-get install -y xrdp
sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini
sudo echo xfce4-session > ~/.xsession
sudo service xrdp restart
这里我把端口改成了3390,你可以选5000-60000之间的任意端口。有次同事设了3306结果MySQL连不上了,闹了个大笑话。
在Ubuntu终端输入:
bash复制ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
记下显示的IP地址,通常是172开头的内网IP。这个IP每次重启WSL都会变,嫌麻烦可以写个脚本自动获取。
按Win+R输入mstsc打开远程桌面,地址栏填:
code复制localhost:3390
点击连接后会看到xrdp登录界面,输入之前设置的Ubuntu用户名密码。第一次登录可能黑屏几秒钟,别急着关,等XFCE桌面加载。
如果连接失败,按这个顺序检查:
wsl -l -v确认Ubuntu状态是Runningsudo netstat -tulnp | grep xrdp看xrdp是否监听正确端口New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -LocalPort 3390 -Protocol TCP -Action Allow我帮同事部署时,十次有八次是防火墙问题,还有一次是因为装了360把连接拦截了。
桌面环境默认不支持中文,安装语言包:
bash复制sudo apt-get install -y language-pack-zh-hans fonts-wqy-microhei
sudo locale-gen zh_CN.UTF-8
然后在设置里把区域格式改成中国,注销重新登录生效。有次我忘了装字体,所有中文都显示成方框,还以为系统中毒了。
在Windows资源管理器访问\\wsl$\Ubuntu可以直接操作Linux文件。反过来在Ubuntu里访问Windows磁盘:
bash复制ls /mnt/c/Users/你的用户名
不过要注意文件权限问题,我建议重要的项目代码还是放在Ubuntu分区,共享文件夹只用来传资料。
每次重启WSL都要手动启动xrdp太麻烦,编辑/etc/wsl.conf添加:
bash复制[boot]
command="sudo service xrdp start"
这个技巧是我们CTO教的,他说不会写自动化脚本的运维不是好厨子。
如果你需要做机器学习开发,可以启用GPU支持:
bash复制sudo apt-get install -y nvidia-cuda-toolkit
然后在Windows的PowerShell执行:
bash复制wsl --set-version Ubuntu 2
需要提前安装NVIDIA驱动。去年训练模型时发现性能只有原生Linux的70%,后来发现是WSL2的虚拟化开销导致的。
WSL默认不支持声音,可以通过PulseAudio转发:
bash复制sudo apt-get install -y pulseaudio
在Windows安装PulseAudio后,编辑/etc/profile添加:
bash复制export PULSE_SERVER=tcp:$(grep nameserver /etc/resolv.conf | awk '{print $2}')
这个方案看视频还行,但做音频开发延迟太高,我最后还是买了台二手Mac。
定期备份WSL系统:
bash复制wsl --export Ubuntu Ubuntu_backup.tar
恢复时用:
bash复制wsl --import Ubuntu_new C:\wsl_distros\ Ubuntu_backup.tar
有次我误删了Python环境,靠这个备份省了三天重装时间。建议每月备份一次,特别是装了好多定制配置的情况下。