安装google chrome 以及 google chrome driver的错误处理
上一级页面:index-wsl
自查驱动问题(必做)
许多error的问题根源是驱动配置不正确
依次按照列表顺序配置,注意不要启用强制软件渲染
(不要设置export LIBGL_ALWAYS_SOFTWARE=1
)
dbus报错
# Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
dbus是否启动?systemd是否正常?见配置dbus和dbus-daemon
FONTCONFIG_PATH报错
报错:
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.
[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
有关,并且依赖于mesa
和vulkan
工作,
故需要正确安装dri3依赖,并且正确安装配置mesa
和vulkan
依赖,并要求mesa
和vulkan
能够正确工作在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支持,
另外一方面,mesa
和vulkan
方面也要正确配置并正常工作,
你可以通过下列命令来查看你的X org是否正在使用dir3
,
grep DRI /var/log/Xorg.0.log
或是使用命令
xdpyinfo | grep DRI
如果有返回,说明正在使用DIR2或DIR3,如果没有任何返回值,那么你可能并没有启用dir3,或是启用了但它不能正常工作
这种情况下,首先尝试安装dir3依赖,
- Ubuntu(1804及更近的发行版)有自带的DIR3依赖包并且默认启用
安装dir3依赖并设置为自动安装
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
接着排查是否是mesa
和vulkan
的问题
通过查询,核心的步骤是要检查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的支持情况
glxinfo -B | grep "profile version string"
vulkaninfo | grep apiVersion
事情排查的很清楚了:vulkan
的依赖或支持存在问题
继续查询资料发现,WSL2上,现阶段根本不支持vulkan
,见wsl2开启vulkan-opencl-support和wsl-cuda-opengl-opencl-vulkan支持情况
所以等待吧,等待日后wsl官方支持vulkan
,vulkan
的支持问题解决了,再正确配置mesa和vulkan,DIR3应该就正常运行了
GPU信息报错的问题
[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报错
报错信息
[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的需求,必须启用强制软件渲染
,那么可以手动使用下列命令,临时解决问题
google-chrome --use-gl=egl
EGL参数详解
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
--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
[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
错误信息:
Passthrough is not supported, GL is disabled
这个报错不影响正常浏览,但如果你在代码中调用chrome driver,它可能造成你的程序停止运行,解决方案如下:
它一般发生在你手动指定EGL进行软件渲染后,
解决方案是依次按照列表顺序配置,注意不要启用强制软件渲染
(不要设置export LIBGL_ALWAYS_SOFTWARE=1
)
然后如果还有问题,可以采用临时解决方案:
方案一:
使用chromedriver时,一般指定--headless
和--disable-gpu
参数,可以不显示浏览器的窗口,如果你如果使用了这两个选项,则会出现上述错误消息。
如果不使用这两个选项,则不会出现错误消息。
方案二:
也可以使用--disable-software-rasterizer
参数,禁用 WebGL
,在不显示窗口的模式下,也不显示错误消息。
方案三:
先尝试上面的方案一、二,如上面方法不能解决,也可以尝试使用下列参数来解决。
-enable-webgl --no-sandbox --disable-dev-shm-usage
Floss manager not present, cannot set Floss enable/disable.
这是个waring,不影响开发
google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot http://www.baidu.com/
[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