admin管理员组

文章数量:1604037

文章目录

  • 一、安装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