admin管理员组文章数量:1603972
文章目录
- 一、安装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内存使用优化
- 参考
一、安装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/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没有反应:建议参考
- WSL Error: Can‘t open display
可能出现的问题:(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
参考
- WSL安装图形界面并通过xrdp/X-Launch访问
- 如何提高WIN10商城的下载速度?不再卡读条!
四、WSL界面:xlaunch
- WSL没有图形界面?快速搭建Python和C++开发环境
五、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
参考:
-
- WSL2迁移后默认root登录问题解决
八、修改命令提示符
(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/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
国内镜像:
sh -c "$(curl -fsSL https://gitee/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里面
-
How to Setup Oh my Posh On Ubuntu
-
ubunut 20 使用oh-my-posh美化终端
-
How to install NerdFonts in WSL?
(4)oh-my-fish
TBA
参考:
- 使用 Zsh 作为 Ubuntu 的默认 Shell
九、禁用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/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打开终端出现报错
脚本:ubuntu-wsl2-systemd-script
错误信息如下:
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
参考:
- wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
十五、使用SwitchHost加速访问github
下载地址:
- SwitchHosts! 还能这样管理hosts,后悔没早点用
- GitHub加速指南进阶版
- GitHub Hosts
下载:SwitchHosts,以及hosts-server,打开即可使用。
如果无法修改windows上的host可以参考:Win11修改hosts文件方法,Win11无法修改hosts解决方法,增加修改属性;
如果无法同步到wsl内部,可以参考:阻止 WSL 自动生成/etc/hosts 文件,关闭wsl自动在wsl内部生成host内容
十六、解决WSL2 443端口占用问题
参考:
- 解决WSL2 443端口占用问题
- HTTPS端口443被程序vmware-hostd.exe占用的解决
WSL2内部的端口和Windows的端口应该同属于一个空间,所以如果windows占用了443端口,wsl如果想使用的话,就会出现443端口重复占用的问题。
- 一般可能是vmware相关程序占用的
解决办法:
在PowerShell中执行,查找主机443端口占用程序
netstat -ano|findstr “443”
结束相关进程
tasklist
taskkill /f /pid 8920
十七、WSL切换默认的linux子系统
参考
- 设置WSL默认版本,即输入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
参考
- Windows子系统(WSL2)中自定义安装docker并换源
- windows10 docker 安装在D盘
(1)安装docker desktop
- link
注意安装前执行以下操作: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释放内存最彻底
参考
- WSL 中的高级设置配置,
- 修改 WSL2 可用内存大小和交换分区大小
- 限制wsl2占用过多内存 _
参考
-
WSL 的基本命令
-
windows wsl中保留linux文件的权限
-
WSL1和WSL2安装界面显示
-
WSL1升级为WSL2
-
WSL2 安装教程
-
玩转 WSL 并配置Linux下的开发调试环境(Linux初学者福音)
-
更改WSL2的存放路径
-
在WSL ubuntu中禁用windows下的环境变量的方法
版权声明:本文标题:Windows安装WSL2精简版教程 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728454670a1158744.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论