WSL下使用VcXsrv启动chromium browser及常见错误解析 (ubuntu18.04, 图形界面)

先说结论,解决方法在最后:

启动浏览器实质是启动图形界面,推广到其他GUI程序同样适用。

目前在WSL环境下通过VcXsrv这个X server启动图形界面相对简单,但仍存在兼容性问题,配置仍需完善。

环境:

win10系统安装ubuntu18.04的命令行工具(通过Microsoft Store安装)

背景:

正在阅读headfirst C(即嗨翻C语言)的P445,涉及以下关于不同系统启动特定浏览器的代码,用于启动特定浏览器;

void open_url(char *url)
{
char launch[255];
sprintf(launch, "cmd /c start %s", url);
system(launch);#windows
sprintf(launch, "x-www-browser ‘%s‘ &", url);
system(launch);#linux
sprintf(launch, "open ‘%s‘", url);
system(launch);#mac os
}

希望能在ubuntu命令行模拟linux下特定浏览器的启动。

过程:

最后选择安装chromium-browser, 一个开源的浏览器,运行以下命令即可:

$ sudo apt install chromium-browser

安装完毕后运行:

[email protected]:~$ chromium-browser

(chromium-browser:3733): Gtk-WARNING **: 22:32:21.618: cannot open display: :0.0

显示cannot open display, 即图形界面无法打开,;

起初以为是root权限问题,启动root,运行第一次,失败;

按提示加入--no-sandbox命令,运行第二次,失败,同样显示cannot open display;

结果如下:

[email protected]:~# chromium-browser
[3764:3764:0911/223502.207627:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
[email protected]:~# chromium-browser --no-sandbox

(chromium-browser:3771): Gtk-WARNING **: 22:37:11.445: cannot open display: :0.0

这里可以基本确定并非权限问题,但当时并没有反应过来,依旧以权限问题进行探索;

①有文章提到分别修改以下文件

/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf

/etc/pam.d  gdm-autologin和gdm-password

vi /root/.profile

测试结果:无效,如果你一样是安装了Ubuntu 18.04 LTS for Windows 10的话(当然还有个desktop版本的,有兴趣可尝试命令行下载),

会发现自己找不到前三个文件,即lightdm和gdm这两个关于图形管理器的package,均未安装,你还得安装后才能修改、测试。

②有文章提到命令“ xhost +”, 即授予所有用户接入X window server的权限,于是所有用户都可以使用当前图形界面。

首先必须明确运行这个命令,存在漏洞隐患,该隐患同样存在linux系统上。

通过xhost +"name",授予特定客户端权限即可,然而依旧无效,无法成功启动浏览器。

到这里,唯有换种思路,无意发现一个叫X server的package,

一番了解后才初步明白在原生的linux生态中,图形界面功能只有在需要时才会被调用,需有特定的协议,配置特定的管理器,服务器才能成功调用,这与windows界面和系统本身是一体化的特点完全不同。

ubuntu18.04 自带的X server启动后发现以下错误,并自行终止:

Fatal server error:
(EE) parse_vt_settings: Cannot open /dev/tty0 (Input/output error)
(EE)
(EE)
Please consult the The X.Org Foundation support
         at http://wiki.x.org
 for help.
(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
(EE)
(EE) Server terminated with error (1). Closing log file.

实际上不存在/dev/tty0这个文件,查看log以及根据错误信息暂未能找到解决办法,基本确定是接口问题;

中间又尝试安装xinit package, 试图通过startx来启动X server, 但一直显示“unable to connect to X server: Connection refused”,多番尝试debug, 无果。

最终解决:

考虑换个x server, 经过简单筛选,发现VcXsrv非常适合在WSL环境下使用;

暂不支持直接bash命令安装,可在以下链接下载后安装,成功安装后启动,选择Display number(一般为0),一直“下一步”直到完成,此时该server应该已在后台运行。

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

启动chromium前, 先设置环境变量DISPALY:

$ export DISPALY=:0.0 #临时设置

$ sudo vim/etc/profile #永久设置

#添加如下语句, 保存
export DISPALY=:0.0
$ source profile #使之生效

设置完成后,终于可以成功启动chromium, 但仍旧会看到如下Error 信息:

[1999:2014:0910/221026.556210:ERROR:bus.cc(394)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_so
shared memfd open() failed: Function not implemented
[1999:2084:0910/221027.474278:ERROR:bus.cc(394)] Failed to connect to the bus: Could not parse server address: Unknown address type (e
nd on UNIX "unix")
libGL error: No matching fbConfigs or  visuals found
libGL error: failed to load driver: swrast 

(chromium-browser:1999): LIBDBUSMENU-GLIB-WARNING **: 22:10:28.019: Unable to get session bus: Unknown or unsupported transport “disa
[1999:1999:0910/221028.173247:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context.
[4:12:0910/221028.255848:ERROR:command_buffer_proxy_impl.cc(113)] ContextResult::kFatalFailure: Shared memory handle is not valid

错误解析:

先说第一个ERROR:bus.cc(394), wsl下需要先手动启动dbus service, 才能建立与chromium socket 的连接。

$ sudo service dbus start

再说这个libGl error,  无匹配的帧缓存设置和视图, 无对应swrast驱动

可以发现在关闭openGL 选项,该错误即消失,说明wgl(windows自带图像处理器)跟chromium存在兼容问题。

最后一部分中关于GPU的错误信息暂无解决办法,可以明确的一点是Ubuntu 18.04 LTS for Windows 10 暂不提供GPU支持,如果希望开发者提供该功能,不妨到以下链接去投个票。

https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/16108045-opencl-cuda-gpu-support

此外,启动chromium后将发现中文无法正常显示,这是因为缺少字体库,执行以下命令修复即可:

$ sudo apt install ttf-wqy-microhei
$ sudo apt install fonts-wqy-microhei
$ sudo apt install ttf-wqy-zenhei

拓展:

理解X server在图形界面调用时的作用

图形启动基本架构  操作系统-->X Server<-X 协议(server 与 manager之间进行通信)->窗口管理器(GDM)-->X应用程序

OS向X server 提出请求,server 通过X协议转发请求给manager,manager返回许可信息,如通过则继续向X应用发出启动进程指令,应用由此产生图形界面。

待解决:

①安装linux显卡驱动如navdia-390来解决swrast问题, 是否会与Windows驱动冲突?

②第二个ERROR:bus.cc(394)中基于windows的VcXsrv地址类型,dbus库明显无法对其解析,可通过何途径解决?

③ContextResult暂查不到相关信息,与shared memory 又有何关系?

重要参考链接

https://github.com/Microsoft/WSL/issues/2941

https://github.com/Microsoft/WSL/issues/1788

https://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds6/xhost.htm

https://zh.wikipedia.org/wiki/X%E6%98%BE%E7%A4%BA%E7%AE%A1%E7%90%86%E5%99%A8

https://blog.csdn.net/xiongchun11/article/details/80606106

https://zhidao.baidu.com/question/18378361.html

原文地址:https://www.cnblogs.com/freestylesoccor/p/9630758.html

时间: 2024-12-07 01:56:42

WSL下使用VcXsrv启动chromium browser及常见错误解析 (ubuntu18.04, 图形界面)的相关文章

让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改 [文章摘要] Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中. 本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法. [关键词] VC++  Pclint  配置  操作  修改 1. 前言 P

linux下的ubuntu12.04图形界面

系统安装好之后在命令行中先输入 startx命令看看能不能切换到图形界面,如果可以则说明您的镜像文件包含的有 若没有则我们需要在安装图形界面在命令行中输入sudo apt-get install ubuntu-desktop   即可 接下来的过程就需要操作了慢慢的等待一个小时即可 安装好之后可以进行切换按ctrl+alt+1-6同时按则跳换到命令行界面,接下来我们在按ctrl+alt+7即可跳换到图形界面 能成功切换那么我们安装成功! 原文地址:https://www.cnblogs.com/

[转帖]linux下的X server:linux图形界面原理

linux下的X server:linux图形界面原理 https://www.cnblogs.com/liangxiaofeng/p/5034912.html linux下的X server:linux图形界面原理 Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开机后直接进入文本命令行,所以这方面了解得很少,需要学习一下. 严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用L

ubuntu18.04下eclipse配置及快捷方式创建

我们在windows下开发时间长了,大家可能知道,eclipse是不需要安装的,只需要解压后,配置好环境变量就可以使用了,但是在Linux下可能出现一些问题,下面我们基于最新的Ubuntu18.04及最新的eclipse来说明eclipse的使用,接下来两步就可以快速使用了. 1.创建快捷方式 Linux下快捷方式目录在/usr/share/applicaitons/ 创建eclipse.desktop [Desktop Entry] Encoding=UTF-8 Name=eclipse Ex

[Linux] - 为 WSL 添加 VcXsrv 图形界面

#1. 在 Win10 的 Microsoft Store 中安装了 ubuntu18.04,更换为国内源. #2. 在 WSL 中安装 xfce4 桌面环境 $ sudo apt-get install xfce4 #3. 配置 .bashrc   $ cd ~ $ nano .bashrc 在最后一行添加 export DISPLAY=:0.0 #4. 下载并安装 VcXsrv Windows X Server https://sourceforge.net/projects/vcxsrv/

Android WebView启动Chromium渲染引擎的过程分析

Android WebView加载了Chromium动态库之后,就可以启动Chromium渲染引擎了.Chromium渲染引擎由Browser.Render和GPU三端组成.其中,Browser端负责将网页UI合成在屏幕上,Render端负责加载网页的URL和渲染网页的UI,GPU端负责执行Browser端和Render端请求的GPU命令.本文接下来详细分析Chromium渲染引擎三端的启动过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Andro

早上在linux下用selenium启动Chrome时出现问题:

早上在linux下用selenium启动Chrome时出现问题:报错: Traceback (most recent call last): File "get2.py", line 62, in <module> browser = webdriver.Chrome() File "/root/.pyenv/versions/anaconda3-5.1.0/lib/python3.6/site-packages/selenium/webdriver/chrome

Ubuntu图形界面环境下启动应该程序:

1.先说下Ubuntu14.04系统开机紫框的问题: Grub theme:黑色屏幕出现紫色边框 There's a minor typo on the grub theme which produces a black screen with purple border before the grub menu is drawn and on Plymouth start. AIUI, there's a `!` (negation) missing before the background

破解windows下MySQL服务启动不了的情况下不能对其进行完全卸载的解决方案

以下的文章主要介绍的是在MySQL服务启动不了的情况下,不能对其进行完全卸载的实际解决办法的描述,以下就是对解决MySQL服务启动不了的情况下具体方案的描述,希望在你今后的学习中会对你有所帮助. MySQL 5.1 安装过程中报apply security setting错误的解决办法 1, 卸载MySQL 2, 删除目录 C:\Documents and Settings\All Users\Application Data\MySQL 3, 重新安装MySQL 就 OK 啦 [MySQL]