Ubuntu Wayland + NVIDIA 下修复腾讯会议视频与屏幕共享黑屏问题

问题背景

我的环境是 Ubuntu 26.04 GNOME Wayland、NVIDIA 4060 GPU(580 Open 驱动)和腾讯会议 Linux 版 3.26.10.401。使用腾讯会议时发现共享屏幕和视频都是黑屏,之前在 Xorg 环境下使用一切正常。
由于 Ubuntu 26.04 默认只有 Wayland 会话选项,且不想两个会话来回切换使用,因此尝试从腾讯会议启动日志和启动脚本入手分析。

排查过程

腾讯会议的 xcast 日志位于:

~/.local/share/wemeetapp/Saas/Logs/xcast_*.log

实际日志显示,发起屏幕共享时 Portal 链路已经成功,后续还有持续的视频编码和发送统计。这证明 GNOME Portal、PipeWire、屏幕授权、捕获和编码发送并没有坏。

ext_portal entry updated 1
"width":1920,"height":1080,"fps":15
screen_capture_worker.start

真正异常的是本地视频渲染,同一次会议中该错误可以重复上百次。视频帧已经到达,但腾讯会议使用 NVIDIAEGL 为某些 XWayland 视频窗口创建 EGLSurface 失败,于是自己的视频、参会者视频和收到的屏幕共享都显示不出来。

eglCreateWindowSurface returned EGL_NO_SURFACE error:3005

因此说明NVIDIA EGL/GLX 与腾讯会议 XWayland 视频窗口的组合不兼容,尝试在腾讯会议中让 GLVND 选择 Mesa 的 EGL/GLX 实现。
经过逐项验证,两个变量各自解决不同的现象:

export __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json
export __GLX_VENDOR_LIBRARY_NAME=mesa
  • __EGL_VENDOR_LIBRARY_FILENAMES=...50_mesa.json 解决腾讯会议的视频显示问题;
  • __GLX_VENDOR_LIBRARY_NAME=mesa 解决屏幕共享显示问题;

解决方案

腾讯会议的启动脚本 /opt/wemeet/wemeetapp.sh 包含以下逻辑:

if [ "$XDG_SESSION_TYPE" = "wayland" ];then
  if [ -f "/opt/x11-wayland/x11-ext.sh" ];then
    source /opt/x11-wayland/x11-ext.sh
  else
    export QT_QPA_PLATFORM=xcb
    export XDG_SESSION_TYPE=x11
    unset WAYLAND_DISPLAY
    export WEMEET_XWAYLAND=1
  fi
fi

为了让改动尽可能小,选择实现/opt/x11-wayland/x11-ext.sh,利用官方机制加载兼容环境,内容如下:

#!/usr/bin/env bash

# 腾讯会议 3.26.10.401 的 /opt/wemeet/wemeetapp.sh 在 Wayland 会话中会优先 source /opt/x11-wayland/x11-ext.sh。使用 source 而不是启动子进程非常重要:本文件导出的变量会直接进入腾讯会议主进程及其 QtWebEngine 子进程。
# 这里是兼容 else 分支
export QT_QPA_PLATFORM=xcb
export XDG_SESSION_TYPE=x11
unset WAYLAND_DISPLAY
export WEMEET_XWAYLAND=1

# 需要确保该文件存在
readonly WEMEET_MESA_EGL_VENDOR=/usr/share/glvnd/egl_vendor.d/50_mesa.json
if [[ -r "$WEMEET_MESA_EGL_VENDOR" ]]; then
  export __EGL_VENDOR_LIBRARY_FILENAMES="$WEMEET_MESA_EGL_VENDOR"
fi

export __GLX_VENDOR_LIBRARY_NAME=mesa

# Mesa EGL/GLX 能正常工作时保留其自动选择能力,可能比强制 llvmpipe 软件渲染有更低的 CPU 占用。
unset LIBGL_ALWAYS_SOFTWARE

可能需要修改x11-ext.sh权限(0644),然后重新启动腾讯会议即可

posted @ 2026-07-12 15:40  Keen6509  阅读(148)  评论(0)    收藏  举报