WSL安装

安装步骤

  1. 控制面板->程序和功能->启用或关闭Windows功能->勾选 适用于Linux的Windows子系统
  2. 重启电脑
  3. 打开应用商城搜索 “WSL”,可根据自己需求选择安装一个或多个 Linux 系统:
  4. 安装完成后可在开始菜单里找到快捷方式并启动,第一次运行需要等待安装并设置用户名、密码。

home 目录位置

C:\Users\liupe\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

wsl备份及还原,here

挂在移动硬盘

假设移动硬盘盘符为 D
/mnt 下建立文件夹 dsudo mkdir /mnt/d
挂载硬盘到文件夹 d (注意:D: 后面有空格)

$ sudo mount -t drvfs D: /mnt/d

wsl设置

列出了系统中安装的子系统

可以是一个或多个

wsl -l

运行子系统

name由wsl获得

wsl -d Ubuntu-18.04 (name)

查看运行中的子系统

wsl -l --running

停止子系统

wsl -t Ubuntu-18.04

备份wsl子系统

一定要先停止子系统之后再备份wsl

wsl --export Ubuntu-18.04 c:\Ubuntu-18.04-20200210.tar
wsl --export <distribution_name> <file_name>

还原子系统

wsl --import Ubuntu-18.04 C:\wsl c:\Ubuntu-18.04-20190707.tar
wsl --import <distribution_name> <Install_location> <file_name>

设置默认版本

wsl -s Ubuntu-18.04
wsl -s <分发版>

删除子系统

避免存在重复分发版本,否则还原的时候需要指定不同的distribution_name

wsl --unregister Ubuntu-18.04

import修改默认启动user

myname=liup
echo -e "[user]\ndefault=$myname" >> /etc/wsl.conf

ps: 是否有wsl.conf不影响结果

WSL 映射磁盘

\\wsl$

xming 图形转发

export DISPLAY=localhost:0

WSL1 转换为 WSL2

查看当前版本

PS C:\Users\liupei> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         1

如果在运行,先停止

C:\Users\Administrator>wsl --shutdown  

版本转换

PS C:\Users\liupei> wsl --set-version Ubuntu-20.04 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel

启用虚拟机功能

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。

以管理员身份打开 PowerShell 并运行:[参考]

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

下载内核组件(这里download),安装,然后重新运行

PS C:\Users\liupei> wsl --set-version Ubuntu-20.04 2
  1. wsl安装,here
  2. import后启动账户,here
  3. wsl迁移,here

远程连接wsl

配置过程:

  • 先删掉原有的ssh
sudo apt-get remove --purge openssh-server
  • 重新安装ssh服务
sudo apt-get install openssh-server ssh  
  • 编辑sshd_config文件,修改几处配置才能正常使用用户名/密码的方式连接
sudo vi /etc/ssh/sshd_config
  • 需要找到并修改以下几项(其他博客有修改其他项成功的,也可以只改了前两项)

    • Port 223 #默认的是22,Windows自己的SSH服务也是的22端口,所以我改成了223
    • PermitRootLogin yes #默认是PermitRootLogin prohibit-password
    • PasswordAuthentication yes # 密码验证登录
    • AllowUsers * # 远程登录时的用户,这里*是通配符
  • 启动ssh服务

sudo service ssh --full-restart

参考文献:

screen权限问题

Cannot make directory ‘/var/run/screen’: Permission denied

sudo /etc/init.d/screen-cleanup start
mkdir ~/.screen && chmod 700 ~/.screen
export SCREENDIR=$HOME/.screen

配置ssh server

// 卸载
sudo apt-get remove openssh-server
// 安装
sudo apt-get install openssh-server
// 编辑配置文件
vim /etc/ssh/sshd_config

Port 2222   #设置ssh的端口号, 由于22在windows中有别的用处, 尽量不修改系统的端口号
PermitRootLogin yes   # 可以root远程登录
PasswordAuthentication yes     # 密码验证登录
AllowUsers sky # 远程登录时的用户名
# Port 36000  # 默认的是22,但是windows有自己的ssh服务用的也是22端口,修改一下
# UsePrivilegeSeparation no
# PasswordAuthentication, 改为yes可以使用密码登录,ssh秘钥对登录,使用默认no

// 重启ssh服务

sudo service ssh --full-restart # 自己电脑上的xhell可以连接了

# 想在其他计算机上访问, 需要系统开放端口.
防火墙->高级设置->入站规则->新建规则
端口->下一步
选择tcp  特定本地端口 2222
允许连接, 默认都选上, 下一步填个名字 完成

这样就可以通过网络进行ssh远程登录了

wsl的ssh开机启动

cmd中运行命令:
C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ubuntu1804.exe run "service ssh start"

新建sshStart.bat
c:\Users\lab\AppData\Local\Microsoft\WindowsApps\ubuntu.exe run "service ssh start"

batbat的快捷方式放入自启动目录
cp sshStart.bat AppData/Roaming/Microsoft/Windows/Start\ Menu/Programs/Startup/

参考文献

wsl挂载硬盘,here

sudo mount -t drvfs G: /mnt/e
# -t:指定档案系统的型态
G:表示的是可移动磁盘的盘符

windows terminal

默认打开 WSL

修改 Windows Terminal 默认打开的 Shell,每次打开 Windows Terminal 都会默认打开 Power Shell, 而我只使用 WSL Ubuntu。所以,我想将 WSL 设为默认打开。只需要点击顶部下拉箭头,选择“设置”,修改 defaultProfile 的值为对应的 guid 即可。参考文献

分屏快捷键

左右分屏:Alt + Shift + =

上下分屏:Alt + Shift + -

取消分屏:Ctrl + Shift + w

img

设置打开路径

原始启动路径

%USERPROFILE%

修改为:

\\wsl$\Ubuntu\home\liupei

早期版本按照如下设置:

即便设置成了默认打开 WSL,但是默认路径依然是 Windows 的用户根目录。修改成 WSL 下用户的根目录。

terminal设置

"defaultProfile": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",

{
  "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
  "hidden": false,
  "name": "Ubuntu-18.04",
  "source": "Windows.Terminal.Wsl",
  "startingDirectory": "\\wsl$\Ubuntu-20.04\home\liupei"
},

wsl2archlinux

这个主题比较特殊,不再放在 archlinux arch vs manjaro,或者 wsl wsl安装及路径 主题中。
wsl 商店默认没有 archlinux 及其衍生版本,在 win 下用虚拟机或双系统都不太方便,由于最近很长一段时间都是再用 manjaro 和 endeavourOS,逐渐不喜欢 ubuntu 系列了。
win10 下通过 wsl2 安装 archlinux 很方便,用起来也很舒服,安装过程如下:

开启 win10 对 wsl2 的支持

  1. win + s 搜索启用或关闭 windows 功能

img

  1. 开启以下选项

img

  1. 重启

将默认的wsl版本设置为wsl2

查询默认版本:wsl -l -v
如果默认版本是 wsl1, 需要安装 wsl_update.exe
然后管理员打开powershell
wsl --set-default-version 2

下载archlinux

  1. 从清华开源镜像站下载archlinux

img

下载archlinux-bootstrap-xxxx.xx.xx-x86_64.tar.gz, 注意是tar.gz文件

  1. 从Github 下载 LxRunOffline

img

选mingw或msvc版本均可

安装archlinux

  1. 新建一个文件夹, 作为archlinux的安装目录

img

  1. 将刚刚下载的文件移入安装目录,并解压LxRunOffline

img

  1. 在安装目录(shift + mouseRight)打开Powershell

img

  1. 安装archlinux
    .\LxRunOffline i -n archlinux -f archlinux-bootstrap-2022.07.01-x86_64.tar.gz -d D:\archWsl2 -r root.x86_64

    -n 系统名称(随便取)
    -f 刚刚下载的archlinux安装包
    -d 安装目录
    其余不变

  2. 将archlinux设为wsl2
    wsl --set-version arch-test 2
  3. 查看archlinux状态
    wsl -l -v
    完成安装

img

配置archlinux

  1. wsl 进入 archlinux
  2. 添加清华镜像源
    打开pacman.conf文件进行编辑
    在文件末尾追加
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

img

打开下一级目录pacman.d, 编辑mirrorlist, 取消注释掉China的两个清华Tuna源链接, 当然也可以取消注释所有链接.

img

回到archlinux, 依次执行

pacman -Syy
pacman-key --init
pacman-key --populate
pacman -S archlinuxcn-keyring

img

img

img

  1. 安装基础软件
    pacman -S base base-devel neovim wget curl

img

  1. 创建Linux账户
    在shell中, 输入 passwd 添加 root 密码
    新建普通用户
useradd -m -G wheel -s /bin/bash 用户名
passwd 用户名

给用户提权, 编辑 /etc/sudoers

sudo nvim /etc/sudoers

wheel ALL=(ALL) ALL取消注释, 保存并退出.
查看当前用户id
id -u 用户名
记下账户id
退出Arch Linux, 回到Power Shell.
执行:
.\LxRunOffline su -n archlinux -v 账户id

-n后面跟wsl2虚拟机的名字, 我的是archlinux
这样, 下一次登录会自动进入刚创建的用户.

img

  1. 语言本地化
    编辑/etc/locale.gen
sudo nvim /etc/locale.gen

en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8 取消注释, 如果需要其他语言, 请一并取消注释.
执行:

sudo locale-gen 
locale
locale -a

编辑/etc/locale.conf

nvim /etc/locale.conf

添加如下内容

# /etc/locale.conf
LANG=en_US.UTF-8

重启archlinux即可完成配置。

后面还可以配置 windows terminal 和字体,参考来源

使用 clash 代理

  • 确保 windows 的 clash 正常运行

使用 ip route 获取 Windows 主机 IP(推荐)

ip route | grep default | awk '{print $3}'
  • 输入如下命令,使 wsl 可以永久使用代理
cat >> ~/.bashrc <<'EOF'
export hostip=$(ip route | grep default | awk '{print $3}')
export http_proxy="http://$hostip:7890"
export https_proxy="http://$hostip:7890"
export all_proxy="socks5://$hostip:7891"
EOF

source ~/.bashrc

这样 Git、pip 等绝大多数工具会自动使用代理,无需单独配置。

  • 验证
curl https://www.google.com

如果输出如下信息,说明成功运行

peter@xps9440:hexo[master*]$ curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
  • (可选):配置 Git、APT、pip 等工具使用代理

一、Git 配置代理

  • 方式 1:全局配置 HTTP/HTTPS 代理
    git config --global http.proxy http://$hostip:7890
    git config --global https.proxy http://$hostip:7890
    
  • 方式 2(可选):使用 SOCKS5 代理(不是所有 Git 支持)
git config --global http.proxy "socks5h://$hostip:7891"
git config --global https.proxy "socks5h://$hostip:7891"

查看当前代理配置:

git config --global --get http.proxy

取消代理:

git config --global --unset http.proxy
git config --global --unset https.proxy

二、APT 配置代理

  • 编辑或创建配置文件:
sudo nano /etc/apt/apt.conf.d/99proxy

添加内容(适用于 HTTP 代理):

Acquire::http::Proxy "http://$hostip:7890/";
Acquire::https::Proxy "http://$hostip:7890/";

保存并测试:

sudo apt update

如不再使用代理,可清除此文件或注释掉。

三、pip 配置代理

  • 方法 1:使用环境变量(推荐)
export http_proxy="http://$hostip:7890"
export https_proxy="http://$hostip:7890"

然后使用 pip:

pip install numpy
  • 方法 2:直接在命令中指定代理
pip install numpy --proxy="http://$hostip:7890"
  • 方法 3:修改 pip 配置文件(长期使用)
    编辑(如文件不存在可新建):
nano ~/.pip/pip.conf

添加内容:

[global]
proxy = http://$hostip:7890