安装google chrome 以及 google chrome driver的错误处理

上一级页面:index-wsl

自查驱动问题(必做)

许多error的问题根源是驱动配置不正确

依次按照列表顺序配置,注意不要启用强制软件渲染(不要设置export LIBGL_ALWAYS_SOFTWARE=1)

dbus报错

1
# Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

dbus是否启动?systemd是否正常?见配置dbus和dbus-daemon

FONTCONFIG_PATH报错

报错:

1
Fontconfig error: Cannot load default config file: No such file: (null)

您需要正确设置$FONTCONFIG_PATH。通常它被设置在/etc/profile中,见配置fontconfig_path

中文无法正常显示

这是因为缺少中文字体库,执行以下命令修复即可:

安装中文字体库见linux-如何添加字体

GPU process due to errors during initialization /dri3 extension not supported.

1
2
3
4
5
[9576:9576:0511/214414.814180:ERROR:viz_main_impl.cc(185)] Exiting GPU process due to errors during initialization
[14059:14059:0512/000645.965947:ERROR:gpu_memory_buffer_support_x11.cc(44)] dri3 extension not supported.

[9603:7:0511/214415.001982:ERROR:command_buffer_proxy_impl.cc(125)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.

dri3是一种减轻Xorg用户的屏幕撕裂的解决方案,它与gpu_memory_buffer有关,并且依赖于mesavulkan工作,

故需要正确安装dri3依赖,并且正确安装配置mesavulkan依赖,并要求mesavulkan能够正确工作在linux中

  • Mesa,也称为Mesa3D和Mesa 3D图形库,是OpenGL,Vulkan和其他图形API规范的开源软件实现。Mesa根据规范转换特定供应商的图形硬件驱动程序。

实际上,在默认情况下,在Xorg和Wayland会话中都启用了dri3支持,详见Enable DRI3 by default in 18.04? - Desktop - Ubuntu Community Hub

dri3的正常运行由两个部分组成,

一方面在wsl中应当正确安装dri3依赖,并且开启dri3支持,

另外一方面,mesavulkan方面也要正确配置并正常工作,

你可以通过下列命令来查看你的X org是否正在使用dir3

1
grep DRI /var/log/Xorg.0.log

或是使用命令

1
xdpyinfo | grep DRI

如果有返回,说明正在使用DIR2或DIR3,如果没有任何返回值,那么你可能并没有启用dir3,或是启用了但它不能正常工作

这种情况下,首先尝试安装dir3依赖,

  • Ubuntu(1804及更近的发行版)有自带的DIR3依赖包并且默认启用

安装dir3依赖并设置为自动安装

1
2
sudo apt -y install libxcb-dri3-0
sudo apt-mark auto libxcb-dri3-0

之后继续运行命令xdpyinfo | grep DRI,发现还是没有任何返回值,故考虑不是dir3依赖包的问题,

  • Ubuntu有自带的DIR3依赖,并且默认启用,除此之外,在Xorg和Wayland会话中都自带了DIR3的依赖包,并且也都默认启用DIR3,
  • WSLG提供了完美的GUI依赖支持,WSLG已经提供了完美的pulseaudio``和xwayland等依赖支持,故如果使用WSLG,那么在wsl中不应当再安装Wayland,通过WSLG就可以获取开箱即用的体验,详情见index-wslg

接着排查是否是mesavulkan的问题

通过查询,核心的步骤是要检查Mesa版本和Vulkan API 版本,issue见DIR 3 (321040)GitHub

Mesa版本和Vulkan API的完整的依赖列表,可以参考Enabling Vulkan* VK_INTEL_performance_query extension in Ubuntu*

但先不要按照Enabling Vulkan* VK_INTEL_performance_query extension in Ubuntu*的要求安装依赖

先依次运行指令,检查mesa和vulkan的支持情况

1
glxinfo -B | grep "profile version string"

Pasted image 20220609192741

1
vulkaninfo | grep apiVersion

Pasted image 20220609192808

事情排查的很清楚了:vulkan的依赖或支持存在问题

继续查询资料发现,WSL2上,现阶段根本不支持vulkan,见wsl2开启vulkan-opencl-supportwsl-cuda-opengl-opencl-vulkan支持情况

所以等待吧,等待日后wsl官方支持vulkanvulkan的支持问题解决了,再正确配置mesa和vulkan,DIR3应该就正常运行了

GPU信息报错的问题

1
2
3
4
5
[9576:9576:0511/214414.814180:ERROR:viz_main_impl.cc(185)] Exiting GPU process due to errors during initialization
[14059:14059:0512/000645.965947:ERROR:gpu_memory_buffer_support_x11.cc(44)] dri3 extension not supported.

[9603:7:0511/214415.001982:ERROR:command_buffer_proxy_impl.cc(125)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.

继续查询资料发现:这类GPU报错信息可能是由于OPENCL/VULKAN等在wsl2上的支持不完备所导致,

因为OPENCL/VULKAN支持不完备,导致出现各种奇怪的报错,关于WSL上的支持进度,可以关注这篇最新情况:wsl-cuda-opengl-opencl-vulkan支持情况

关于这类GPU的错误信息实际上开发者无法解决,等待上游的WSL2更新,进行支持吧,

这类GPU报错信息可能是由配置项、硬件驱动等原因所导致,比如我通过正确的配置gpu驱动和opengl解决了其中的部分错误,解决方法如下:

  • 但注意的是,DIR3现阶段由于vulkan的问题还无法解决

依次按照列表顺序配置,注意不要启用强制软件渲染(不要设置export LIBGL_ALWAYS_SOFTWARE=1)

EGL报错

报错信息

1
2
3
4
5
6
7
[9576:9576:0511/214414.775787:ERROR:angle_platform_impl.cc(44)] Display.cpp:977 (initialize): ANGLE Display::initialize error 12289: Invalid visual ID requested.
[9576:9576:0511/214414.776109:ERROR:gl_surface_egl.cc(837)] EGL Driver message (Critical) eglInitialize: Invalid visual ID requested.
[9576:9576:0511/214414.776418:ERROR:gl_surface_egl.cc(1473)] eglInitialize OpenGL failed with error EGL_NOT_INITIALIZED, trying next display type
[9576:9576:0511/214414.777831:ERROR:angle_platform_impl.cc(44)] Display.cpp:977 (initialize): ANGLE Display::initialize error 12289: Invalid visual ID requested.
[9576:9576:0511/214414.778129:ERROR:gl_surface_egl.cc(837)] EGL Driver message (Critical) eglInitialize: Invalid visual ID requested.
[9576:9576:0511/214414.778363:ERROR:gl_surface_egl.cc(1473)] eglInitialize OpenGLES failed with error EGL_NOT_INITIALIZED
[9576:9576:0511/214414.778546:ERROR:gl_ozone_egl.cc(21)] GLSurfaceEGL::InitializeOneOff failed.

这个报错的意思是环境中没有 EGL ,初始化窗口会失败。

EGL有官方文档:EGL Reference Pages (khronos.org)

先查看驱动是否正常配置,wsl2的驱动配置与正常的Linux区别很大,所以按照这篇文章来配置:wsl2安装配置gpu驱动

然后按照这篇文章正确的配置OpenGL,注意不要启用强制软件渲染(不要设置export LIBGL_ALWAYS_SOFTWARE=1):opengl配置问题-取消强制软件渲染

在全都按照文章正确配置的情况下,

如果还是有上述的报错,我找到了解决方案:fix it

实际原因是不小心启用了强制软件渲染(export LIBGL_ALWAYS_SOFTWARE=1),具体见opengl配置问题-取消强制软件渲染

但如果你确实有开发opengl的需求,必须启用强制软件渲染,那么可以手动使用下列命令,临时解决问题

1
google-chrome --use-gl=egl

EGL参数详解

Pasted%20image%2020220511231316.png

google-chrome的--use-gl默认使用desktop,它是由你的桌面环境使用的OpenGL决定的。

临时的解决方案就是手动指定渲染器为egl

具体可以见ArchLinux提供的官方文档Chromium (简体中文) - ArchWiki (archlinux.org)

  • 如果想在 Xorg 上使用系统提供的 GL 渲染器,使用 --use-gl=egl--use-gl=desktop两个参数之一
  • 如果想在 XWayland 上使用系统提供的 GL 渲染器,使用--use-gl=egl 参数 (在一些系统上可能存在 bug:FS#67035).

深入搜寻,发现chrouim源码中的这一段写着所有可用的渲染器选项,见gl_switches.cc - Chromium Code Search

Pasted%20image%2020220511225552.png

--use-gl 参数的选项包括:

  • desktop:用户安装的任何桌面OpenGL(Linux和Mac默认)。

  • egl:用户安装的任何EGL/GLES2(Windows默认选项,在windows 实际上是用ANGLE实现的)。

  • angle:ANGLE 是 OpenGL ES 2.0 规范的实现,通过 Direct3D 9 进行硬件加速。

  • osmesa:OSMesa软件渲染器。

  • swiftshader:SwiftShader软件渲染器。

解决报错:Passthrough is not supported, GL is swiftshader

1
[14059:14059:0512/000645.919156:ERROR:gpu_init.cc(481)] Passthrough is not supported, GL is swiftshader, ANGLE is

错误信息Passthrough is not supported, GL is swiftshader可能是在 Chromedriver 版本 89 之后显示的错误信息。

这个报错不影响正常浏览,但如果你在代码中调用chrome driver,它可能造成你的程序停止运行,解决方案如下:

它一般发生在你手动指定EGL进行软件渲染后,

解决方案是依次按照列表顺序配置,注意不要启用强制软件渲染(不要设置export LIBGL_ALWAYS_SOFTWARE=1)

之后如果还有问题,那么有两个临时解决方案:

方案一:

使用chromedriver时,一般指定--headless--disable-gpu参数,可以不显示浏览器的窗口,如果你如果使用了这两个选项,则会出现上述错误消息。

如果不使用这两个选项,则不会出现错误消息。

方案二:

也可以使用--disable-software-rasterizer 参数,禁用 WebGL,在不显示窗口的模式下,也不显示错误消息。

解决报错:Passthrough is not supported, GL is disabled

错误信息

1
Passthrough is not supported, GL is disabled

这个报错不影响正常浏览,但如果你在代码中调用chrome driver,它可能造成你的程序停止运行,解决方案如下:

它一般发生在你手动指定EGL进行软件渲染后,

解决方案是依次按照列表顺序配置,注意不要启用强制软件渲染(不要设置export LIBGL_ALWAYS_SOFTWARE=1)

然后如果还有问题,可以采用临时解决方案:

方案一:

使用chromedriver时,一般指定--headless--disable-gpu参数,可以不显示浏览器的窗口,如果你如果使用了这两个选项,则会出现上述错误消息。

如果不使用这两个选项,则不会出现错误消息。

方案二:

也可以使用--disable-software-rasterizer 参数,禁用 WebGL,在不显示窗口的模式下,也不显示错误消息。

方案三:

先尝试上面的方案一、二,如上面方法不能解决,也可以尝试使用下列参数来解决。

1
-enable-webgl --no-sandbox --disable-dev-shm-usage

Floss manager not present, cannot set Floss enable/disable.

这是个waring,不影响开发

1
google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot http://www.baidu.com/
1
2
3
[0512/132305.563798:WARNING:bluez_dbus_manager.cc(248)] Floss manager not present, cannot set Floss enable/disable.
[0512/132306.383886:WARNING:sandbox_linux.cc(377)] InitializeSandbox() called with multiple threads in process gpu-process.
[0512/132306.808206:INFO:headless_shell.cc(660)] Written to file screenshot.png.

查了一些源代码,Floss manager not present, cannot set Floss enable/disable.这个报错的意思是OnFlossObjectManagerNotSupported。见device/bluetooth/dbus/bluez_dbus_manager.cc - chromium/src - Git at Google (googlesource.com)

没看懂,可能是dbus的问题,见wsl2开启systemctl命令简单方法

首先正常启用systemd,然后启动dbus和dbus守护程序,配置dbus和dbus-daemon

致谢

WSL下使用VcXsrv启动chromium browser及常见错误解析 (ubuntu18.04, 图形界面) - 豆花三烧 - 博客园 (cnblogs.com)

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