屏幕捕獲 - 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/故障排除#避免屏幕撕裂。

分類：​

- 軟體列表
- 多媒體
- 系統管理
- 使用「模板:風格」標記的頁面或章節

屏幕捕獲
新增話題