屏幕捕获 - Arch Linux 中文维基

跳转到内容

# 屏幕捕获

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Screen capture，最近一次同步于 2025-01-30，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- 桌面环境
- 按键绑定
- 应用程序列表

本文列出并描述了截屏和录屏软件。

## 截屏软件

### 专用于截图的软件

#### 应用程序列表

- CoreShot — C-Suite 的 Xorg 屏幕捕获工具。

  https://cubocore.gitlab.io/ || coreshotAUR

- Escrotum — 受 scrot 启发的屏幕捕获工具，使用 PyGTK，可替代 scrot。

  https://github.com/Roger/escrotum || escrotum-gitAUR

- 火焰截图 — 基于 Qt 的交互式截图软件。

  https://github.com/lupoDharkael/flameshot || flameshot包

- GNOME 截图工具 — GNOME 桌面环境的截图工具。

  https://gitlab.gnome.org/GNOME/gnome-screenshot/ || gnome-screenshot包

- grim — 从 Wayland 混成器抓取图像。

  https://sr.ht/~emersion/grim/ || grim包

- gscreenshot — 支持多种截图后端（如 scrot、ImageMagick、PIL、imlib2 和 grim）的 GTK 前端工具，支持延时、选区及复制到剪贴板功能。

  https://github.com/thenaterhood/gscreenshot || gscreenshotAUR

- HotShots — 屏幕捕获工具，支持多种图像格式保存，并可添加注释和图形标注（箭头、线条、文字等）。

  https://github.com/obiwankennedy/HotShots || hotshots-gitAUR

- imgur-screenshot — 截取选区并上传至 imgur，支持更多扩展功能。

  https://github.com/jomo/imgur-screenshot || imgur-screenshotAUR

- ksnip — 基于 Qt 的跨平台截图工具，提供多种标注功能、基本的图像编辑功能，并支持远程存储（到 FTP、imgur 或通过自定义脚本）。

  https://github.com/ksnip/ksnip || ksnip包

- Lightscreen — 自动保存和管理截图的工具，以隐藏后台进程运行，通过快捷键触发并按用户偏好保存截图。

  https://lightscreen.com.ar || lightscreenAUR

- LXImage-Qt — LXImage 的 Qt 移植版，含图像查看和截图功能（通过 `lximage-qt --screenshot` 运行）。

  https://github.com/lxde/lximage-qt || lximage-qt包

- maim — 旨在替代 scrot 的命令行截图工具，在多方面表现得比 scrot 更好。

  https://github.com/naelstrof/maim || maim包

- MATE 截图工具 — MATE 桌面环境的截图工具。

  https://mate-desktop.org || mate-utils包

- menyoki — 命令行截图与屏幕录制工具，支持图像处理操作。

  https://github.com/orhun/menyoki || menyoki包

- mss — 基于 xrandr 的 Python 截图模块，提供了极简的命令行界面。

  https://pypi.org/project/mss/ || python-mss包

- Pantheon 截图工具 — 专为 elementary OS 设计的截图工具。

  https://github.com/elementary/screenshot || pantheon-screenshot包

- ScreenCloud — 全屏或选区截图并上传至 imgur，支持身份验证、插件及系统托盘。

  https://screencloud.net/ || screencloudAUR

- ScreenGrab — 基于 Qt 的快速截图工具（已停止开发）。

  https://github.com/DOOMer/screengrab || screengrab包

- scrot — 简单的 X 命令行截图工具。

  https://github.com/resurrecting-open-source-projects/scrot || scrot包

- Shotgun — 用 Rust 编写的极简 X 截图工具（作者称其速度比 maim 快一倍）。

  https://github.com/neXromancers/shotgun || shotgun包

- Shutter — 功能丰富的截图与编辑工具（支持延时截图）。

  https://shutter-project.org/ || shutter包

- Spectacle — KDE 的屏幕捕获工具，支持捕获整个桌面、单个窗口、窗口区域、矩形选区或自由选区；属于 kde-graphics包组。

  https://apps.kde.org/spectacle/ || spectacle包

- Xfce4 截图工具 — 包括应用及 Xfce 面板插件，支持全屏、活动窗口或选区截图；属于 xfce4-goodies包组。

  https://docs.xfce.org/apps/screenshooter/start || xfce4-screenshooter包

- xwd — X Window 图像转储工具。

  https://www.x.org/ || xorg-xwd包

#### 使用方式

本文或本章节的语言、语法或风格需要改进。参考：帮助:风格

原因：建议将仅含简要说明的小节（如 #Escrotum）合并至前述应用列表的对应条目，并为其他内容创建独立维基页面。（在en:Talk:Screen capture讨论）

#### 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)。

注意：在某些窗口管理器（如 dwmAUR、xmonad包）中，通过快捷键直接运行 `scrot -s` 时选区功能可能异常，可通过添加短暂延时解决：`sleep 0.2; scrot -s`。

### 不同桌面环境的截图工具

#### 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。

屏幕录制工具可捕获桌面或单个窗口的视频流。

- 深度录屏 — 深度桌面环境的录屏工具。

  https://www.deepin.org/zh/original/deepin-screen-recorder/ || deepin-screen-recorder包

- FFcast — 基于 FFmpeg 的 Bash 脚本录屏工具。

  https://github.com/lolilolicon/FFcast || ffcastAUR

- GPU Screen Recorder GTK — GPU 加速录屏工具，性能媲美 NVIDIA ShadowPlay，支持直播和回放缓冲。

  https://git.dec05eba.com/gpu-screen-recorder-gtk/about/ || gpu-screen-recorder-gtkAUR

- Green Recorder — 简洁实用的 Linux 桌面录屏工具。

  https://github.com/dvershinin/green-recorder || green-recorderAUR

- Kazam — 支持多屏配置的录屏程序。

  https://launchpad.net/kazam || kazamAUR

- Kooha — 极简 GTK 界面录屏工具。

  https://github.com/SeaDve/Kooha || kooha包

- menyoki — 命令行屏幕捕获及图像处理工具（目前仅支持 X11，Wayland 开发中）。

  https://github.com/orhun/menyoki || menyoki包

- OBS — 专业视频录制与直播软件。

  https://obsproject.com/ || obs-studio包
  - obs-gnome-screencastAUR——支持 Wayland 的 GNOME 录屏插件

- Peek — 生成 GIF/APNG/WebM/MP4 动画的简易录屏工具（2023 年 1 月起停止开发）。

  https://github.com/phw/peek || peek包

- RecApp — 基于 GStreamer 模块的 GTK 录屏工具（不依赖 FFmpeg，已停止开发）

  https://github.com/amikha1lov/RecApp || recappAUR

- RecordMyDesktop（英语：RecordMyDesktop） — 支持 CLI/GTK/Qt 界面的 ogg 格式桌面录制工具（开发停滞）。

  https://recordmydesktop.sourceforge.net/ || 命令行界面：recordmydesktop包；GTK2 界面：gtk-recordmydesktopAUR

- screencast — 基于 FFmpeg 的 X11 命令行录屏工具，支持离线录制与直播推流。

  https://github.com/dbermond/screencast/ || screencastAUR

- Screencast — 专为 elementary OS 设计的简易录屏工具。

  https://github.com/artemanufrij/screencast || pantheon-screencastAUR

- SimpleScreenRecorder — 使用 C++/Qt5 编写的多功能录屏软件，支持 X11 和 OpenGL。

  https://www.maartenbaert.be/simplescreenrecorder/ || simplescreenrecorderAUR

- Spectacle — KDE 屏幕捕获工具，支持 Wayland 下所有屏幕、单屏幕、单窗口和矩形选区视频录制（无音频），属于 kde-graphics包组（使用时需要 kwin，无法与其他窗口管理器共用）。

  https://apps.kde.org/spectacle/ || spectacle包

- VokoScreen — 基于 GStreamer 的强力录屏工具，支持多编解码器、音视频采集、内外设备输入和区域缩放高亮（Wayland 支持有限）。

  https://linuxecke.volkoh.de/vokoscreen/vokoscreen.html || vokoscreen包

- Wayfarer — 适用于 Wayland（基于 Pipewire）和 Xorg 的 GTK4 录屏工具。

  https://github.com/stronnag/wayfarer || wayfarerAUR

## 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)"

提示：

- 使用 bemenu包 的交互式脚本 slurpshot 可用于截图。
- 可以在截屏后使用截屏编辑工具，如 swappy包：`grim -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 屏幕（英语：v4l2loopback#Casting Wayland using wf-recorder）。

提示：

- 此方法已在 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 协议

注意：此方法仅允许共享整个屏幕，而不能仅共享屏幕的一部分 [4]。

参见 PipeWire#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 账户的录制内容

## 问题解决

### 截图使用旧的屏幕状态

参见 KDE#Spectacle 使用旧的屏幕状态截图。

### NVIDIA 录制背景被裁剪

如果正在使用 nvidia包 专有驱动程序，并且屏幕录制时背景出现裁剪问题，请启用 `ForceCompositionPipeline` 设置。详情请参见 NVIDIA/故障排除#避免屏幕撕裂。

分类：​

- 软件列表
- 多媒体
- 系统管理
- 使用“模板:风格”标记的页面或章节

屏幕捕获
添加话题