Ubuntu26.04 钉钉8.2.8完整踩坑修复记录(启动/会议/wayland屏幕共享/OBS虚拟摄像头)
系统版本:Ubuntu 26.04,GNOME Wayland会话
钉钉版本:8.2.8‑Release.260818002deb官方包
问题清单:钉钉启动报错、会议按钮点不开、Wayland屏幕共享黑屏只有鼠标、编译dingtalk‑wayland‑screenshare依赖连环报错、OBS虚拟摄像头按钮消失
实测结论:优先推荐OBS虚拟摄像头方案,绕开dingtalk-wayland-screenshare的各种兼容性坑,稳定性更好
前言
Ubuntu26.04是比较新的版本,系统强化了安全保护,禁止共享对象开启可执行栈,同时默认会话为Wayland。Linux版钉钉没有针对新版系统做适配,会遇到一连串兼容性问题:打不开软件、会议点不动、屏幕共享黑屏。本文完整记录全部排错、编译、备选方案。
重要提醒:钉钉deb包升级之后,
patchelf修改会全部失效,需要重新执行修复命令。
一、钉钉无法启动、库加载失败(execstack可执行栈报错)
报错日志特征:
dingtalk_dll.so: cannot enable executable stack as shared object requires: Invalid argument
ERROR: ld.so: object './libgbm.so' from LD_PRELOAD cannot be preloaded根源:新版系统禁止SO带可执行栈标记,旧的execstack包已经被Ubuntu源移除,替换使用patchelf工具。
1. 安装patchelf
sudo apt update
sudo apt install patchelf2. 清除可执行栈标记(解决打不开、会议点不动两大问题)
# 修复主程序so
sudo patchelf --clear-execstack /opt/apps/com.alibabainc.dingtalk/files/8.2.8-Release.260818002/dingtalk_dll.so
# 修复会议模块 libconference_new.so,解决【点会议按钮无响应,无法发起/加入音视频会议】
sudo patchelf --clear-execstack /opt/apps/com.alibabainc.dingtalk/files/8.2.8-Release.260818002/libconference_new.so3. 消除libgbm.so预加载警告
sudo ln -sf /usr/lib/x86_64-linux-gnu/libgbm.so.1 /opt/apps/com.alibabainc.dingtalk/files/8.2.8-Release.260818002/libgbm.so4. 托盘图标丢失(可选)
Wayland下钉钉托盘不显示,安装appindicator扩展:
sudo apt install gnome-shell-extension-appindicator libayatana-appindicator3-1
gnome-extensions enable ubuntu-appindicators@ubuntu.comdesktop文件增加QT_QPA_PLATFORM=xcb环境变量,强制Xcb后端。
二、编译 dingtalk‑wayland‑screenshare(Wayland屏幕共享Hook,备选方案)
项目作用:钉钉原生使用X11 XShm接口抓屏,Wayland下Xwayland抓屏得到黑屏;该hook拦截X11调用,调用xdg‑desktop‑portal+PipeWire完成原生Wayland录屏,写入钉钉共享内存缓冲区。 ⚠️ 实测该Hook存在缺陷:会出现共享出去只有鼠标,没有画面的问题,稳定性一般,优先推荐下文OBS虚拟摄像头方案。
1. 完整编译依赖一次性安装
编译过程会连续报缺少ninja、pkg‑config、gio‑2.0、libportal、Xdamage.h等,一次性把全部开发包装好:
sudo apt update
sudo apt install ninja-build gcc g++ cmake pkg-config
sudo apt install libglib2.0-dev libportal-dev libpipewire-0.3-dev libspa-0.2-dev
sudo apt install libx11-dev libxrandr-dev libxdamage-dev libxcomposite-dev libxfixes-dev libxtst-dev libopencv-dev2. 编译步骤
git clone https://github.com/lzl200110/dingtalk-wayland-screenshare.git
cd dingtalk-wayland-screenshare
mkdir build && cd build
rm -rf CMakeCache.txt CMakeFiles
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release
ninja编译产物:build/libdingtalkhook.so
3. 两种启动方式
方式1:终端临时测试
LD_PRELOAD=$(pwd)/libdingtalkhook.so /opt/apps/com.alibabainc.dingtalk/files/Elevator.sh方式2:desktop启动文件配置(推荐新建独立启动项,不修改系统原始desktop)
系统desktop路径:/usr/share/applications/com.alibabainc.dingtalk.desktop,升级deb会覆盖,不要直接修改。
新建用户目录独立desktop文件:
nano ~/.local/share/applications/dingtalk-wayland.desktop写入内容:
[Desktop Entry]
Categories=Chat;Office;
Comment=钉钉(带Wayland屏幕共享Hook)
Exec=env LD_PRELOAD=/home/weii/ApplicationsResource/dingtalk-wayland-screenshare/build/libdingtalkhook.so /opt/apps/com.alibabainc.dingtalk/files/Elevator.sh %u
GenericName=dingtalk
Icon=/opt/apps/com.alibabainc.dingtalk/files/logo.ico
Keywords=dingtalk;
MimeType=x-scheme-handler/dingtalk;
Name=钉钉‑Wayland共享
Type=Application
X-Deepin-Vendor=user-custom刷新桌面数据库:
update-desktop-database ~/.local/share/applications/三、Hook生效但是共享屏幕只有鼠标,看不到画面排查
现象:可以正常进入会议,开启屏幕共享,远端只能看见鼠标,画面全黑。鼠标来自Xwayland,画面来自PipeWire录屏,说明hook注入成功,但是录屏帧没有成功写入缓冲区。
排查顺序:
- 确认会话类型是Wayland
echo $XDG_SESSION_TYPE- 安装桌面对应的portal后端(GNOME必须装
xdg‑desktop‑portal‑gnome)
sudo apt install xdg-desktop-portal-gnome
systemctl --user restart xdg-desktop-portalSway/Hyprland 使用
xdg‑desktop‑portal‑wlr;KDE使用xdg‑desktop‑portal‑kde。
开启共享必须选择【整个屏幕】,该项目暂不支持窗口共享。
HiDPI小数缩放坑:125%/150%小数缩放会导致buffer尺寸不匹配,临时改为100%整数缩放测试。
终端启动钉钉,观察日志:开启共享是否弹出系统原生录屏选择弹窗。不弹窗代表portal调用失败;弹窗但无画面代表pipewire帧转换失败。
该hook存在局限性,如果一直黑屏,直接采用下面OBS虚拟摄像头方案(实测优先推荐)。
四、OBS Studio 安装 + 虚拟摄像头配置(✅ 实测优先推荐方案)
Linux OBS依赖FFmpeg,Ubuntu版本>=15.04官方源自带FFmpeg;Ubuntu14.04 LTS需要额外FFmpeg PPA。
FFmpeg 安装说明
- Ubuntu14.04 LTS(旧版):官方仓库不含FFmpeg,需要PPA
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update && sudo apt-get install ffmpeg- Ubuntu15.04 及更新版本(Ubuntu26.04适用):官方源自带FFmpeg,直接安装
sudo apt update
sudo apt install ffmpeg安装OBS Studio(OBS官方PPA)
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt update
sudo apt install obs-studioOBS虚拟摄像头:按钮消失解决方案
Linux OBS虚拟摄像头依赖内核模块v4l2loopback,模块没有加载,按钮直接消失。
- 安装dkms模块
sudo apt install linux-headers-$(uname -r) v4l2loopback-dkms v4l-utils- 加载模块(
exclusive_caps=1是钉钉等客户端识别虚拟摄像头关键参数)
sudo modprobe v4l2loopback devices=1 exclusive_caps=1 card_label="OBS Virtual Camera"验证设备生成:
ls /dev/video*- 设置开机自动加载(可选)
echo "v4l2loopback" | sudo tee /etc/modules-load.d/v4l2loopback.conf
echo "options v4l2loopback devices=1 exclusive_caps=1 card_label=\"OBS Virtual Camera\"" | sudo tee /etc/modprobe.d/v4l2loopback.conf⚠️Secure Boot开启会阻止dkms内核模块加载,需要关闭安全启动或者签名模块。 如果是flatpak安装OBS,需要额外授予设备权限:
flatpak override --user --device=all com.obsproject.Studio使用流程(钉钉会议屏幕共享)
- 打开OBS,添加【PipeWire屏幕捕获】,采集桌面画面;
- OBS右下角控件,点击开始虚拟摄像机;
- 打开钉钉会议,摄像头设备选择
OBS Virtual Camera,远端即可看到桌面画面。
五、避坑总结
- patchelf两件套:
dingtalk_dll.so负责启动;libconference_new.so负责音视频会议,钉钉版本更新必须重新执行; dingtalk‑wayland‑screenshare仅解决Wayland下屏幕共享,不能修复会议打不开问题,两者独立;该方案有兼容性缺陷,优先OBS虚拟摄像头;- Hook项目限制:仅支持全屏共享,小数缩放容易出问题,OpenCV版本ABI变动会导致帧转换失败;
- 系统desktop文件不要直接修改,复制到
~/.local/share/applications/做用户副本,升级不会丢失; - 兜底方案:切换Xorg会话,钉钉全部原生功能可用,不需要hook;或者OBS虚拟摄像头曲线救国(推荐)。
附录:常用排查命令
# 终端启动钉钉查看完整运行日志
/opt/apps/com.alibabainc.dingtalk/files/Elevator.sh
# 检查xdg‑desktop‑portal状态
systemctl --user status xdg-desktop-portal
# 检查v4l2loopback模块
lsmod | grep v4l2loopback
# 检查pkgconfig依赖是否存在
pkg-config --exists gio-2.0 && echo ok || echo missing