You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何准确检测录屏活动(而非仅录屏软件运行状态)

针对录屏检测问题的解决方案

1. 针对RecordMyDesktop的精准检测方法

可以通过以下几种方式区分RecordMyDesktop的录制中与仅编码/后台运行状态:

  • 检查进程命令行参数:RecordMyDesktop启动录制时会携带明确的录制参数(如输出文件路径、帧率设置等),编码阶段的参数会有差异。通过psutil获取进程的cmdline属性,判断是否包含录制相关参数(比如--output指定的文件)。
  • 监控临时文件:录制时RecordMyDesktop会在/tmp目录创建临时视频片段文件(命名格式类似recordmydesktop_XXXXXX),可检查这些文件是否处于持续写入状态(通过修改时间或磁盘IO活动判断)。
  • 查看进程文件描述符:用psutil的open_files()方法,检查RecordMyDesktop是否打开了正在写入的视频输出文件(通常为.ogv格式),若存在活跃写入的此类文件,则说明正在录屏。

修改后的isScreenCastRunning方法示例:

def isScreenCastRunning(self):
    for p in psutil.process_iter(['name', 'cmdline', 'open_files']):
        if p.info['name'] == 'recordmydesktop':
            # 检查命令行是否包含录制相关参数
            cmdline = p.info['cmdline']
            if cmdline and ('--record' in cmdline or any('.ogv' in arg for arg in cmdline)):
                # 进一步检查是否有打开的写入文件
                open_files = p.info['open_files']
                if open_files and any('.ogv' in f.path and f.mode == 'w' for f in open_files):
                    return True
    return False

2. 独立于特定软件的通用录屏检测方法

跨软件的录屏检测需要依赖系统级资源监控,Linux系统下的可行方案:

  • X11桌面环境:
    录屏工具通常会使用X11的Xdamage或XShm扩展捕获屏幕画面,可通过xprop或xinfo工具检查进程是否使用这些扩展,也可通过psutil筛选连接Xorg且带有屏幕捕获行为的进程。
  • Wayland桌面环境:
    Wayland下录屏依赖PipeWire框架,通过pw-cli命令列出当前媒体流,检查是否存在screen-capture类型的流。
  • 音频录制流检测:
    多数录屏会同步录制音频,通过pactl list sources命令检查是否有源处于RUNNING状态,且被录屏类客户端占用。
  • 帧缓冲设备监控:
    检查/dev/fb0(帧缓冲设备)是否被进程占用,使用fuser /dev/fb0命令查看占用进程ID,存在则说明可能有录屏活动。

通用检测代码示例(以PulseAudio音频流检测为例):

import subprocess

def isAnyScreenRecording():
    # 检查PulseAudio是否有活跃的录制源
    result = subprocess.run(['pactl', 'list', 'sources'], capture_output=True, text=True)
    if 'RUNNING' in result.stdout and 'application.name' in result.stdout:
        lines = result.stdout.split('\n')
        for i, line in enumerate(lines):
            if 'State: RUNNING' in line:
                # 查找对应应用名称
                for j in range(i, len(lines)):
                    if 'application.name' in lines[j]:
                        app_name = lines[j].split('=')[-1].strip('"')
                        # 常见录屏软件名称,可按需扩展
                        if app_name in ['recordmydesktop', 'obs', 'kazam', 'simplescreenrecorder']:
                            return True
    return False

内容的提问来源于stack exchange,提问作者fauve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 21:43:17