基于WSL搭建Ubnutu 20.04.6LTS 开发环境(一)

运行环境

Microsoft Windows 10.0.19045.5487 x64 专业工作站版 22H2测试通过。

WSL概述

  • 安装偏好的Linux分发版,Ubuntu/Red Hat/CentOS/Debian。
  • 运行常用的命令行工具(例如grep、sed、awk等)。
  • 运行Bash shell脚本和Linux命令行应用程序。
  • 使用Linux分发包管理器安装其他软件。
  • 使用类似于Unix的命令行shell调用Windows应用程序。
  • 在Windows上调用Linux应用程序。

简而言之,使用WSL相当于在Windows中内嵌了一个Linux系统,它与所属的Windows系统可以互相访问本地系统,可以使用Windows的网络访问互联网,继承Windows中配置的hosts等,除了Linux GUI操作以外的其他操作,都可以在wsl中使用。

WSL当前有两个版本,WSL 1和WSL 2,目前的最新版本是2,相对于版本1,WSL 2主要的区别是提高了文件系统的性能和系统调用的兼容性。推荐使用WSL 2。

WSL 2和1的区别和新增功能详情参考:比较 WSL 1 和 WSL 2 | Microsoft Docs

目录

一、Ubnutu环境安装

1、WSL安装及配置

1.1 启用虚拟机功能

1.2 更新WSL 2

2、 安装Linux分发版

2.1 启动Linux

2.2 更新APT(软件包)下载源

 2.3 安装及配置UI图形界面

 2.4 选择显示管理DM

 2.5 为当前用户指定登录session类型

3、WSL运维及问题集锦

(1)  运行wsl --install

(2)  WSL常用维护命令

(3) 解决WSL2不支持Systemd(即:system daemon)

(4) 运行wsl系统找不到指定的文件

(5) 指定的服务未安装

(6) 访问https://changelogs.ubuntu.com 失败

二、xrdp配置远程桌面

1、配置XRDP

2、配置启动批处理

3、XRDP启动失败 

三、配置字体及输入法

四、WSL宿主机互通


一、Ubnutu环境安装

1、WSL安装及配置

打开“控制面板”->“程序和功能”,在左侧栏选择“启用或关闭Windows功能”,在打开的对话框中找到“适用于Linux的Windows子系统”并打勾,点击【确定】关闭对话框,等待系统安装新功能完成,并按提示重启电脑。

也可以通过命令行来启用该功能:

  1. 按“Win+X”键,选择“Windows PowerShell(管理员)”。
  2. 在打开的Power Shell中运行以下命令:
dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
1.1 启用虚拟机功能

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

同步骤1“启用WSL”功能一样,通过“启用或关闭Windows功能”对话框,勾选“虚拟机平台”,确定后等待安装或重启。
以管理员身份打开Power Shell并运行以下命令:

dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
1.2 更新WSL 2

自动方式:通过Windows更新,下载安装WSL更新。
手动方式:下载并安装 适用于 x64 计算机的 WSL2 Linux 内核更新包

# 自动更新
## 前提是能连接上github.com
wsl --update

# 将WSL 2设置为默认版本
wsl --set-default-version 2

安装完成后可能需要重启才能生效。 

2、 安装Linux分发版

打开“Microsoft Store”,在搜索框中输入“linux”,选择偏好的Linux分发版并下载安装。
目前商店内的Linux分发版还不太多,Ubuntu 20.04 LTS是一个不错的选择。
 

也可以通过命令行来安装子系统:

# 可安装的os列表
wsl --list --online

# 安装最新的Ubuntu
wsl --install Ubuntu-20.04

# 安装到指定路径(未测试)
wsl --install Ubuntu-20.04 --root D:\SubLinux-Ubuntu

常用维护命令:

/* 通过wsl查看分发版是否可用 */
wsl -l -v

/* 导出分发版本到指定位置 */
wsl --export Ubuntu-20.04 E:\Ubuntu-20.04.LTS.tar

/* 注销分发系统 */
wsl --unregister Ubuntu-20.04

/* 导入分发版本安装到指定位置 */
wsl --import Ubuntu-20.04 D:\Ubuntu-20.04 E:\Ubuntu-20.04.LTS.tar --version 2
2.1 启动Linux

安装分发版后,在命令提示符或Power Shell中输入“wsl”命令可以直接启动默认的分发版,启动后即进入分发版的shell中,shell的当前工作目录为启动时的windows命令提示符或Power Shell的当前工作目录在Linux中的表示形式,如下图:

提示:

有时候进程管理器中会发现一个“Vmmem”的进程占用比较多的内存,且不能通过进程管理器结束。这个进程是wsl的一个内存管理进程,通常关闭了wsl的窗口后会自动终止,如果没有终止,可以通过wsl --shutdown指令来结束该进程。

2.2 更新APT(软件包)下载源
#创建或修改root密码
xxxxx@CNDGSNDD0194:~$ sudo passwd root
New password:
Retype new password:
passwd: password updated successfully

#切换到root管理员身份
xxxxx@CNDGSNDD0194:~$ su root
Password:
root@CNDGSNDD0194:

# Start
# 修改软件包数据源, sources.list内容替换
# 中科大源(可选)
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

## Not recommended
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

# 阿里源(可选)
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# END

#修改数据源文件内容
vim /etc/apt/sources.list

#全选内容,直接输入(注意大小写)
ggVG
# 直接按Del键清空内容,将上面内容直接复制,右键粘进来
#Exit退出INSERT模式,按【:wq】回车进行保存退出

#更新和升级软件包
sudo apt update && sudo apt upgrade
 2.3 安装及配置UI图形界面
# 温馨提示
# Ubuntu-desktop:GNOME桌面(要求性能较高) 提供现代化的外观和丰富的功能,界面较为复杂
# Xubuntu-desktop:Xfce桌面环境(轻量级性能) 界面简洁、操作简单
# Kubuntu-desktop:KDE桌面环境(要求性能高) 界面炫目且功能强大,适合追求视觉效果和功能丰富的用户‌

# 本文采用Xfce桌面环境
sudo apt install xubuntu-desktop
# 注意,如果是物理机安装的ubuntu则自带GNOME桌面环境,可跳过本节安装。
 2.4 选择显示管理DM

安装xfce4过程中会出现选择显示管理DM选择的提示,建议用lightdm 如果错过了安装过程中出现的这个向导,那么可以在安装完成后执行下面的命令重新设置

sudo dpkg-reconfigure lightdm

# 如果出现
dpkg-query: package 'lightdm' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files.
/usr/sbin/dpkg-reconfigure: lightdm is not installed
# 则运行
sudo apt install lightdm
sudo dpkg-reconfigure lightdm #切换
 2.5 为当前用户指定登录session类型
echo "xfce4-session" > ~/.xsession

 提示

当Ubuntu系统为物理机安装时,则直接配置

echo "gnome-session" > ~/.xsession

3、WSL运维及问题集锦

(1)  运行wsl --install

报错: 无法解析服务器的名称或地址

通过浏览器打开https://site.ip138.com/raw.Githubusercontent.com
获取第1个能在本地ping通的IP,比如:185.199.110.133

然后打开c:\windows\system32\drivers\etc\hosts文件(记事本打开),在内容处检查:
是否存在raw.githubusercontent.com解析的内容,全部移除后添加:
185.199.110.133 raw.githubusercontent.com
保存退出。

(2)  WSL常用维护命令
# CMD终端或PowerShell(以管理员身份)运行

# 可安装的os列表
wsl --list --online
# 安装Ubuntu
wsl --install Ubuntu-2x.xx
# 更新WSL内核版本
wsl --update
# 通过wsl查看分发版是否可用
wsl -l -v

# 迁移Linux子系统,(1)导出分发版本到指定位置
wsl --export Ubuntu-20.04 E:\Ubuntu-20.04.LTS.tar
# (2)注销分发系统
wsl --unregister Ubuntu-20.04
# (3)导入分发版本安装到指定位置
wsl --import Ubuntu-20.04 D:\SubLinux-Ubuntu E:\Ubuntu-20.04.LTS.tar --version 2

# WSL关机
wsl --shutdown
(3) 解决WSL2不支持Systemd(即:system daemon)
cd ~ # 回到用户根路径

# 拉取ubuntu-wsl2-systemd-script包
git clone ttps://github.com/FiestaLake/ubu/ubuntu-wsl2-systemd-script.git
# 从github上拉取一直超时(改host优化解析地址也不管用),就用国内镜像服拉取
git clone https://gitcode.com/gh_mirrors/ubu/ubuntu-wsl2-systemd-script.git

# 执行安装
cd ubuntu-wsl2-systemd-script/
./install.sh --force --no-wslg

 值得注意的是,最后这条指令的两个参数是没有括号的,不然执行会报错。执行完成一直要等待控制台返回【成功: 指定的值已得到保存。】才表示安装的服务配置成功。

提示

Ubuntu在15.04版本之前使用Upstart作为其初始化系统。从Ubuntu 15.10开始,Ubuntu开始逐步迁移到Systemd,但并不是所有的Ubuntu版本都默认包含systemctl命令。而本文引用20.04版本是通过service服务管理器来管理系统服务进程。比如:

sudo service xrdp start
sudo service xrdp stop
sudo service xrdp status
(4) 运行wsl系统找不到指定的文件

Error code: Wsl/CallMsi/ERROR_FILE_NOT_FOUND
找到并打开此位置:C:\Program Files\WindowsApps
MicrosoftCorporationII.WindowsSubsystemForLinux_2.1.5.0_x64__8wekyb3d8bbwe

它很有可能因权限受限无法访问。我们只需要将WindowsApps的属性【安全-高级】所有者改成管理员角色成员,同时赋予所有权限即可。
注意,WindowsSubsystemForLinux App包版本很有可能是不相同的,可以根据[修改时间]排序,找到x64最新的App包。
打开后直接双击运行wsl.mis,即可修复此问题。

注意修复完成后,确保Windows组件如下已安装:
a. Hyper-V
b. 适用于Linux的Windows 子系统
c. 虚拟机平台
d. 适用于x64 计算机的WSL2 Linux内核更新包
执行如下语句进行配置:

wsl --set-default-version 2
# 可尝试运行:
wsl -l -v
wsl --list --verbose

# 当正常的话,可直接打开Microsoft Store(应用商店)直接进行安装指定的Linux OS。
# 当然也可以仍使用wsl安装语句,如:
wsl --install -d Ubuntu20.04
(5) 指定的服务未安装

Error code: Wsl/ERROR_SERVICE_DOES_NOT_EXIST

目前暂时没有直接有效的修复办法,我是直接从github.com微软官方开源库下载的

目前最新版本(非预览):wsl.2.4.13.0.x64.msi  

(6) 访问https://changelogs.ubuntu.com 失败

Error bash: Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings 连接访问https://changelogs.ubuntu.com 失败,请检查您的互联网连接或代理设置。

# 移除
sudo rm /var/lib/ubuntu-release-upgrader/release-upgrade-available
# 调用sh批处理
sudo /usr/lib/ubuntu-release-upgrader/release-upgrade-motd
# 检查及更新系统
apt update && sudo apt upgrade


二、xrdp配置远程桌面

# 安装
sudo apt update && sudo apt install -y xrdp xserver-xorg-core xserver-xorg-input-all xorgxrdp
# 卸载
sudo systemctl disable xrdp
sudo systemctl stop xrdp
sudo apt purge xrdp
sudo apt purge xserver-xorg-core
sudo apt purge xserver-xorg-input-all
sudo apt purge xorgxrdp

# 将xrdp用户添加到ssl-cert用户组
sudo adduser xrdp ssl-cert
# 如果有防火墙,则开启
sudo uwf allow 3389

# 检查服务状态
sudo systemctl status xrdp
sudo service xrdp-sesman status
# 查看服务列表
sudo ps aux | grep 'xrdp*'
# 查看服务日志
journalctl -xe | grep 'xrdp*'

1、配置XRDP

# 打开配置文件
sudo vim /etc/xrdp/xrdp.ini
# 修改下面这一行,将默认的3389改成其他端口即可
port=3390
#免登录确认(可选) autoLoginEnable=1

# 免输用户密码登录(可选)
# 找到[Xorg]代码块,将username和password填充如下,其它不变
[Xorg]
name=Xorg
lib=libxup.so
username=[ubuntu username]
password=[pwd]
#按ESC,wq!保存。

# 注意,如果XRDP服务已经运行,则重要进行重启该服务以保证配置生效。
sudo systemctl restart xrdp

2、配置启动批处理

# 解决登录后黑屏或无桌面的BUG
sudo vim /etc/xrdp/startwn.sh
## 将以下内容复制到下图位置,按:wq!保存
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
#. $HOME/.profile

#注意,尾行本文WSL系统则是
xfce4-session

 

 保存完成后(按:wq!回车),重启xrdp服务

# 手动
sudo /etc/init.d/xrdp start

# 重启
sudo systemctl restart xrdp

# 检查服务状态
sudo service xrdp status
sudo service xrdp-sesman status

3、XRDP启动失败 

报错

Job for xrdp.service failed because the control process exited with error code.

See "systemctl status xrdp.service" and "journalctl -xe" for details.

# 查看运行日志
sudo service xrdp-sesman status
## 关键性错误
xrdp-sesman.service: Failed to kill control group /system.slice/xrdp-sesman.service

# 检查服务自启动项
sudo systemctl list-unit-files | grep 'xrdp-sesman*'

 这个问题似乎目前无解,有人提出重装xrdp。我反复测试,实际上是XRDP一直在自启动中导致。目前变更一下服务端口(XRDP.INI)就能重启成功,或者直接将系统重启也会有效果(总觉得就是被监听的端口一直无法释放出来)

三、配置字体及输入法

# 选择zh_CN.UTF-8即可
sudo dpkg-reconfigure locales

# 安装中文字体
sudo apt-get install -y ttf-wqy-zenhei xfonts-intl-chinese wqy*

# 更新软件包列表
sudo apt update
 
# 安装Fcitx框架
sudo apt install fcitx-bin
 
# 安装搜狗拼音
sudo apt install fcitx-sogoupinyin
 
# 搜索五笔的安装包
apt search fcitx | grep wb
# 安装五笔
sudo apt install fcitx fcitx-table-wbpy
 
# 当遇到冲突或错误时
sudo apt-get -f install

四、WSL宿主机互通

# 安装net-tools网络工具包
sudo apt install net-tools

# wsl-IP
ip a |grep "global eth0"

# win-IP
cat /etc/resolv.conf |grep nameserver

获取的IP信息结果

参考文档

Ubuntu远程链接及常见问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值