屏幕录制
概述#
niri 主要是通过 portals 和 pipewire 提供的屏幕录制接口。 OBS、Firefox、Chromium、Electron、Telegram 以及其他应用程序均支持此功能。 您可以录制整个显示器或单个窗口。
要使用此功能,您需要一个可正常工作的 D-Bus 会话、pipewire、xdg-desktop-portal-gnome
,以及将 niri 作为会话运行(即通过 niri-session
或从显示管理器启动)。
在主流发行版中,这些组件通常都能“开箱即用”。
此外,您也可以使用依赖于 wlr-screencopy
协议的工具,niri 也支持该协议。
niri 中内置有多项专为屏幕录制设计的特性。 让我们一起来看看!
遮蔽窗口#
您可以在屏幕录制中遮蔽特定窗口,将其替换为纯黑色的矩形区域。 这对于密码管理器或聊天窗口等场景很有用。
这是通过 block-out-from
窗口规则控制的,例如:
// 在屏幕录制中遮蔽密码管理器。
window-rule {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
block-out-from "screencast"
}
您也可以使用图层规则来遮蔽图层界面:
有关更多详细信息和示例,请参阅相应的 wiki 部分。动态屏幕录制目标#
Niri 提供了一个特殊的屏幕录制流,您可以动态更改它。 在屏幕录制窗口对话框中,它显示为“niri 动态录制目标(niri Dynamic Cast Target)”。
选择该选项后,它将作为一个空的、透明的视频流启动。 然后,您可以使用以下快捷键绑定来更改它显示的内容:
set-dynamic-cast-window
录制当前焦点窗口。set-dynamic-cast-monitor
录制当前焦点显示器。clear-dynamic-cast-target
恢复到空视频流。
您也可以从命令行调用这些操作,例如交互式选择要录制的窗口:
如果录制目标消失(例如目标窗口关闭),流将自动恢复为空状态。
所有动态录制共享同一个目标,但新的录制开始时是空视频流,直到您下次更改它(以避免意外泄露敏感内容)。
标示正在录制的窗口#
is-window-cast-target=true
窗口规则可匹配正在被录制的窗口。
您可以使用特殊的边框颜色来明确标示正在录制的窗口。
此功能也适用于动态屏幕录制所针对的窗口。 然而,对于在全屏屏幕录制中恰好可见的窗口,此功能则不起作用。
// 用红色标示正在录制的窗口。
window-rule {
match is-window-cast-target=true
focus-ring {
active-color "#f38ba8"
inactive-color "#7d0d2d"
}
border {
inactive-color "#7d0d2d"
}
shadow {
color "#7d0d2d70"
}
tab-indicator {
active-color "#f38ba8"
inactive-color "#7d0d2d"
}
}
示例:
窗口化(虚拟/分离式)全屏#
在录制 Google Slides 这类基于浏览器的演示文稿时,您通常希望隐藏浏览器界面,这就需要将浏览器设为全屏模式。 但这样做有时很不方便,例如,当您使用超宽屏显示器时,或者您只是想让浏览器窗口小一点,而不占用整个显示器。
toggle-windowed-fullscreen
这个快捷键绑定就是为了解决这个问题。
它会让应用程序以为自己进入了全屏模式,但实际上它仍然是一个普通窗口,您可以自由调整其大小并将其放置在任意位置。
请注意,并非所有应用程序都会响应全屏操作,因此可能有时候您使用了这个快捷键绑定,却看起来无事发生。
下面是一个示例,显示了一个窗口化全屏的 Google Slides 演示文稿,以及演讲者视图和会议应用程序: