wsl2+windows terminal+ubuntu配置初见

本文最后更新于:2023年4月17日 晚上

最近想搞几个实验, 恰好都需要使用Linux环境, 之前我的方案一直是使用vmware workstation + Ubuntu 20.04, 但是最近项目需要安装了docker, docker在安装的时候需要安装wsl2, 我寻思既然安装了就把环境搭好, 体验一下这个著名的WSL2

由于在装docker的时候就装好了wsl2, 这里就不记录装wsl2的过程了

1 | 安装ubuntu 20.04 LTS

这一步很简单, 直接在Microsoft Store中搜Ubuntu安装就好了

然后启动后直接输入账号密码就配置好了?!

打开Windows Terminal(这个也可以在Store中装)

发现已经可以直接进入ubuntu了

啊, 全称不到5分钟, 这就装好了? 啥也不用配置的吗, 属实比虚拟机还简单啊。

本来晚上就打算到装好ubuntu为止,但现在看来还有充分的时间搞搞别的。

2 | 换源

清华镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

复制里面的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

首先输入sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak将原来的源备份一下

然后sudo vim /etc/apt/sources.list将上面的清华源黏贴进去

最后sudo apt-get update && sudo apt-get upgrade就OK了

3 | 将wsl搬离C盘

由于当时分区的时候C盘是用来只装windows, 只分配了100G, 现在还剩20多G, 而我还有一块1T的固态, 打算移动一下wsl的位置, 这时候就需要祭出一个大杀器:

https://github.com/DDoSolitary/LxRunOffline

在release下载后后:

首先用LxRunOffline.exe list查看一下wsl安装了哪些子系统

然后移动就直接LxRunOffline.exe move -n Ubuntu20.04 -d E:\Ubuntu_Wsl

就好了!

4 | 配置zsh和oh-my-zsh

看看当前系统下的shell

1
2
3
4
5
6
7
8
9
10
11
roccoshi@sxz:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen

安装zsh: sudo apt install zsh -y

切换shell为zsh: chsh -s /bin/zsh

安装oh-my-zsh: sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

然后就是喜闻乐见的被墙了

合着没代理不让装是吧

WSL配置代理

网上查了一下, 配置个小脚本, 原理是「由于 Linux 子系统也是通过 Windows 访问网络,所以 Linux 子系统中的网关指向的是 Windows,DNS 服务器指向的也是 Windows,基于这两个特性,我们可以将 Windows 的 IP 读取出来。」

脚本放在~/.zshrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
alias proxy='
export https_proxy="socks5://${hostip}:1080";
export http_proxy="socks5://${hostip}:1080";
export all_proxy="socks5://${hostip}:1080";
echo -e "Acquire::http::Proxy \"http://${hostip}:1080\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
echo -e "Acquire::https::Proxy \"http://${hostip}:1080\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
'
alias unproxy='
unset https_proxy;
unset http_proxy;
unset all_proxy;
sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;

设置好后source ~/.zshrc后, 便可以使用proxy设置代理和unproxy取消代理

注意: 协议为socks5, windows主机需要设置允许来自局域网的连接

代理搞好后再来装oh-my-zsh

嘿嘿

然后vim ./.zshrc把主题改为ys

其他花里胡哨的先不改了

其他插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# auto-suggestions 自动补全
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

# zsh-syntax-highlighting 语法高亮
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# auto jump 文件夹跳转 (可用z代替)
git clone git://github.com/joelthelion/autojump.git $ZSH_CUSTOM/plugins/autojump
cd $ZSH_CUSTOM/plugins/autojump && ./install.py # 提示没有python软链接一下 sudo ln -s /usr/bin/python3 /usr/bin/python
# 然后将 [[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh 添加到zshrc

# ------------------------------------------------- #
# 上述插件安装完后记得
vim ~/.zshrc
# 将下面加入到原来的 plugins=(git)位置
plugins=(git zsh-autosuggestions zsh-syntax-highlighting autojump)
# 最后
source ~/.zshrc

5 | 从windows访问WSL以及反之

将wsl的ubuntu路径添加到win下方便查看, 操作如下:

点进去就可以看到ubuntu的文件啦

想到一个问题…wsl不是也可以访问windows吗, 那么…

这三个不就是我win的盘吗, 那我点进去不就递归….

好吧是我想多了

而且wsl2和windows的环境变量居然也是共享的?!

可以自行关闭, 方法如下;

sudo vim /etc/wsl.conf打开wsl.conf输入

1
2
3
[interop]
enabled = false
appendWindowsPath = false

然后windows重启一下wsl (管理员身份, powershell)

1
2
net stop LxssManager
net start LxssManager

感觉环境变量共享这件事情有好有坏吧, 为了防止之后发生难以解释的bug, 我还是选择关闭了, 这里记录下操作以后开启也方便~

(后面配置vscode发现并不能关闭啊啊)

在后面几天安装thefuck等插件的过程中, 我发现由于windows引入过多的环境变量将导致一些插件变得很慢, 具体见

The fuck is sluggish while in Debian WSL2

给出的解决方案就是取消appendWindowsPath

Hey guys, I figured this out. it’s irrelevant to thefuck but your wsl machine.

Try echo $PATH and you probably gonna see a long list there, and that’s the reason the fuck is so slow. You can do what’s suggested here, microsoft/WSL#1640 (comment), and restart your linux distro.

After that thefuck runs smooth as fuck for me

Beware your vscode would be gone after that, so probably do which code first

注意需要保留vs code的路径, 毕竟vscode是最大生产力, 方式:

  1. 使用which code获得vscode的路径 如/mnt/d/tools/Microsoft VS Code/bin/code
  2. echo PATH="$PATH:/mnt/d/tools/Microsoft VS Code/bin" >> ~/.zshrc
  3. source ~/.zshrc

将管理员身份打开powershell添加到terminal

首先安装gsudo这个软件, powershell中输入:

1
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"

注意有可能下载不下来

这时候需要改下host, 方法:

进入该页面: https://www.ipaddress.com/

搜索raw.githubusercontent.com 得到类似下面的结果

将其中一条或者几条以xx.xx.xx.xx raw.githubusercontent.com的方式写到host文件中

文件位置C:\Windows\System32\drivers\etc, 注意host编辑后无法直接保存, 需要先拖到桌面编辑完再拖回去 (很傻逼)

然后下载好gsudo后将下面内容写到terminal的设置文件中

1
2
3
4
5
6
7
{
"guid": "{41dd7a51-f0e1-4420-a2ec-1a7130b7e950}",
"name": "Windows PowerShell Elevated",
"commandline": "gsudo.exe powershell.exe -nologo",
"hidden": false,
"colorScheme": "Andromeda"
},

然后就ok啦 (如果打不开, 说明环境变量没更新, 下载好gsudo他会自己配置环境变量, 但有时需要重启电脑才能更新)

6 | vscode与wsl的插件

vscode-wsl文档: https://code.visualstudio.com/docs/remote/wsl-tutorial

作为MS自家的WSL, 自然在vscode上有对应的插件

Remote-WSL

安装后在wsl下输入code .

就打开了 vscode

然后其他和Remote-SSH差不多, 以后再慢慢了解

注意到win和wsl下的插件是分开装的~


wsl2+windows terminal+ubuntu配置初见
https://blog.roccoshi.top/posts/29406/
作者
RoccoShi
发布于
2021年8月13日
许可协议