wsl的图像化实现,在wsl中启动浏览器

2 篇文章 0 订阅

最近在学习wsl,原本我看以前的教程说wsl和vmware的区别有一点就是,wsl只能使用命令行,而vmware可以实现图像化,结果我在 microsoft 官方发现现在的wsl 2已经实现了 GUI 界面,所以就来记录一下吧。

wsl 的 GUI 实现

首先我已经在 microsoft store 中下载了 wsl 版的 Ubuntu。

依次输入如下命令:

wsl -d Ubuntu
sudo apt update
sudo apt upgrade

安装 Gedit

Gedit 是 GNOME 桌面环境的默认文本编辑器。

sudo apt install gedit -y

安装 GIMP

GIMP 是一种免费的开源光栅图形编辑器,用于图像操作和图像编辑、自由形态绘图、不同图像文件格式之间的转码,以及更专业的任务。

sudo apt install gimp -y

安装 Nautilus

Nautilus 也称为 GNOME Files,是 GNOME 桌面的文件管理器。 (类似于 Windows 文件资源管理器)。

sudo apt install nautilus -y

安装 VLC

VLC 是一种免费的开源跨平台多媒体播放器和框架,可播放大多数多媒体文件。

sudo apt install vlc -y

安装 X11 应用

X11 是 Linux 窗口管理系统,这是随它一起提供的各种应用和工具的集合,例如 xclock、xcalc 计算器、用于剪切和粘贴的 xclipboard、用于事件测试的 xev 等。

sudo apt install x11-apps -y

安装适用于 Linux 的 Google Chrome

  1. 使用 wget 下载当前最新稳定版 :sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  2. 解压:sudo dpkg -i google-chrome-stable_current_amd64.deb
  3. 修复包:sudo apt install --fix-broken -y
  4. 配置包:sudo dpkg -i google-chrome-stable_current_amd64.deb

之后输入 google-chrome 即可启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLI8DC1x-1681721055800)(:/9431b7fba7cc48aa93e6cb21bb8fe5e2)]

安装适用于 Linux 的 Microsoft Edge

执行下列命令下载:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-beta.list'
sudo rm microsoft.gpg

安装 Edge:

sudo apt update
sudo apt install microsoft-edge-beta

然后输入 microsoft-edge 即可启动。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smsfHOmU-1681721055802)(:/20c52b7d9ae4422a8bdce296fa867add)]

安装适用于 Linux 的 FireFox

首先下载 VcXsrv ,链接:https://sourceforge.net/projects/vcxsrv/

VcXsrv 是一个Windows X server,它可以在Windows上运行Linux GUI应用程序。它的工作原理是将Linux GUI应用程序的图形界面通过X11协议传输到Windows上。

然后启动 VcXsrv :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-buQyJ0pD-1681721055802)(:/7e6ebcafbb124b14baaac976cfb13b8c)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsnEQ6Ap-1681721055803)(:/c8b157e4cd894468bca8609ba6e7f558)]

第三个界面中,可以勾选第三项或者输入 -ac

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vgXPsYW5-1681721055804)(:/b2b36b79e08a4fa8958ce2cb2dad9b2c)]

打开后会是一个黑色的屏幕,暂时不管。

然后在 ubuntu 中输入命令下载 xfce4 和 firefox :

sudo apt update
sudo apt install xfce4
sudo apt install firefox

然后输入 vim ~/.bashrc 修改一些配置,在最后添加如下信息:

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

由于每次启动 wsl 的 ip 地址都可能会发生变动,因此需要如上命令实现自动获取目前的 wsl 使用的 ip 地址,从而能够实现与 xfce4 连接。

再输入如下命令:

source ~/.bashrc

那么启动 firefox 浏览器就有如下两种方法:

方法一

在 ubuntu 中输入命令 startxfce4 ,可能会出现一些问题,解决方法参考:https://askubuntu.com/questions/1399383/how-to-install-firefox-as-a-traditional-deb-package-without-snap-in-ubuntu-22

如果没问题,则可以看到如下画面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyV6vsnd-1681721055804)(:/7d50c33306ae4577b6ce44f96fb4521a)]

然后在 GUI 中找到 terminal ,输入命令 firefox ,即可启动 firefox :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffQE53qL-1681721055805)(:/880fb9e5196b4113a4325b44b049fe4b)]

同样可以在这里启动 Chrome 和 Edge:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNKjTN0m-1681721055806)(:/bcd1c80692ff44a5943ad816e05131de)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrlk2NOs-1681721055806)(:/3a89cfd77880483d93c9dd5ac2e53b92)]

方法二

可以直接在 ubuntu 中输入 firefox ,然后在 xfce4 中就可以看到,但是这种方式显示的 firefox 浏览器并不是完整的,因此还是推荐方法一。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJqEqzdb-1681721055807)(:/bcba26d9bfc34d40bea9410f816961a1)]

Linux GUI其背后实现的原理

看到这里,相信大家应该已经实现了前面的效果了,那么或许大家也会好奇为啥它能从命令行的形式转换到 GUI 的形式,其背后又是怎样实现的?基于此,我特地又找了一些资料,总结如下。

关于在 wsl 实现 GUI 背后的原理,就需要谈到 X Window System ,相关资料来自 Wikipedia。

这是 MIT 与1984年提出的以位图图像显示图形化界面的一套软件规范及协议。像如今一些知名的桌面环境如 GNOME(在GNOME 3.10之后也可以在 Wayland 下运行)便是基于它实现的。

由于X只是工具包及架构规范,本身并无实际参与运作的实体,所以必须有人依据此标准进行开发撰写。如此才有真正可用、可执行的实体,始可称为实现体。

X采用 C/S 的架构模型,由一个X服务器与多个X客户端程序进行通讯,服务器接受对于图形输出(窗口)的请求并反馈用户输入(键盘、鼠标、触摸屏),服务器可能是一个能显示到其他显示系统的应用程序,也可能是控制某个PC的视频输出的系统程序,也可能是个特殊硬件。

X的一大特点在于 “网络透明性”:应用程序(“客户端”应用程序)所执行的机器,不一定是用户本地的机器(显示的“服务器”)。X中所提及的“客户端”和“服务器”等字眼用词也经常与人们一般想定的相反,“服务器”反而是在用户本地端的自有机器上执行,而非是在远程的另一部机器上执行。

服务器和客户端之间的通信协议的运作对计算机网络是透明的:客户端和服务器可以在同一台计算机上,也可以不是,或许其架构和操作系统也不同,但都能运行。客户机和服务器还能够使用安全连接在互联网上安全地通讯。

为了使远端客户程序显示到本地服务器,用户一般需要启动一个终端窗口和到达远端计算机的telnet或者ssh,令其显示到用户计算机,(例如:在运行bash的远端计算机上export DISPLAY=[用户的计算机]:0)然后启动客户端。然后客户端就会连接到本地计算机,并且远端应用程序会显示到本地屏幕并被本地输入设备所控制。与之对应,本地计算机上也可以执行一个连接到远端计算机的小型代理程序,并在该端启动与执行自有需求与指定的应用程序。

因此之前在 wsl Ubuntu 中安装 VcXsrv 之后,需要输入 export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 这一段命令,由于是在 wsl 中运行的 Ubuntu ,因此其对应的 ip 地址是 wsl 中的地址,如下图所示的 ip 地址才是对应的 wsl 中的地址:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BN18yKDV-1681733538632)(:/1b3a7e2285ff45069678bdbcee542e2b)]

与此同时用户计算机的 ip 地址为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P7RPUwah-1681733538633)(:/e109f83602644d2cb787dd89f67c8d4c)]

这两个是不一样的。

而对于 Xfce ,为了管理众多的窗口怎么在屏幕上显示,需要窗口管理器(Window manager)。窗口管理器可以实现一个屏幕上显示多个X程序,实现调整程序大小,标题栏,最大化,最小化,关闭按钮,虚拟桌面这些功能。没有WM,一次只能运行一个GUI程序,而且分辨率锁死,显然很不符合使用习惯。为了实现窗口之间的特效,还需要窗口合成器。窗口合成器可以制造半透明之类的特效。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花无凋零之时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值