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

最近在学习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程序,而且分辨率锁死,显然很不符合使用习惯。为了实现窗口之间的特效,还需要窗口合成器。窗口合成器可以制造半透明之类的特效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/12698.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web后端-请求响应

概述 我们之前在Spring写的 Java类,因为没有继承任何的接口 所以tomcat其实是不识别的,也不能直接运行 但是tomcat识别JavaEE的一项规范-Servlet,因为tomcat就相当于一个Servlet容器 SpringBoot底层提供了一个DisPatcherServlet类(实现了servlet接口)…

【linux】 安装 java 环境

目录 1.检查linux 下是否安装java(jdk)环境2.查看 linux 的操作系统版本3.下载jdk4.新建java文件夹用于安装jdk5.将下载到本地的jdk压缩包上传到linux服务器6.配置环境变量 1.检查linux 下是否安装java(jdk)环境 可通过下面五条命令来查看linux 系统是否安装了java 环境 1、jav…

建筑行业为什么要数字化转型?

建筑行业为什么要数字化转型? 建筑行业作为国民经济的重要支柱产业之一,其生产过程繁琐、复杂,且产业链条长,涉及众多领域。 然而,目前传统的建筑模式已经无法适应行业的发展需求,建筑行业的数字化转型已…

java SimpleDateFormat和Calendar日期类

目录 一、SimpleDateFormat使用二、Calendar使用 一、SimpleDateFormat使用 使用Date直接输出日期时,是使用系统默认的格式输出,所以需要使用SimpleDateFormat来格式化日期。 那么SimpleDateFormat类怎么使用呢,我们需要先了解此类的格式化符…

8.Java面向对象---类、属性和方法

Java面向对象—类、属性和方法 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等。而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类。同…

Java多线程

一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程。当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程。 进程&#x…

Faster-RCNN代码解读6:主要文件解读-中

Faster-RCNN代码解读6:主要文件解读-中 前言 ​ 因为最近打算尝试一下Faster-RCNN的复现,不要多想,我还没有厉害到可以一个人复现所有代码。所以,是参考别人的代码,进行自己的解读。 ​ 代码来自于B站的UP主&#xff…

【Linux系统】理解Linux中进程间通信

Linux进程间通信 1 进程间通信的介绍1.1为什么要有进程间通信1.2 为什么能进程间通信 2 进程间通信的框架2.1 进程间通信机制的结构2.2 进程间通信机制的类型2.2.1 共享内存式2.2.2 消息传递式 2.3 进程间通信的接口设计 3 进程间通信机制简介4 详细讲解进程间通信部分机制&…

文献管理软件Endnote、Mendeley、Zotero比较及选择,Zotero基础使用技巧

引言 大家好,我是比特桃。日常开发的项目分为两种,一种是成熟化的工程项目,只需要与具体的业务紧密结合及应用,难点也比较偏向于软件工程或者互联网高并发的方向。这种项目我们通常不会选择去查文献去寻找问题的解决办法&#xf…

Altium Designer 20 导出 Gerber 制造文件流程及注意事项

一、导出 Gerber 流程 设置原点:在Edit菜单中选择Origin-Set (快捷键E-O-S)定好原点,一般放在左下角附近即可。 放置分孔图表:在Place菜单中选择String放置“.Legend”(快捷键P-S)…

【java】maven引用外部 jar 包,以RXTXcomm.jar为例

目录 1.作为资源文件夹内的资源引用2.将jar包手动安装到maven仓库 工具:IntelliJ IDEA 2020.2.3 x64 1.作为资源文件夹内的资源引用 1.在项目根路径新建文件夹lib, 将资源文件复制到该文件夹。 2.将文件夹设置为资源文件夹:选中文件夹lib右键 -> Mak…

Activity启动模式

Activity的启动模式 首先activity启动之后是放在任务栈中的,task stack,既然是栈,遵循先进后出原则。有玩家比喻oncreate是入栈,onDestroy是出栈。 同一个APP中,不同的activity可以设置为不同的启动模式。在manifest…

【Kafka】SASL认证的Kafka客户端代码示例(spring-kafka和原生客户端)

文章目录 spring-kafka原生客户端Tips spring-kafka 添加依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.6.3</version></dependency>添加spr…

【springcloud 微服务】Spring Cloud Alibaba Nacos使用详解

目录 一、前言 二、nacos介绍 2.1 什么是 Nacos 2.2 nacos 核心能力 2.2.1 服务发现和服务健康监测 2.2.2 动态配置服务 2.2.3 动态 DNS 服务 2.2.4 服务及其元数据管理 2.2.5 nacos生态地图 2.3 与其他配置中心对比 三、nacos快速部署 3.1 获取安装包 3.2 修改脚…

电阻器的原理、类型、参数以及生活中常见的应用

电阻器是电子电路中最基本的元件之一&#xff0c;它的作用是限制电流流过的大小&#xff0c;在电子电路中广泛应用于电流控制、电压分压、信号衰减等方面。在本文中&#xff0c;我们将详细介绍电阻器的原理、类型、参数以及生活中常见的应用。 一、电阻器的原理 电阻器是一种…

go语言切片做函数参数传递+append()函数扩容

go语言切片函数参数传递append()函数扩容 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 二叉树递归go代码&#xff1a; var ans [][]int func pathSum(root *TreeNode, targetSum int) ( [][…

ActiveMQ使用(四):在JavaScript中发送的MQTT消息在SpringBoot中变为字节数组

ActiveMQ使用(四):在JavaScript中发送的MQTT消息在SpringBoot中变为字节数组 1. 问题描述 JmsListener(destination "test_producer", containerFactory "topicListenerContainer")public void receiveTestProducer(String message) throws JMSExceptio…

spring bean

图灵课堂学习笔记 1. BeanFactory与ApplicationContext的关系 p56 ApplicationContext在BeanFactory基础上对功能进行了扩展&#xff0c;例如&#xff1a;监听功能、国际化功能等。BeanFactory的API更偏向底层&#xff0c;ApplicationContext的API大多数是对这些底层API的封…

JVM OOM问题排查与解决思路

OOM原因 1. 堆溢出 报错信息&#xff1a; java.lang.OutOfMemoryError: Java heap space 代码中可能存在大对象分配&#xff0c;无法获得足够的内存分配 可能发生内存泄露&#xff0c;导致内存被无效占用以至于耗尽 2. 永久代/元空间溢出 报错信息&#xff1a; java.lang.O…

C#,码海拾贝(19)——一般实矩阵的QR分解(QR Decomposition)方法之C#源代码,《C#数值计算算法编程》源代码升级改进版

1 实矩阵 实矩阵&#xff0c;指的是矩阵中所有的数都是实数的矩阵。如果一个矩阵中含有除实数以外的数&#xff0c;那么这个矩阵就不是实矩阵。 2 QR&#xff08;正交三角&#xff09;分解法 QR&#xff08;正交三角&#xff09;分解法是求一般矩阵全部特征值的最有效并广泛应…
最新文章