温故知新,在Windows 11的WSLg(或Multipass)的Ubuntu中安装和运行桌面应用(Snap、Deb)
安装和使用Multipass
什么是Multipass
Multipass是一个在Linux、macOS和Windows上快速生成云式Ubuntu虚拟机的工具。
它为你提供了一个简单而强大的CLI,使你能够快速访问Ubuntu命令行或创建自己的本地迷你云。
本地开发和测试是一个痛苦的过程,但Multipass通过自动化所有的设置和拆解,使它变得更容易。Multipass有一个不断增长的图像库,使你能够启动特制的虚拟机,或你自己通过其强大的云启动界面配置的自定义虚拟机。
开发人员可以使用Multipass来制作云部署的原型,并在任何机器上创建新鲜、定制的Linux开发环境。Mac和Windows用户可以使用Multipass作为在其系统上获得Ubuntu命令行的最快捷方式。新的Ubuntu用户可以把它作为一个沙盒来尝试新的东西,而不影响他们的主机,也不需要双启动。
获取安装Multipass
安装之后,它会主动写一个PATH值。
检测安装后的版本
multipass version
查找镜像
multipass find
Image Aliases Version Description
core core16 20200818 Ubuntu Core 16
core18 20211124 Ubuntu Core 18
18.04 bionic 20220411 Ubuntu 18.04 LTS
20.04 focal,lts 20220411.2 Ubuntu 20.04 LTS
21.10 impish 20220309 Ubuntu 21.10
appliance:adguard-home 20200812 Ubuntu AdGuard Home Appliance
appliance:mosquitto 20200812 Ubuntu Mosquitto Appliance
appliance:nextcloud 20200812 Ubuntu Nextcloud Appliance
appliance:openhab 20200812 Ubuntu openHAB Home Appliance
appliance:plexmediaserver 20200812 Ubuntu Plex Media Server Appliance
anbox-cloud-appliance latest Anbox Cloud Appliance
charm-dev latest A development and testing environment for charmers
docker latest A Docker environment with Portainer and related tools
minikube latest minikube is local Kubernetes
创建并启动新实例
https://discourse.ubuntu.com/t/working-with-multipass-instances/8422
multipass launch
然后可能会成功,并且存在一个输出:
multipass launch
...
Launched: consistent-greyhound
这个consistent-greyhound
就是新实例的名称,我们也可以看到它跑起来没
multipass list
查看指定实例的信息
multipass info $instanceName
也可以定制一些参数来创建
multipass launch --name UbuntuImpish --mem 8G --disk 25G --cpus 4 impish
其中这个impish
指代Ubuntu 21.10这个版本,因为它的代号是Impish Indri
如果安装Ubuntu 20.04,那么命令可以是
multipass launch --name UbuntuFocal --mem 8G --disk 25G --cpus 4 focal
如果安装Ubuntu 18.04,那么命令可以是
multipass launch --name UbuntuBionic --mem 8G --disk 25G --cpus 4 bionic
管理Ubuntu实例
关闭指定实例
multipass stop $instanceName
删除指定实例
multipass delete $instanceName
恢复指定实例
multipass recover $instanceName
清空所有已删除实例
multipass purge
进入到Ubuntu实例
可以单独对实例下发指定命令
multipass exec $instanceName $command
进入指定实例控制台
multipass shell $instanceName
例如:
multipass shell consistent-greyhound
设置Root密码并切换到Root
首次设置Root密码
sudo passwd
切换到Root账户
su root
允许建立本地挂载映射
对了,还需要使用管理员权限打开终端才行。
在Windows上默认这个Mount功能是关闭的,需要单独设置打开。
multipass set local.privileged-mounts=true
设置和本机的共享目录
首先还是切到根目录创建一个hello
文件夹
cd /
mkdir hello
退出回到外面
exit
创建共享,本地目录+虚拟机里面路径
multipass mount /Users/xxxxx/Downloads consistent-greyhound:/hello
这时候,你再回到Ubuntu里面就可以访问到这个目录的文件了。
安装Ubuntu的桌面环境
sudo apt-get install xserver-xorg
这个没试过,可以跳过,后面还有个专门的部分
Ubuntu中切换包源
获取国内包源
以Ubuntu 22.04为例:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
以Ubuntu 21.10为例:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ impish-proposed main restricted universe multiverse
以Ubuntu 20.04为例:
# 默认注释了源码镜像以提高 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
以Ubuntu 18.04为例:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
以Ubuntu 16.04为例:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
备份原有包源
cd /etc/apt/
cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑Ubuntu包源配置文件
vim sources.list
敲下dG
清空文本内容。
再敲下i
进入编辑状态
粘贴上面对应Ubuntu版本的国内包源清单,这里版本要对应哈,右键即可粘贴
按Esc退出并输入:wq
保存。
Ubuntu中安装应用
通过DPKG方式安装DEB包
deb包是Debian,Ubuntu等Linux发行版的软件安装包,扩展名为.deb,是类似于rpm的软件包,Debian,Ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。
sudo dpkg -i xxxxxx.deb
例如:
sudo dpkg -i ./cn.xxxxxxxxxx.xxxx-linux_x64-8.3.16.42-0.deb
通过SNAP方式安装SNAP包
Snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。. 所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理。
sudo snap install xxxxx.2_amd64.snap
例如:
sudo snap install xxxxxxx.3.16.47_amd64.snap --dangerous --devmode
也可以直接安装指定名字的软件,例如:
sudo snap install libreoffice
运行已安装的程序
如果你成功安装了,那么最好切换到安装目录看看启动名称是什么。直接输入启动名称就可以了。
$productName
Ubuntu中Snap
什么是SNAP包
Snap包是Ubuntu 16.04 LTS发布时引入的新应用格式包。目前已流行在Ubuntu且在其他如Debian、Arch Linux、Fedora、Kaili Linux、openSUSE、Red Hat等Linux发行版上通过snapd来安装使用snap应用。
当你在安装完snap后,你会发现在在根目录下会出现如/dev/loop0的挂载点,这些挂载点正是snap软件包的目录。Snap使用了squashFS文件系统,一种开源的压缩,只读文件系统,基于GPL协议发行。一旦snap被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,意味着该目录不能被随意篡改和写入。
squashFS文件系统的引入,使得snap的安全性要优于传统的Linux软件包。同时,每个snap默认都被严格限制(confined),即限制系统权限和资源访问。但是,可通过授予权限策略来获得对系统资源的访问。这也是安全性更好的表现。
Snap可包含一个或多个服务,支持cli(命令行)应用,GUI图形应用以及无单进程限制。因此,你可以单个snap下调用一个或多个服务。对于某些多服务的应用来说,非常方便。前面说到snap间相互隔离,那么怎么交换资源呢?答案是可以通过interface(接口)定义来做资源交换。interface被用于让snap可访问OpenGL加速,声卡播放、录制,网络和HOME目录。Interface由slot和plug组成即提供者和消费者。
预装了Snap的发行版
Snap除了在Ubuntu 桌面和其他Linux发行版桌面系统上使用外,还能在Ubuntu server和Ubuntu Core上使用且为Ubuntu Core默认应用格式包,Ubuntu Core是迷你,与Ubuntu一致,专为物联网设备、嵌入式平台设计。
目前,Ubuntu的相关产品已以snap包的形式发布,例如Ubuntu MAAS,Juju,Multipass,MicroK8s,MicroStack等等。借助snap,你可以一键安装专为笔记本工作站打造的Kubernetes和OpenStack,省去了安装等待和繁琐配置过程。对于开发和测试团队来说无疑是一个更高效的方案,将更多的精力和资源投入到关键价值上。
Snap历史演变
Snap包类似于一个容器,完全独立于系统,它包含一个应用程序需要用到的所有文件和库(Snap包含一个私有的root文件系统里面包含依赖的软件包),他们安装在独立的目录中且各个应用之间相互隔离,互不影响,而且安装快捷简单,运行容易管理;主要支持的主流发行版Ubuntu和Debian。
它类似于windows的软件安装包将所需的依赖都统一打包到软件包中部署时只需拷贝snap文件即可,俨然就是一个镜像容器。
Snap前身是由Canonical进行开发和管理的snappy演变而来用的是和Flatpak对抗,在Ubuntu 20.04 TLS的focal的发行版本中默认自带。
core
软件包是snap的核心运行时,几乎所有的snap包都依赖core运行时,如果您Ubuntu发行版本低于18.04您可能需要在安装其它的软件包的时候先安装core
Snap优缺点:
优点:
- 安装简单、稳定、自动升级以及自带配置环境无需自行配置
- 得益于 Canonical 在中国大陆的运营,下载速度还是可以的
缺点:
- 配置不灵活
- 软件包巨大,好像运行一个软件包都需要挂载一个镜像,说是为了解决依赖问题,但……
- 字体渲染支持很烂
- 启动速度巨慢,了解后发现这个 Snap 果然还是把软件全部打包并压缩做成镜像,每次都要解压缩再挂载
Snap从Ubuntu 16.04已经开始内置。
SNAP包常用命令
0. 安装Snap及Snapcraft
原则上高版本Ubuntu都自带了Snap的支持,但是如果想要补充安装或卸载重装,可以基于如下命令:
sudo apt-get install snapd && sudo apt-get install snapcraft
1. 搜索指定包
sudo snap find $targetPackage
例如:
sudo snap find vscode
2. 安装指定包
sudo snap install $targetPackage
3. 卸载指定包
sudo snap remove $targetPackage
例如我卸载掉Visual Studio Code
sudo snap remove code
4. 查看指定包
sudo snap info $targetPackage
例如查看Visual Studio Code
sudo snap info code
5. 查看已装包
sudo snap list
6. 更新指定包
sudo snap refresh $targetPackage channel=$targetChannel
这里channel
的值包括:latest
、stable
sudo snap refresh code channel=latest
例如Visual Studio Code
sudo snap refresh code
7. 还原之前版本
sudo snap revert $targetPackage
例如:
sudo snap revert vscode
8. 下载指定包
sudo snap download $targetPackage
将会下载.assert
和.snap
两类文件,其中:
.assert
记载了软件包的元数据信息,包括签名和权限控制信息。.snap
是实际安装文件包。
最后我们看到,以下载code
为例,它会得到有个code_94.assert
和code_94.snap
两个文件。
9. 安装离线包
先注册元数据信息
sudo snap ack $targetPackage.assert
再执行包安装
sudo snap install $targetPackage.snap
如果没有.assert
,我们也可以通过一个额外参数绕过安全检查,单独安装Snap包,建议是可信任的官网包或者测试包才这样操作。
sudo snap install $targetPackage.snap --dangerous
其中--dangerous
意味着软件不是在“沙盒”环境下执行的,运行过程不受控,因为缺少.assert文件所描述的签名信息和权限控制信息。
这里我们拿Visual Studio Code做个案例
先注册.assert
sudo snap ack code_94.assert
然后安装.snap
sudo snap install code_94.snap --classic
如果带上--dangerous
参数,那么它的情况会变成
sudo snap install code_94.snap --classic --dangerous
带与不带还是存在细微差别的。
10. 查看Snap版本
snap --version
11. Snap安装位置
/snap
cd /snap/$targetPackage && ls -al
通常来说,启动入口在
/snap/$targetPackage/x1/usr/bin/$targetPackage
Ubuntu中安装桌面
安装桌面和RDP软件
在这之前,我们先更新下包索引。
sudo apt-get update
接下来开启安装
sudo apt-get install ubuntu-desktop xrdp -y
这将一次性安装ubuntu-desktop
和xrdp
两个软件。
稍等片刻之后,安装完毕
另外一个方案:
sudo apt-get install ubuntu-desktop unity compizconfig-settings-manager xrdp -y
安装ubuntu-desktop
、unity
、compizconfig-settings-manager
、xrdp
这几个软件。
创建桌面登录用户
创建一个登录用户名
sudo adduser $userName
并且给这个用户赋予访问权限
sudo usermod -aG sudo $userName
获取当前Ubuntu实例IP
ip a
从这里面,我姑且看到了一个ip,等下试试:172.26.52.107
当然,其实还有个办法可以看到这个ip,那就是退出Ubuntu,我们从Multipass自带的List也可以看到它的ip
multipass list
通过RDP客户端远程Ubuntu
在Windows 11搜索远程,找到远程桌面连接
打开它,输入刚才的IP地址
点击连接,弹出的对话框选是
我们将看到一个登录对话框
输入之前设定用户名和密码,并且点击ok
太棒了,你现在看到的是Ubuntu的桌面引导,说明我们已经来到桌面了
等待下软件更新
是的,没错,你现在看到的就是真正的Ubuntu桌面
是的,这看起来简直太棒了
查看之前安装的桌面客户端,运行良好
Ubuntu中安装Mono
在Ubuntu 20.04中安装Mono
先把Mono的仓库添加到系统中,并且更新索引。
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
再安装Mono
sudo apt install mono-devel
sudo apt install mono-complete
验证已安装的Mono版本
mono --version
在Multipass里面运行Docker容器
multipass launch docker
从Windows Terminal中连接Ubuntu
先确保安装sshd软件
sudo apt-get install openssh-server
查找它的ip
ip a
在Windows Terminal中,输入如下命令
ssh $targetUserName@$targetIp
例如:
ssh taylorshi@192.168.186.128
第一次连接会提示你是否允许,我们回答yes
即可,输入对应用户的密码,只要授权正常,差不多就可以连接上了。
如果你是虚拟机,注意这里选的网络连接
模式。