文章目录
- 一、安装WSL
- 二、更改WSL的存放路径/备份WSL
- 三、安装WSL Terminall
- 四、WSL界面:xlaunch
- 五、WSL1升级WSL2
- 六、WSL2与VMware兼容问题
- 七、更改手动导入的wsl的默认登录用户
- 八、修改命令提示符
- 九、禁用windows下的环境变量的方法
- 十、WSL2安装systemctl
- 十一、wsl2 install k3s
- 十二、wsl2安装完systemctl后(不建议安装),使用vscode打开终端出现报错
- 十三、禁止WSL2自动产生host文件
- 十四、wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
- 十五、使用SwitchHost加速访问github
- 十六、解决WSL2 443端口占用问题
- 十七、WSL切换默认的linux子系统
- 十八、windows10/11安装Docker Desktop
- 十九、WSL2内存使用优化
- 二十、windows内存优化工具
- 二十一、wsl seting
- 二十二、wsl 使用CMake launguage tool 显示报错:.net install tool error acquiring
- 二十三、WSL github copilot 配置MCP
- 参考
一、安装WSL
步骤1 - 启用适用于 Linux 的 Windows 子系统:
- 需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。
- 以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
步骤2 - 启用虚拟机功能:
- 安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
步骤3 - 将 WSL 2 设置为默认版本:
- 打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
步骤4 - 安装所选的 Linux 分发版:
- 打开 Microsoft Store,并选择你偏好的 Linux 分发版。
存在的Linux 分发版如下:
Ubuntu 16.04 LTS
Ubuntu 18.04 LTS
Ubuntu 20.04 LTS
openSUSE Leap 15.1
SUSE Linux Enterprise Server 12 SP5
SUSE Linux Enterprise Server 15 SP1
Kali Linux
Debian GNU/Linux
Fedora Remix for WSL
Pengwin
Pengwin Enterprise
Alpine WSL
二、更改WSL的存放路径/备份WSL
wsl默认存放路径为C盘,可根据需求将其导出到其他空间较大的盘符。
查看已安装的WSL的名称和版本,在Powershell中输入以下命令:
wsl -l --all -v
导出系统到指定位置,wsl --export <系统名> <导出目录>
wsl --export Ubuntu-20.04 D:\wsl-ubuntu-20.04.tar
删除当前C盘中的wsl系统
wsl --unregister Ubuntu-20.04
导入系统到指定位置,wsl --import <系统名> <安装位置> <tar文件目录> WSL版本号
wsl --import Ubuntu-20.04 D:\WSL2_Ubuntu D:\wsl-ubuntu-20.04.tar --version 2
配置之前的默认登录用户,ubuntu2004.exe config --default-user <用户名>
ubuntu2004.exe config --default-user wanyel
三、安装WSL Terminall
1、安装VcXsrv软件,直接下载安装即可,看不懂英文直接默认下一步。
https://sourceforge.net/projects/vcxsrv/
2、安装xfce4图形界面
sudo apt-get update && sudo apt-get upgrade -y
3、安装XFCE桌面环境
sudo apt-get install xfce4 -y
4、将其他软件安装到XFCE桌面
sudo apt-get install xfce4-goodies -y
5、配置X-Launch
-
打开X-Launch软件,选择One large window, Display number选择0
-
然后就是疯狂的下一步,直到出现黑色窗口
-
为ubuntu添加环境变量
export DISPLAY=localhost:0
- 添加环境变量之后需要更新才可使用
source /etc/profile
- 打开xfce4,以后每次使用时需要输入此命令
startxfce4
- 成功打开之后之前的黑色屏幕上就会变成xfce4桌面环境。如下图所示
example:
WSL2的话:
export DISPLAY=localhost:0
或者
export DISPLAY=192.168.70.221:0
192.168.70.221是本地IP(不是WSL的IP)
WSL2配置完毕后,一定要重启那个大黑屏
- windows的cmd进入到VcXsrv的安装目录去执行
D:\softwares\VcXsrv>.\vcxsrv.exe -ac -terminate -lesspointer -multiwindow -clipboard -wgl
这个就是那个黑屏
D:\softwares\VcXsrv>vcxsrv -ac
如果WSL2没有反应:建议参考
可能出现的问题:(1)
则需要在windows后台将该进程kill
或者在下面这里kill
可能出现的问题(2)
(xfce4-panel:16087): libxfce4ui-WARNING **: 11:30:17.754: ICE I/O Error
xfce4-panel: Failed to connect to session manager: Failed to connect to the session manager: IO error occured opening connection
Segmentation fault
wangji@script-wang:~$ sudo -u wangji startxfce4
参考
Tabby
四、WSL界面:xlaunch
五、WSL1升级WSL2
WSL2需要使用虚拟机,因此需要在系统中启动虚拟机功能。
打开PowerShell,执行命令 :
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
打开 控制面版,查看方式可选择大图标,在点击程序与功能—>启用或关闭Windows功能,检查下图中红框圈出内容是否均以打对勾;若没有,则需要打对勾并点击确定。
如果没有Hyper-V(windows 家庭版没有这一项)这一项,也没事。
重新启动系统。
启动系统后,最好在检查一下虚拟机是否以启动。通过以下方式进行检查,
检查一下任务管理器中-性能-CPU中的虚拟化是否已开启:
设置分发版版本
打开PowerShell,执行命令 :
wsl --set-version 分发版名称 版本号
例如,将Ubuntu18.04 设置为WSL2的命令为 wsl --set-version Ubuntu-18.04 2
或者
wsl --update
六、WSL2与VMware兼容问题
WSL2需要开启hypervisor-v,然而VMware不需要;
网上说windows某个版本或者VMware某个版本就可以了,当前暂未测试
WSL和virtual,vm虚拟机存在冲突,所以开启WSL开关如下:
- windows11/10家庭版能通过命令行的方式开启hyper-v(其实开启的是windows功能中的启用或关闭Windows功能的虚拟机平台功能)
- windows11/10专业版,才可以在windows功能中的启用或关闭Windows功能中看到开启Hyper-V功能(我猜测Hyper-V-Manager也仅在专业版上默认安装)
bcdedit /set hypervisorlaunchtype off
关闭虚拟机支持:参考
打开:
bcdedit /set hypervisorlaunchtype auto
参考
WSL2 请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化
七、更改手动导入的wsl的默认登录用户
试过在pwoershell 输入:
ubuntu2204 config --default-user your_user_name
参考:
八、修改命令提示符
(1)自己修改
可用的配置如下:
## PS1&PS2
## get current branch in git repo
function parse_git_branch() {
BRANCH=`git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
if [ ! "${BRANCH}" == "" ]
then
STAT=`parse_git_dirty`
echo "[${BRANCH}${STAT}]"
else
echo ""
fi
}
## get current status of git repo
function parse_git_dirty {
status=`git status 2>&1 | tee`
dirty=`echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?"`
untracked=`echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?"`
ahead=`echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?"`
newfile=`echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?"`
renamed=`echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?"`
deleted=`echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?"`
bits=''
if [ "${renamed}" == "0" ]; then
bits=">${bits}"
fi
if [ "${ahead}" == "0" ]; then
bits="*${bits}"
fi
if [ "${newfile}" == "0" ]; then
bits="+${bits}"
fi
if [ "${untracked}" == "0" ]; then
bits="?${bits}"
fi
if [ "${deleted}" == "0" ]; then
bits="x${bits}"
fi
if [ "${dirty}" == "0" ]; then
bits="!${bits}"
fi
if [ ! "${bits}" == "" ]; then
echo " ${bits}"
else
echo ""
fi
}
## return
function get_return() {
RETVAL=$?
# Normal
[ $RETVAL -eq 0 ] && echo -e "\033[32m▶ \033[0m"
# Ctrl + C
[ $RETVAL -eq 130 ] && echo -e "\033[32m▶ \033[0m"
# Ctrl + Z
[ $RETVAL -eq 148 ] && echo -e "\033[32m▶ \033[0m"
# Error
[ $RETVAL -ne 0 ] && [ $RETVAL -ne 130 ] && [ $RETVAL -ne 148 ] && echo -e "\033[31m✗ \033[0m"
}
export PS1="\`get_return\`\[\e[36m\][\W]\[\e[m\]\[\e[35m\]\`parse_git_branch\`\[\e[m\]\[\e[33m\]\\$\[\e[m\] "
export PS2="\[\e[32m\]>\[\e[m\] "
在新建一个~/.bashrc_ps1_ps2文件,然后填入上述内容;
在/.bashrc中,填入以下内容即可:
. ~/.bashrc_ps1_ps2
(2)使用ohmyzsh
安装:
wangji@script-wang:~$ sudo apt-get install -y zsh
sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
国内镜像:
sh -c "$(curl -fsSL https://gitee.com/shmhlsy/oh-my-zsh-install.sh/raw/master/install.sh)"
所有的主题都会下载成功
WSL中需要手动修改默认的bash为zsh,直接安装zsh可能设置不成功,会显示:Error: chsh command unsuccessful. Change your default shell manually报错
➜ vectorap git:(wangji/ACB-8755) ✗ cd;
➜ ~ pwd
/home/wangji
换一个新主题
➜ ~ vim .zshrc
➜ ~ pwd
/home/wangji
➜ ~
执行生效:
➜ ~ source .zshrc
每次都生效
- 使用chsh
先查看有哪些shell
cat /etc/shells
换回Bash
chsh -s /bin/bash
- robbyrussell主题最好用!!
(3)使用ohmyposh
- 使用的主题:robbyrussell
TBA.
默认字体安装位置:
Installing oh-my-posh themes in /home/wangji/.cache/oh-my-posh/themes
ubuntu安装一个Nerd字体
1.) Download a Nerd Font
2.) Unzip and copy to ~/.fonts
3.) Run the command fc-cache -fv to manually rebuild the font cache
如果是wsl的话,字体应该安装到windows里面
使用Meslo LGM NF 字体,location。
在wsl中配置
(4)oh-my-fish
TBA
参考:
九、禁用windows下的环境变量的方法
wsl 的 ubuntu中编辑/etc/wsl.conf,输入:
[interop]
enabled = false
appendWindowsPath = false
退出保存之后,需要重启wsl。
最直接的方法,把所有的都关闭:
wsl --shutdown
十、WSL2安装systemctl
前置条件:
操作系统为windows 11
wsl 版本为 0.67.6 或以上(目前均为预览版本)。
PS C:\Users\script.wang> wsl -v
WSL 版本: 2.2.1.0
内核版本: 5.15.150.1-2
WSLg 版本: 1.0.60
MSRDC 版本: 1.2.5105
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.22631.3296
配置wsl启用 systemd:
echo -e "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf
wsl --shutdown命令关闭wsl,来进行wsl的完整重启。
打开wsl ubuntu执行:
sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME
snap version
或者(不需要执行!!!):
sudo apt update
sudo apt install -y git
git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh
判断systemd是否启用成功?
判断wsl是否已启用systemd,可通过以下命令查看:
ps --no-headers -o comm 1
如果命令返回的是init说明systemd未启用,如果是systemd那么你的systemd已启用成功了。
▶ [integration-3.7.3][(no branch) !]$ ps --no-headers -o comm 1
systemd
▶ [integration-3.7.3][(no branch) !]$
查看已启用的systemd service
systemctl list-units --type=service
systemctl list-unit-files --type=service --state=enabled
问题:
ubuntu shutdown failed to set wall message ignoring interactive authentication required
解决:
- 增加sudo去执行
参考:
- System has not been booted with systemd as init system (PID 1). Can’t operate. Failed to connect to bus: Host is down
- WSL 2 上启用微软官方支持的 systemd
十一、wsl2 install k3s
问题:Unable to register authentication agent: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Cannot determine user of subject
解决:
Access the server’s command line as the ‘root’ user via SSH or “Terminal” in WHM.
Run the following commands.
mount proc -o remount,hidepid=0
systemctl restart polkit.service
参考:
- Unable to register authentication agent: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Cannot determine user of subject
- k3s快速入门指南
- 使用 K3s 在 Ubuntu 20.04 上安装 Kubernetes 集群 |
- 如何解决在 k3s 环境中每次运行 kubectl 都需要 sudo 的问题?
十二、wsl2安装完systemctl后(不建议安装),使用vscode打开终端出现报错
错误信息如下:
xargs: unmatched double quote; By default quotes are special to xargs unless you use the -0 option
问题似乎与在 enter-systemd-namespace 中向 xargs 传递的参数引用有关。该脚本来自 /etc/bash.bashrc,因此每次正常登录时都会运行。
/etc/bash.bashrc以下enter-systemd-namespace行有关:
该行调用了:exec sudo /usr/sbin/enter-systemd-namespace "$BASH_EXECUTION_STRING"命令,打开/usr/sbin/enter-systemd-namespace此文件修改下命令即可:
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
if [ -n "$1" ] && [ "$1" != "bash --login" ] && [ "$1" != "/bin/bash --login" ]; then
exec /usr/bin/nsenter -t "$SYSTEMD_PID" -a \
/usr/bin/sudo -H -u "$SUDO_USER" \
/bin/bash -c 'set -a; [ -f "$HOME/.systemd-env" ] && source "$HOME/.systemd-env"; set +a; exec bash -c '"$(printf "%q" "$@")"
else
exec /usr/bin/nsenter -t "$SYSTEMD_PID" -a \
bash -c '/bin/login -p -f "$SUDO_USER" $([ -f "$USER_HOME/.systemd-env" ] && /bin/cat "$USER_HOME/.systemd-env" | xargs -d '\''\n'\'')'
fi
echo "Existential crisis"
exit 1
fi
十三、禁止WSL2自动产生host文件
打开/etc/wsl.conf 文件,修改内容:
[network]
generateHosts = false
十四、wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
在windows中打开:
%USERPROFILE%\.wslconfig
添加如下内容:
[experimental]
autoMemoryReclaim=gradual # gradual | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
wsl --shutdown
参考:
十五、使用SwitchHost加速访问github
下载地址:
下载:SwitchHosts,以及hosts-server,打开即可使用。
如果无法修改windows上的host可以参考:Win11修改hosts文件方法,Win11无法修改hosts解决方法,增加修改属性;
如果无法同步到wsl内部,可以参考:阻止 WSL 自动生成/etc/hosts 文件,关闭wsl自动在wsl内部生成host内容
十六、解决WSL2 443端口占用问题
参考:
WSL2内部的端口和Windows的端口应该同属于一个空间,所以如果windows占用了443端口,wsl如果想使用的话,就会出现443端口重复占用的问题。
- 一般可能是vmware相关程序占用的
解决办法:
在PowerShell中执行,查找主机443端口占用程序
netstat -ano|findstr “443”
结束相关进程
tasklist
taskkill /f /pid 8920
十七、WSL切换默认的linux子系统
参考
#查看已安装的WSL版本,cmd中执行
wsl -l
#设置默认分发版版本
wsl -s linux_name
修改分发版版本
#查看已经安装的WSL版本,以及分发版对应的VERSION
wsl -l -v
# 修改分发版的WSL版本,只能修改为1或2
wsl --set-version Ubuntu-20.04 1
# 修改后查看下效果,Ubuntu-20.04 已经由原来的wsl2切换到了wsl1了
wsl -l -v
十八、windows10/11安装Docker Desktop
参考
(1)安装docker desktop
注意安装前执行以下操作:docker desktop最好安装在其他盘,然后修改默认保存镜像的位置
mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"
(3)此方法:使用docker Desktop拉取镜像,并把镜像安装在wsl2中。可以管理安装在wsl2中的镜像
十九、WSL2内存使用优化
wsl2本身的机制似乎会不断地拿宿主机的内存来给自己当cache使用,并且拿了还不还
关闭swp
打开Windows资源管理器,地址栏输入 %UserProfile% 回车,在该目录下创建一个文件, 名字为 .wslconfig
写入内容示例如下
[wsl2]
swap=0
powershell:
wsl --shutdown
重启wsl释放内存最彻底
参考
二十、windows内存优化工具
wsl开久了,vscode会比较卡
二十一、wsl seting
wsl新版本,支持wsl setting GUI界面,通过powershell直接升级
PS C:\Users\script.wang> wsl --version
WSL 版本: 2.4.13.0
内核版本: 5.15.167.4-1
WSLg 版本: 1.0.65
MSRDC 版本: 1.2.5716
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows 版本: 10.0.26100.3476
升级办法:
wsl --update
二十二、wsl 使用CMake launguage tool 显示报错:.net install tool error acquiring
这是因为CMake launguage tool 依赖于.NET Install Tool,而.NET Install Tool会显示报错。
解决办法:
在ubuntu20.04中安装.net工具
添加 Microsoft 包存储库
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
安装 SDK
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-8.0
添加dotnet在wsl ubuntu20.04的.NET Install Tool插件的path中。
打开下面的配置
将下述的内容填充进去
"dotnetAcquisitionExtension.existingDotnetPath": [
{
"extensionId": "ms-dotnettools.csharp",
"path": "/usr/bin/dotnet"
}
]
参考:
- 【Unity 踩坑系列】配置VScode环境Downloading the.NET Runtime Failed to download.NET 7.0.9installation timed out
- 在 Ubuntu 上安装 .NET SDK 或 .NET 运行时
二十三、WSL github copilot 配置MCP
(1)选择github copilot agent模式
(2)打开MCP网站,以playwright为例
@executeautomation/playwright-mcp-server
将上述命令直接拷贝值vscode copilot命令行即可
(3)运行成功后,如下所示,可以看到npx命令是跑在windows上的,所以windows必须要拥有npx环境
(4)windows 10安装npx环境
下载
安装上述msi文件即可
windows npm设置阿里镜像源
PS C:\Users\jiwan> npm.cmd config set registry https://registry.npmmirror.com
PS C:\Users\jiwan>
补充Linux环境安装nodejs环境
下载nodejs包
curl -fsSL https://npmmirror.com/mirrors/node/v20.8.1/node-v20.8.1-linux-x64.tar.gz -o node.tar.gz
解压并将npm以及npx添加至PATH中
tar -xzf node.tar.gz
export PATH=$PATH:$PWD/node-v16.20.2-linux-x64/bin
设置阿里镜像源
npm config set registry https://registry.npmmirror.com
参考