火狐浏览器启动屏幕共享时,下拉菜单一片空白,或者找不到可选窗口,只能看到“整个屏幕”这一个选项——这其实是个比较典型的信号,说明系统捕获接口没有正确暴露给Firefox进程。问题通常出在三个地方:权限未授予、Wayland会话环境干扰,或者WebRTC后端异常。下面按优先级从高到低,给出一套覆盖Windows、macOS、Linux的操作路径。

检查并授予屏幕共享系统级权限
这一条优先级最高,必须最先做。否则,后面的所有设置操作,都等于白费。macOS和Windows 10/11对屏幕录制都设有独立的权限控制,Firefox没法绕过去。
macOS用户:打开“系统设置”→“隐私与安全性”→“屏幕录制”,在列表里找到Firefox并勾选。如果Firefox没出现在列表里,先退出浏览器再重启一次,它就会自动注册进去。
Windows用户:打开“设置”→“隐私和安全性”→“相机”→滚动到页面底部点击“其他权限”→找到“屏幕录制”,确保开关是开启状态。【注意:必须重启Firefox,改动才会生效】。
Linux用户在GNOME下:终端执行gsettings set org.gnome.desktop.privacy disable-screensharing false;在KDE下:检查系统设置→“隐私”→“屏幕共享”是否启用。如果用的是Wayland会话,还需要额外安装xdg-desktop-portal以及对应的后端包(比如xdg-desktop-portal-gtk或xdg-desktop-portal-kde)。
强制切换WebRTC后端为PipeWire(Linux专用)
如果你在Wayland桌面环境下工作,默认的WebRTC后端无法枚举应用窗口,只能捕获整个屏幕——这是Linux火狐屏幕共享空白的首要原因。
第一步:地址栏输入about:config→接受风险→搜索media.webrtc.pipewire.enabled。
第二步:双击该项,把值从false改成true。
第三步:搜索media.getusermedia.screensharing.allowed_domains,双击编辑,在字符串末尾加上,localhost(注意前面要有英文逗号),这样本地开发服务器也能正常调用。
第四步:关闭所有Firefox窗口,然后在终端里执行firefox --new-instance --profile /tmp/test-profile,新建一个临时实例做测试。这个命令能绕过现有配置的干扰,直接验证PipeWire是否真正生效。
禁用硬件加速并重置GPU进程
当GPU驱动和WebRTC屏幕捕获模块发生冲突时,Firefox会直接放弃窗口枚举,只保留“整个屏幕”这一个选项,而且不会给出任何提示。
地址栏输入about:preferences#general→滚动到“性能”区域→取消勾选“使用硬件加速来提高性能”。
关闭当前窗口,然后在任务管理器里结束所有firefox.exe或firefox进程,最后重新启动浏览器。
如果做完这一步还是没有窗口选项,可以进入about:support页面→点击“刷新Firefox”按钮→确认重置。【注意:这个操作会清除所有扩展、主题和自定义设置,但书签、历史和密码会保留】。
验证网站是否触发了安全限制
非HTTPS站点、file://协议页面,或者带有feature-policy头的网页,Firefox会直接禁止窗口级的共享权限。
方法一:检查当前页面地址栏,确保显示了锁形图标且协议是https://。如果看到的是http://,需要联系网站管理员升级证书。
方法二:如果正在调试本地HTML文件,不要双击打开,改用VS Code Live Server插件,或者用Python命令python -m http.server 8000启动一个服务,然后访问http://localhost:8000,就能解除限制。
方法三:在开发者工具(Ctrl+Shift+I)→Console面板中输入na vigator.mediaDevices.getDisplayMedia({video:true})并回车。如果返回NotAllowedError,说明页面上下文不满足共享条件,这不是浏览器本身的问题。