屏幕截图
屏幕截图软件
专用软件
应用程序列表
- GNOME Screenshot — GNOME 桌面环境的屏幕截图工具。
- grim — 从 Wayland 合成器抓取图像。
- gscreenshot — GTK 前端,用于包括 scrot、ImageMagick、PIL、imlib2 和 grim 在内的多个屏幕截图后端;具有延迟、选择和复制到剪贴板功能。
- HotShots — 用于捕获屏幕并将其保存为各种图像格式以及添加注释和图形数据(箭头、线条、文本等)的应用程序。
- imgur-screenshot — 截取屏幕截图选择,上传到 imgur + 更多酷炫功能。
- ksnip — 基于 Qt 的跨平台屏幕截图工具,提供许多注释功能、基本图像操作和远程目标(ftp、imgur、脚本)。
- Lightscreen — 一款简单的工具,可以自动化保存和编目屏幕截图的繁琐过程,它作为隐藏的后台进程运行,通过一个(或多个)热键调用,然后根据用户的偏好将屏幕截图文件保存到磁盘。
- LXImage-Qt — LXImage 图像查看器和屏幕截图工具的 Qt 移植版(使用
lximage-qt --screenshot
运行)。
- maim — 简单的命令行实用程序,用于截取屏幕截图,旨在替代 scrot,并且在许多方面比 scrot 表现更好。
- MATE Screenshot — MATE 桌面的屏幕截图工具。
- menyoki — 命令行屏幕截图和屏幕录制工具,支持图像操作。
- mss — 一个感知 xrandr 的屏幕截图 Python 模块,带有一个极简的 CLI。
- Pantheon Screenshot — 为 elementary OS 设计的屏幕截图工具。
- ScreenCloud — 截取整个屏幕的屏幕截图或选择一个区域,然后将屏幕截图上传到 imgur+auth,带有插件和系统托盘。
- ScreenGrab — 旨在快速截取屏幕截图的 Qt 应用程序(非活跃开发)。
- scrot — 适用于 X 的简单命令行屏幕截图实用程序。
- Shotgun — 用 Rust 编写的极简 X 屏幕截图实用程序(据作者称,它比 maim 快两倍)。
- Shutter — 功能丰富的屏幕截图和编辑程序(支持延迟)。
- Spectacle — KDE 应用程序,用于屏幕捕获,能够捕获整个桌面、单个窗口、窗口的一部分、选定的矩形区域或手绘区域的图像;是 kde-graphics 的一部分。
- Xfce4-screenshooter — 应用程序和 Xfce 面板插件,用于截取关于整个屏幕、活动窗口或选定区域的屏幕截图;是 xfce4-goodies 的一部分。
用法
maim
maim 旨在成为改进版的 scrot。
将全屏保存到文件
$ maim filename
提示选择并保存到文件
$ maim --select filename
将活动窗口保存到文件,假设已安装 xdotool
$ maim --window $(xdotool getactivewindow) filename
提示选择,保存时不带光标,并将其存储到剪贴板,假设已安装 xclip
$ maim -s | xclip -selection clipboard -t image/png -i
scrot
scrot 允许从 CLI 截取屏幕截图,并提供诸如用户可定义的时间延迟等功能。除非另有指示,否则它会将文件保存在当前工作目录中。
$ scrot -t 20 -d 5
以上命令保存一个带有日期的 .png 文件,以及一个用于 Web 发布的缩略图(原始大小的 20%)。在本例中,它提供了 5 秒的捕获延迟。
您还可以在保存到文件时使用标准日期和时间格式。例如:
$ scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png
将屏幕截图以包含当前年份、月份、日期、小时、分钟和秒的文件名保存到您主目录中名为 “screenshots” 的文件夹中
有关更多信息,请参阅 scrot(1)。
scrot -s
无法正常工作,这可以通过在 scrot 调用前添加一个短暂的暂停来解决:sleep 0.2; scrot -s
。桌面环境特定
Budgie
Budgie 自带名为 BudgieScreenshot 的屏幕截图实用程序。
它允许使用 PrintScreen
捕获整个屏幕、活动窗口或选定区域。有关特定操作的快捷方式,请参阅 键盘快捷键。
Cinnamon
Cinnamon 的默认安装不提供屏幕截图实用程序。安装 gnome-screenshot 将通过 菜单 > 附件 > 截图 或按 PrintScreen
启用屏幕截图。
GNOME
GNOME 用户可以按 PrintScreen
或单击系统菜单中的相机图标。您也可以选择安装 gnome-screenshot 并通过 应用程序 > 附件 > 截取屏幕截图 打开它。
GNOME 具有内置的屏幕录制功能,快捷键组合为 Ctrl+Shift+Alt+r
。录制进行时,屏幕右下角会显示一个红色圆圈。录制完成后,名为 Screencast from %d%u-%c.webm
的文件将保存在 Videos
目录中。为了使用屏幕录制功能,需要安装 gst-plugin-pipewire 和 gst-plugins-good 软件包。
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
键允许将屏幕截图保存到 Pictures 文件夹,并按日期和时间命名。
请注意,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:屏幕录制软件比较。
屏幕录制实用程序允许您创建桌面或单个窗口的视频。
- Deepin Screen Recorder — Deepin 桌面的屏幕录制应用程序。
- FFcast — 基于 FFmpeg 的屏幕录制工具,用 Bash 编写。
- GPU Screen Recorder — 屏幕录制器,仅在 GPU 上捕获屏幕,以大幅提高性能,与 NVIDIA ShadowPlay 相当,并且还支持实时流式传输和重放缓冲区。
- Green Recorder — 适用于 Linux 系统的简单而实用的桌面录制器。
- Kazam — 考虑到设计并处理多屏幕设置的屏幕录制程序。
- Kooha — 带有极简 GTK 界面的简单屏幕录制器。
- menyoki — 命令行屏幕截图并在命令行上执行 ImageOps(仅限 X11,计划支持 Wayland)。
- Open Broadcaster Software — 视频录制和直播应用程序。
- https://obsproject.com/ || obs-studio
- obs-gnome-screencastAUR – GNOME 屏幕录制功能的插件,支持 Wayland
- Peek — 简单的屏幕录制工具,可生成 GIF、APNG、WebM 或 MP4 动画(截至 2023-01 不再开发)。
- RecApp — 用户友好的屏幕录制器,用 GTK 编写,使用免费的 GStreamer 模块,不依赖于 FFmpeg(不再开发)。
- RecordMyDesktop — 易于使用的实用程序,带有 CLI 界面,可将您的桌面录制为 Ogg 格式(非活跃开发)。
- screencast — 使用 FFmpeg 录制 X11 桌面的命令行界面,支持离线录制和直播。
- Screencast — 为 elementary OS 设计的简单屏幕录制器。
- SimpleScreenRecorder — 功能丰富的屏幕录制器,用 C++/Qt5 编写,支持 X11 和 OpenGL。
- Spectacle — KDE 应用程序,用于屏幕捕获,能够在 Wayland 上捕获整个桌面、单个屏幕或单个窗口的视频(无声音);是 kde-graphics 的一部分(仅在 kwin 激活时有效,因此不能与其他窗口管理器一起使用)。
- VokoScreen — 功能强大的屏幕录制 GUI 工具,使用 GStreamer,支持多种编解码器,从内部或外部(麦克风、网络摄像头)和屏幕/窗口/视图源捕获视频和声音,缩放和突出显示鼠标区域+按钮,但 Wayland 支持有限。
- Wayfarer — 适用于 Wayland 和 Xorg 的 GTK4 屏幕录制器,带有 Pipewire。
Wayland
在基于 Wlroots 的合成器上捕获屏幕可以使用 grim 或 grimshot(来自 sway-contrib)进行屏幕截图,使用 wf-recorder(或 wf-recorder-gitAUR)进行视频录制;wlrobs-hgAUR 是一个 obs-studio 插件,允许您在基于 wlroots 的合成器上进行屏幕捕获。 可选地,slurp 可用于选择要捕获的屏幕部分。如果您的 GPU 支持 vaapi 编码,wl-screenrec-gitAUR 可能是 wf-recorder 的更有效替代方案。
截取全屏屏幕截图
$ grim screenshot.png
在 Sway 中截取当前窗口的屏幕截图
$ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - screenshot.png
在 Hyprland 中截取当前窗口的屏幕截图
$ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - screenshot.png
截取屏幕一部分的屏幕截图
$ slurp | grim -g - screenshot.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 支持在 Wayland 上使用 GNOME 屏幕录制功能进行屏幕录制。
通过 Hyprland
当与 xdg-desktop-portal-hyprland [1] 一起使用时,Hyprland 窗口管理器允许使用 OBS 进行屏幕投射和录制(包括选择单个窗口和工作区)。
通过虚拟摄像头视频源
请参阅 v4l2loopback#使用 wf-recorder 投射 Wayland。
- 此方法已在 zoomAUR(在 xorg-xwayland 下运行的桌面客户端)和 BigBlueButton 在 chromium 下(在 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
,请使用 --force-yuv
或 -t
运行 wf-recorder
,以强制将数据转换为 yuv 格式,然后再将其发送到 GPU。 [3]现在你可以选择上述虚拟视频设备作为视频通话/视频会议应用中的“网络摄像头”(该设备名为 VirtualVideoDevice
)。你可以使用 ffplay
(ffmpeg 的一部分), ffmpeg), mpv, 或 gst-launch
(gstreamer 的一部分, 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 协议
请参阅 PipeWire#WebRTC 屏幕共享。
Chromium 和 Firefox 现在应该能够访问屏幕共享。你可以通过 Mozilla 的 getUserMedia / getDisplayMedia 测试页面 来验证这一点。
使用 X11 应用程序投屏 Wayland 窗口
你可以将原生 Wayland 窗口(或整个屏幕/工作区)共享到 X11 应用程序。为此,你需要使用 xwaylandvideobridgeAUR。有关详细信息,请参阅 Fixing Wayland: Xwayland screen casting。
终端
使用 ANSI 代码捕获
你可以使用 script(1) 命令,它是 util-linux 软件包的一部分。只需运行 script
,从那时起,所有输出都将被保存到 typescript
文件中,包括 ANSI 代码。
完成后,只需运行 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
。
帧缓冲
安装帧缓冲,并使用 fbgrab 或 fbdumpAUR 来截取屏幕截图。
虚拟控制台
屏幕截图
如果你只想捕获控制台中的文本而不是实际图像,可以使用 setterm
,它是 util-linux 软件包的一部分。以下命令会将虚拟控制台 1 的文本内容转储到当前目录下的文件 screen.dump
中
# setterm -dump 1 -file screen.dump
需要 root 权限,因为需要读取 /dev/vcs1
的内容。
控制台投屏
asciinema 允许录制整个终端会话活动,该活动以其自身(开放)格式保存在文件中。可以使用相同的工具或该工具的 HTML5 版本播放此文件,并且可以在 asciinema.org 官方网站或任何自行托管的 HTML 版本上共享。
用法:asciinema(1) 或 asciinema --help
。
asciinema rec output.cast
录制会话,Ctrl+\
可以暂停/恢复,Ctrl-d
/会话退出将停止录制。输出文件名是可选的。
有趣的录制参数
-c command
如果你只想录制特定的命令操作/输出-i 1.2
仅录制 1.2 秒-t "beautiful title"
为终端投屏添加标题
录制以外的其他功能
asciinema play file.cast
播放 asciinmea 录制文件asciinema upload file.cast
将文件上传到 asciinema.org 以进行共享asciinema auth
管理 asciinema.org 帐户上的录制内容
故障排除
屏幕截图使用旧的屏幕状态
请参阅 KDE#Spectacle 屏幕截图使用旧的屏幕状态。
NVIDIA 背景裁剪
如果正在使用 nvidia 专有驱动程序并且屏幕录制遇到背景裁剪问题,请启用 ForceCompositionPipeline
设置。有关详细信息,请参阅 NVIDIA/Troubleshooting#Avoid screen tearing。