如何准确检测录屏活动(而非仅录屏软件运行状态)
针对录屏检测问题的解决方案
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
相关产品推荐
相关产品推荐

