QT6 如何在Linux Wayland 桌面系统抓屏和分享屏幕

要在 Linux Wayland 桌面环境下使用 Qt6 实现屏幕抓取和分享,需结合 Qt 原生支持与系统级工具(如 PipeWire、XDG Desktop Portal)。以下是具体方案和技术要点:

Qt6 原生屏幕捕获(QScreenCapture)

适用场景 :需在 Qt 应用程序中直接集成屏幕捕获功能。
核心依赖

  • PipeWire(≥0.3)提供底层多媒体框架24;

  • XDG Desktop Portal 及其后端(如 xdg-desktop-portal-wlr)处理权限和屏幕选择

    安装依赖

  • sudo apt install xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-wlr pipewire wireplumber

  • 代码实现

  • 使用 QScreenCapture 类激活捕获会话,Wayland 下无法直接通过 API 选择屏幕,需依赖 Portal 弹窗交互

  • #include <QMediaCaptureSession>

    #include <QScreenCapture>

    #include <QVideoWidget>

    QMediaCaptureSession session;

    QScreenCapture screenCapture;

    QVideoWidget preview;

    // 设置捕获目标(Wayland 下需忽略 setScreen())

    session.setScreenCapture(&screenCapture);

    session.setVideoOutput(&preview);

    screenCapture.setActive(true); // 触发 Portal 屏幕选择向导

  • 限制与注意事项

  • 屏幕选择 :调用 setActive(true) 时,系统会弹出交互式窗口要求用户选择屏幕或区域

  • 仅支持 FFmpeg 后端:需确保 Qt 编译时启用了 FFmpeg4;

  • 实验性功能:Qt 6.5+ 支持 Wayland 捕获,但稳定性可能不足

相关阅读:

神旗视讯 -- 高性能的私有化音视频系统

神旗视讯: 从零搭建高性能信创会议系统

神旗视讯开源地址:

国内: https://gitee.com/sqmeeting

国外: https://github.com/sqmeeting

相关推荐
新时代牛马16 分钟前
Linux 驱动调试完整篇:从printk/dev_dbg、动态调试到 debugfs/ftrace 排障
java·linux·服务器
用户1220038790018 分钟前
Qt学习之绘图入门练习
qt
modelmd38 分钟前
Linux SIGTERM信号-实验
linux
云泽80844 分钟前
Git 版本控制系统(上):架构原理与操作入门
linux·git·架构
凌云若寒1 小时前
CODESOFT试用流程
linux·运维·网络·数据库·sentinel
吴声子夜歌1 小时前
Linux命令——学习Shell(三)
linux·chrome·学习
小猪佩奇TONY2 小时前
Linux 内核学习(18) --- linux dma_buf 机制
linux·运维·学习
Dream Cosmos2 小时前
自旋锁:从忙等待、原子操作到线程同步
linux
kaixin_啊啊2 小时前
PandaWiki 本地 AI 知识库实战:文档导入、智能问答与远程访问
linux·服务器·人工智能·windows·ai
handler012 小时前
【Linux】进程退出、等待与程序替换
linux·运维·exec·进程·进程等待·进程退出·程序替换