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

2023-11-04

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wsl的图像化实现,在wsl中启动浏览器 的相关文章

  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • 即使使用 rvm pkg install zlib 后也无法加载此类文件 -- zlib

    我使用 rvm 安装了 zlib 包和 ruby 1 9 3 但是每当我尝试安装时 它说宝石cannot load such file zlib 我用来安装的命令是 rvm install 1 9 3 rvm pkg install zli
  • 如何为 Python 2 安装 pip

    I run python version and get Python 2 7 3 I run pip version and get pip 1 5 from usr local lib python3 2 dist packages p
  • Linux 阻塞与非阻塞串行读取

    I have 这段代码 https stackoverflow com questions 6947413 how to open read and write from serial port in c用于在Linux中从串行读取 但我不
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 早于 0.4.12 的 Node.js 无法在 AWS EC2 上正常工作。为什么?

    我无法在 AWS EC2 Ubuntu 或 CentOs 没关系 上安装 node js v0 6 1 安装后我输入node 处理器负载达到100 但 v0 4 12 工作正常 可能只有我有这个问题 那不好意思了 请告诉我我做错了什么 提前
  • 如何从命令行执行 PHP 代码?

    我想执行单个 PHP 语句 例如if function exists my func echo function exists 直接使用命令行 无需使用单独的 PHP 文件 这怎么可能 如果您要在命令行中执行 PHP 我建议您安装phpsh
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 如何在 Linux 中显示进程状态(阻塞、非阻塞)

    有没有办法查询 Linux 进程表中进程的状态 以便能够演示执行查询时进程是正在运行还是被阻止 我的目标是从进程或程序的 外部 执行此操作 因为我希望从操作系统进程的角度来理解这一点 但欢迎任何想法 这是Python代码阻塞的过程 impo
  • 警告:无法加载 sqljdbc_auth.dll 原因:java.library.path 中没有 sqljdbc_auth

    我正在使用 Ubuntu 12 05 并尝试连接到 Windows Server 2012 来获取数据库 我的数据库名称是 jobs 电脑的IP地址是192 160 1 33 托管在1433 但是当我尝试连接时出现以下错误 WARNING
  • C/C++ with GCC:静态地将资源文件添加到可执行文件/库

    有人知道如何使用 GCC 将任何资源文件静态编译为可执行文件或共享库文件吗 例如 我想添加永远不会改变的图像文件 如果它们改变了 我无论如何都必须替换该文件 并且不希望它们位于文件系统中 如果这是可能的 我认为这是因为 Visual C f
  • 在 macOS 上更改 libpcap 版本(Apple 删除了一项功能)

    我只想使用 tcpdump 和 Ubuntu 上提供的相同 Qout 功能 在 macOS 上 tcpdump 和 libpcap 已被剥离使用 Qout 进行过滤的功能 tcpdump Qout nnSX c 10 w packet pc
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • bash.sh 运行 cron 的权限被拒绝

    如何在这里使用 bash 脚本运行 cron 我做了如下操作 这里有错误 我想知道如何在 ubuntu 中做到这一点 我现在对它感到震惊 bash sh 文件 bin bash cd var www Controller usr bin p
  • 检查 Linux 中给定进程的打开 FD 限制

    我最近有一个 Linux 进程 泄露 了文件描述符 它打开了文件描述符 但没有正确关闭其中一些文件描述符 如果我对此进行监控 我就可以提前得知该过程已达到其极限 有没有一种很好的 Bash 或 Python 方法来检查 Ubuntu Lin
  • 警告构建使用导出符号的内核模块

    我有两个内核模块 例如 modA 和 modB modA 导出一个符号EXPORT SYMBOL symA modB 使用它 我有标题modA h对于modA extern void symA int param and in modB c
  • 如何使用 shell 脚本解压所有 .tar.gz?

    我试过这个 DIR path tar gz if ls A DIR 2 gt dev null then echo not gz else tar zxvf path tar gz C path tar fi 如果该文件夹有一个 tar 则
  • 如何更改Linux服务器中的MySQL表名不区分大小写?

    我正在开发一个旧网站 该网站曾经托管在 Apple 服务器上 当它迁移到新的 Linux 服务器时 它停止工作 我很确定这是因为 php 脚本中使用的所有 MySQL 查询对于表名都有不同的大小写组合 我不知道为什么原始开发人员在创建表名或
  • gnutls_handshake() 失败:握手失败 GIT

    一切都工作正常 但突然我收到错误 致命 无法访问 https 电子邮件受保护 cdn cgi l email protection name repo name git gnutls handshake 失败 握手失败 我在我的计算机和 E
  • 我可以告诉 Linux 不要交换特定进程的内存吗?

    有没有办法告诉 Linux 它不应该将特定进程的内存交换到磁盘 它是一个 Java 应用程序 所以理想情况下我希望有一种方法可以从命令行执行此操作 我知道您可以将全局交换性设置为 0 但这明智吗 您可以通过以下方式执行此操作姆洛克尔 2 h

随机推荐

  • nestjs:docker build时执行npm install sharp提示downloading libvips socket hang up

    问题 如题 参考 sharp High performance Node js image processing 参考chinese mirror处理 原因 默认是从github上下载libvips库 但是使用socket协议 linux下
  • STM32 进阶教程 6 -  汇编与C混合编程

    前言 在嵌入式开发过程中 有时候为了追求代码性能与效率不得不采用汇编语言来编写代码 但是汇编代码在阅读时表现不如C语言友好 本节给大家介绍一种新的方法 关键代码用汇编语言时行实现 然后用C语言时行接封装 用C语言与汇编语言混合编程的方式 在
  • DELL T420塔式服务器RAID配置及OS安装

    一 DELL T420塔式服务器RAID配置 1 服务器RAID卡配置 开机看到CTRL R的提示后及时按下CTRL R进到阵列卡配置界面 进去之后光标默认就在阵列卡型号上 比如 PERC H310 PERC H710 PERC H710P
  • C++装饰者模式:Decorator Pattern

    设计原则 类应该对扩展开发 对修改关闭 装饰者可以在所委托被装饰者的行为之后加上自己的行为 以达到特定的目的 装饰者模式 动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 装饰者和被装饰者必须是一样的类型 也就是
  • 多目标跟踪算法之SORT

    本文首发于微信公众号 DeepDriving 欢迎关注 简介 SORT是2016年发表的一篇文章 Simple Online and Realtime Tracking 中提出的一个经典的多目标跟踪算法 该算法结合常用的卡尔曼滤波器和匈牙利
  • 服务器128g内存显示64g,64g内存服务器

    64g内存服务器 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 接口名称GetCloudPhoneServerModel
  • httprunner 3.x学习1 - 环境安装与准备

    前言 httprunner 3 x最大的改变是执行用例用的是 python 的 pytest 框架 支持3种格式的用例 YAML JSON pytest 代码 对比 httprunner 2 x 以前版本 早期版本用的是 unittest
  • el-select 默认值显示value不显示label问题

    el select 默认值显示value不显示label问题 在做编辑页面时 需要取到列表项数据回显默认值 在做select回显的时候遇到了这个问题 明明拿到的值和value中的值一样 但是就是不转换成label 这种情况一般出现在valu
  • 清除苹果服务器位置,苹果桌面三大清理工具_服务器评测与技术-中关村在线

    值得庆幸的是 Mac App Store的有三个应用程序 可以帮助你整理桌面 保证你的桌面整洁干净 前两者都是免费的 在桌面上扫描文件和文件夹时 只要一个命令 就能按照你的原设置整理文件夹 第三虽然是付费但是功能强大 能够隐藏你的文件 即保
  • 测试框架pytest教程(2)-用例依赖库-pytest-dependency

    对于 pytest 的用例依赖管理 可以使用 pytest dependency 插件 该插件提供了更多的依赖管理功能 使你能够更灵活地定义和控制测试用例之间的依赖关系 Using pytest dependency pytest depe
  • 大数据面试题:MapReduce压缩方式

    面试题来源 大数据面试题 V4 0 大数据面试题V3 0 523道题 679页 46w字 可回答 1 Hadoop常见的压缩算法有哪些 问过的一些公司 网易云音乐 2022 11 阿里 2020 08 参考答案 1 MapReduce支持的
  • java-web eclipse内tomcat无法访问网页 Google浏览器可以

    java web eclipse内tomcat无法访问网页 Google浏览器可以 1 eclipse 安装的Tomcat服务无法访问问网页 浏览器不可以 只有从tomcat 安装目录下启动startup bat或tomcat9 0自带的t
  • ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR解决办法

    windows开发 调用 InternetQueryOption 函数失败 错误码 12178 ERROR WINHTTP AUTO PROXY SERVICE ERROR 解决方法 运行 services msc 服务 WinHTTP W
  • git merge合并分支,解决冲突

    1 git merge示意 git merge 用来做分支合并 将其他分支中的内容合并到当前分支中 比如分支结构如下 master C0 C1 C2 C4 C3 C5 issueFix 当前分支是master git checkout ma
  • android:configChanges属性总结

    http blog csdn net zhaokaiqiang1992 article details 19921703 android中的组件Activity在manifest xml文件中可以指定参数android ConfigChan
  • VSCode使用 - Remote-SSH 配置说明

    By Ailson Jack Date 2022 06 17 个人博客 http www only2fire com 本文在我博客的地址是 http www only2fire com archives 147 html 排版更好 便于学习
  • Kafka(生产者)

    Kafka 1 概述 1 1 消息队列 1 1 1 传统消息队列的应用场景 1 1 2 消息队列的两种模式 1 2 kafka基础结构 2 kafka的快速入门 2 1 集群部署 2 1 1 安装java 2 1 2 部署zookeeper
  • 第八课 SpringBoot2基础-指标监控

    第八课 SpringBoot2基础 指标监控 tags Spring Boot 2021尚硅谷 雷丰阳 文章目录 第八课 SpringBoot2基础 指标监控 第一节 SpringBoot Actuator简介 第二节 Actuator端点
  • 能不能把js文件放在服务器上,为什么要把 JavaScript 放到服务器端上运行?

    原标题 为什么要把 JavaScript 放到服务器端上运行 因为在当年 Node js的作者Ryan Dahl是一名资深的C C 程序员 在创造出Node之前 他的主要工作都是围绕高性能Web服务器进行的 经历过一些尝试和失败之后 他找到
  • wsl的图像化实现,在wsl中启动浏览器

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