屏幕捕获
截屏软件[编辑 | 编辑源代码]
专用于截图的软件[编辑 | 编辑源代码]
应用程序列表[编辑 | 编辑源代码]
- GNOME 截图工具 — GNOME 桌面环境的截图工具。
- grim — 从 Wayland 混成器抓取图像。
- gscreenshot — 支持多种截图后端(如 scrot、ImageMagick、PIL、imlib2 和 grim)的 GTK 前端工具,支持延时、选区及复制到剪贴板功能。
- HotShots — 屏幕捕获工具,支持多种图像格式保存,并可添加注释和图形标注(箭头、线条、文字等)。
- imgur-screenshot — 截取选区并上传至 imgur,支持更多扩展功能。
- ksnip — 基于 Qt 的跨平台截图工具,提供多种标注功能、基本的图像编辑功能,并支持远程存储(到 FTP、imgur 或通过自定义脚本)。
- Lightscreen — 自动保存和管理截图的工具,以隐藏后台进程运行,通过快捷键触发并按用户偏好保存截图。
- LXImage-Qt — LXImage 的 Qt 移植版,含图像查看和截图功能(通过
lximage-qt --screenshot
运行)。
- maim — 旨在替代 scrot 的命令行截图工具,在多方面表现得比 scrot 更好。
- MATE 截图工具 — MATE 桌面环境的截图工具。
- menyoki — 命令行截图与屏幕录制工具,支持图像处理操作。
- mss — 基于 xrandr 的 Python 截图模块,提供了极简的命令行界面。
- Pantheon 截图工具 — 专为 elementary OS 设计的截图工具。
- ScreenCloud — 全屏或选区截图并上传至 imgur,支持身份验证、插件及系统托盘。
- ScreenGrab — 基于 Qt 的快速截图工具(已停止开发)。
- scrot — 简单的 X 命令行截图工具。
- Shotgun — 用 Rust 编写的极简 X 截图工具(作者称其速度比 maim 快一倍)。
- Shutter — 功能丰富的截图与编辑工具(支持延时截图)。
- Spectacle — KDE 的屏幕捕获工具,支持捕获整个桌面、单个窗口、窗口区域、矩形选区或自由选区;属于 kde-graphics包组。
- Xfce4 截图工具 — 包括应用及 Xfce 面板插件,支持全屏、活动窗口或选区截图;属于 xfce4-goodies包组。
使用方式[编辑 | 编辑源代码]
maim[编辑 | 编辑源代码]
maim包 旨在成为 scrot 的改进版。
截取全屏并保存至文件:
$ maim 文件名
交互式选择矩形区域,截取后保存至文件:
$ maim --select 文件名
截取当前活动窗口并保存至文件(需安装 xdotool包):
$ maim --window $(xdotool getactivewindow) 文件名
选区截屏(不包含光标)并存入剪贴板(需安装 xclip包):
$ maim -s | xclip -selection clipboard -t image/png -i
scrot[编辑 | 编辑源代码]
scrot包 支持通过命令行截图,并提供自定义延时等功能。默认将文件保存在当前工作目录。
$ scrot -t 20 -d 5
上述的命令会在 5 秒延时后保存一个带日期的 .png 文件及一个适用于网页发布的缩略图(大小为原图的 20%)。
也可使用标准日期时间格式保存,例如使用命令
$ scrot ~/截屏/%Y-%m-%d-%T-截屏.png
将截图以包含年-月-日-时间的文件名保存至主目录的“截屏”文件夹。
详见 scrot(1)。
不同桌面环境的截图工具[编辑 | 编辑源代码]
Budgie[编辑 | 编辑源代码]
Budgie 自带名为 BudgieScreenshot 的截图工具。
可以通过 PrintScreen
键捕获整个屏幕、活动窗口或选区。具体操作的快捷键请参阅Shortcuts。
Cinnamon[编辑 | 编辑源代码]
默认安装的 Cinnamon 不提供截图工具。安装 gnome-screenshot包 后可通过 菜单 > 附件 > 截图 或按 PrintScreen
键进行截图。
GNOME[编辑 | 编辑源代码]
GNOME 用户可按 PrintScreen
键或点击系统菜单中的相机图标截图。也可选择安装 gnome-screenshot包 并通过 应用 > 附件 > 截图 使用。
GNOME 内置的屏幕录制功能需在安装 gst-plugin-pipewire包 和 gst-plugins-good包 后使用,其快捷键为 Ctrl+Shift+Alt+r
。录制时屏幕右下角会显示红点;录制完成后,文件保存在 Videos
目录下的 Screencast from %d%u-%c.webm
。
KDE[编辑 | 编辑源代码]
若使用 KDE,推荐使用 Spectacle。
Spectacle 由 spectacle包 提供。
Xfce[编辑 | 编辑源代码]
若使用 Xfce,可安装 xfce4-screenshooter包 并添加键盘绑定:
Xfce 菜单 > 设置 > 键盘 > 应用程序快捷键
若需跳过截图提示框,可在终端输入 xfce4-screenshooter -h
查看选项。
其他桌面环境/窗口管理器[编辑 | 编辑源代码]
对于 LXDE 等桌面环境或 Openbox、Compiz 等窗口管理器,可通过添加快捷键调用截图命令。例如:
$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png
注意 import 工具来自 imagemagick包。在 Compiz 中将上述命令绑定至 PrintScreen
键可实现按日期时间保存截图至图片文件夹。
需注意 Openbox 的 rc.xml
文件不支持逗号,因此若要在 Openbox 中绑定 PrintScreen
键,需在 rc.xml
文件的键盘章节添加如下内容:
rc.xml
<!-- Screenshot --> <keybind key="Print"> <action name="Execute"> <command>sh -c "import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png"</command> </action> </keybind>
若上述的 PrintScreen
键无法使用,请参阅键盘输入使用不同的键符(keysym)或键码(keycode)。
其它含有截屏工具的软件包[编辑 | 编辑源代码]
ImageMagick/GraphicsMagick[编辑 | 编辑源代码]
详见 ImageMagick#截屏。
GIMP[编辑 | 编辑源代码]
可通过 GIMP 截图(文件 > 创建 > 截图...)。
imlib2[编辑 | 编辑源代码]
imlib2包 提供 imlib2_grab
工具进行截图。全屏截图命令:
$ imlib2_grab screenshot.png
FFmpeg[编辑 | 编辑源代码]
详见 FFmpeg#屏幕捕获。
录屏软件[编辑 | 编辑源代码]
另见 FFmpeg#屏幕捕获和 Wikipedia:Comparison of screencasting software。
屏幕录制工具可捕获桌面或单个窗口的视频流。
- 深度录屏 — 深度桌面环境的录屏工具。
- FFcast — 基于 FFmpeg 的 Bash 脚本录屏工具。
- GPU Screen Recorder GTK — GPU 加速录屏工具,性能媲美 NVIDIA ShadowPlay,支持直播和回放缓冲。
- Green Recorder — 简洁实用的 Linux 桌面录屏工具。
- Kazam — 支持多屏配置的录屏程序。
- Kooha — 极简 GTK 界面录屏工具。
- menyoki — 命令行屏幕捕获及图像处理工具(目前仅支持 X11,Wayland 开发中)。
- OBS — 专业视频录制与直播软件。
- https://obsproject.com/ || obs-studio包
- obs-gnome-screencastAUR — 支持 Wayland 的 GNOME 录屏插件
- Peek — 生成 GIF/APNG/WebM/MP4 动画的简易录屏工具(2023 年 1 月起停止开发)。
- RecApp — 基于 GStreamer 模块的 GTK 录屏工具(不依赖 FFmpeg,已停止开发)
- RecordMyDesktop — 支持 CLI/GTK/Qt 界面的 ogg 格式桌面录制工具(开发停滞)。
- https://recordmydesktop.sourceforge.net/ || 命令行界面:recordmydesktop包;GTK2 界面:gtk-recordmydesktopAUR
- screencast — 基于 FFmpeg 的 X11 命令行录屏工具,支持离线录制与直播推流。
- Screencast — 专为 elementary OS 设计的简易录屏工具。
- SimpleScreenRecorder — 使用 C++/Qt5 编写的多功能录屏软件,支持 X11 和 OpenGL。
- Spectacle — KDE 屏幕捕获工具,支持 Wayland 下所有屏幕、单屏幕、单窗口和矩形选区视频录制(无音频),属于 kde-graphics包组(使用时需要 kwin,无法与其他窗口管理器共用)。
- VokoScreen — 基于 GStreamer 的强力录屏工具,支持多编解码器、音视频采集、内外设备输入和区域缩放高亮(Wayland 支持有限)。
- Wayfarer — 适用于 Wayland(基于 Pipewire)和 Xorg 的 GTK4 录屏工具。
Wayland[编辑 | 编辑源代码]
要在基于 Wlroots 的混成器上捕获屏幕,截屏可以使用 grim包 或来自 sway-contrib包 中的 grimshot;录屏可以使用 wf-recorder包(或 wf-recorder-gitAUR)。obs-studio包 的插件 wlrobs-hgAUR 可用于支持在基于 Wlroots 的合成器上进行屏幕捕捉。可选使用 slurp包 选择截屏区域。如果 GPU 支持 vaapi 编码,wl-screenrec-gitAUR 可以作为 wf-recorder包 的更高效替代方案。
对整个屏幕截屏:
$ grim 截屏.png
在 Sway 中对当前窗口截屏:
$ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - 截屏.png
在 Hyprland 中对当前窗口截屏:
$ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - 截屏.png
对选区截屏:
$ slurp | grim -g - 截屏.png
对选区截屏并使用 wl-clipboard包 将结果存入剪贴板:
$ slurp | grim -g - - | wl-copy
对整个屏幕录屏:
$ wf-recorder -f recording.mp4
对选区录屏:
$ wf-recorder -g "$(slurp)"
- screenshot.sh 是 Wayland 下的 GUI 截图工具,使用 zenity包、grim包 和slurp包。
此外,部分前文提到的程序也支持在Wayland环境下工作,例如 ksnip包 和 green-recorderAUR。
屏幕录制[编辑 | 编辑源代码]
通过 GNOME 屏幕录制功能[编辑 | 编辑源代码]
green-recorderAUR、obs-gnome-screencastAUR 和 obs-studio包 支持使用 GNOME 屏幕录制功能在 Wayland 环境下进行录屏。
通过 Hyprland[编辑 | 编辑源代码]
在搭配 xdg-desktop-portal-hyprland包 使用时,Hyprland 窗口管理器允许通过 OBS 进行屏幕投射和录制(包括选择单个窗口和工作区),详见 [1]。
使用虚拟摄像头推流[编辑 | 编辑源代码]
参见 v4l2loopback#使用 wf-recorder 投射 Wayland 屏幕。
- 此方法已在 zoomAUR(桌面客户端,运行于 xorg-xwayland包)和 chromium包 中运行的 BigBlueButton(在 firefox包 中分辨率极低)测试通过;skypeforlinux-binAUR 能检测到虚拟视频设备
VirtualVideoDevice
,但输出黑屏。 - 示例使用
wf-recorder
,也可以用其他软件,只需将输出导向虚拟设备即可。
安装 wf-recorder包(或 wf-recorder-gitAUR)和 v4l2loopback-dkms包。指定以下参数加载 v4l2loopback
内核模块:
# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDevice
验证是否已创建名为 VirtualVideoDevice
的新虚拟视频设备:
$ v4l2-ctl --list-devices
... VirtualVideoDevice (platform:v4l2loopback-000): /dev/video2 ...
使用 wf-recorder
开始录制屏幕,并将输出导向 v4l2loopback
创建的虚拟视频设备 VirtualVideoDevice
:
$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p
为了确保视频输出与 Zoom 兼容,必须使用 yuv420p
色彩空间 [2]。
Unknown V4L2 pixel format equivalent for rgb0
错误,可在运行 wf-recorder
时添加 --force-yuv
或 -t
参数,强制将数据转换为 yuv 格式后再发送至 GPU [3]。然后可以在视频通话/会议应用中选择上述虚拟视频设备作为“摄像头”(设备名为 VirtualVideoDevice
)。您可使用 ffplay
(ffmpeg包 的组件)、mpv包 或 gst-launch
(gstreamer包 的组件)验证虚拟设备是否正常输出屏幕内容:
$ ffplay /dev/video2
$ mpv av://v4l2:/dev/video2
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! glimagesink
若 Firefox 无法读取视频流并显示类似“AbortError: Starting video failed”的信息,可尝试预加载 v4l2compat.so
:
$ LD_PRELOAD=/usr/lib/v4l1compat.so firefox
仅共享屏幕的一部分[编辑 | 编辑源代码]
如上所述,wf-recorder
可以通过 slurp包 选择一个区域,从而仅录制屏幕的一部分。要利用此功能向虚拟摄像头发送特定区域/应用程序窗口,可以使用以下修改后的命令开始录制屏幕:
$ wf-recorder -g "$(slurp)" --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p
在选择屏幕区域后,即可通过虚拟摄像头 /dev/video2
访问视频流。
使用 WebRTC 协议[编辑 | 编辑源代码]
Chromium 和 Firefox 现在应该可以访问屏幕共享。可以通过 Mozilla 的 getUserMedia/getDisplayMedia 测试页面进行验证。
通过 X11 应用程序投射 Wayland 屏幕[编辑 | 编辑源代码]
原生 Wayland 窗口(或整个屏幕/工作区)可以共享到 X11 应用程序。为此,你需要使用 xwaylandvideobridge包。详情请参见修复 Wayland:Xwayland 屏幕投射。
终端[编辑 | 编辑源代码]
使用 ANSI 代码捕获[编辑 | 编辑源代码]
可以使用 util-linux包 软件包中的 script(1) 命令。运行 script
后,所有终端输出(包括 ANSI 代码)将自动保存至 typescript
文件。
操作完成后,运行 exit
结束录制,此时 typescript
文件即生成完毕。可使用 ansi2htmlAUR 包(注意与 python-ansi2html包 的 ansi2html 区分)将文件转换为 HTML 格式。
将 typescript
转换为 typescript.html
:
$ ansi2html --bg=dark < typescript > typescript.html
实际上,部分命令的输出可直接通过管道传递给 ansi2html:
$ ls --color|ansi2html --bg=dark >output.html
但此方法并非通用,若遇到不兼容情况,仍需使用 script
进行录制。
通过帧缓冲区[编辑 | 编辑源代码]
安装 framebuffer 后,使用 fbgrab包 或 fbdumpAUR 捕获屏幕图像。
虚拟控制台[编辑 | 编辑源代码]
截取文本[编辑 | 编辑源代码]
若仅需捕获控制台文本而非图像,可使用 util-linux包 中的 setterm
命令。使用以下命令将虚拟控制台 1 的文本内容转储至当前目录的 screen.dump
文件:
# setterm -dump 1 -file screen.dump
这需要 root 权限,因为需要读取 /dev/vcs1
设备的内容。
录制文本[编辑 | 编辑源代码]
asciinema包 允许录制整个终端会话活动,并将其保存为自身的开放格式文件。该文件可以使用此工具或其 HTML5 版本进行播放,并可上传到 asciinema.org 官方网站或托管在自己的 HTML 版本中。
使用方法:asciinema(1) 或 asciinema --help
。
- 使用
asciinema rec 输出.cast
录制会话,按Ctrl+\
可暂停/恢复录制,按Ctrl-d
或退出会话将停止录制,可以不指定输出文件名。
录制时的常用参数:
-c 命令
仅录制特定命令的执行过程和输出-i 1.2
录制 1.2 秒-t "多么好的标题啊"
为终端录制文件添加标题
除录制外的其他功能:
asciinema play 文件.cast
播放 asciinema 录制文件asciinema upload 文件.cast
将文件上传至 asciinema.org 以便共享asciinema auth
管理 asciinema.org 账户的录制内容
问题解决[编辑 | 编辑源代码]
截图使用旧的屏幕状态[编辑 | 编辑源代码]
NVIDIA 录制背景被裁剪[编辑 | 编辑源代码]
如果正在使用 nvidia包 专有驱动程序,并且屏幕录制时背景出现裁剪问题,请启用 ForceCompositionPipeline
设置。详情请参见 NVIDIA/故障排除#避免屏幕撕裂。