屏幕捕获

来自 Arch Linux 中文维基

本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队

附注: 部分内容尚未翻译(在 Talk:屏幕捕获# 中讨论)

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

截屏软件[编辑 | 编辑源代码]

专项软件[编辑 | 编辑源代码]

  • CoreShot — 在X11上的简单轻量级屏幕捕获实用程序。是C-Suite的一部分。
https://cubocore.org/ || coreshotAUR
  • Deepin Screenshot — 非常简单易用的截图工具,现已弃用并合并到深度录屏(Deepin Screen Recorder)中。已知的剪贴板功能问题已通过deepin-screenshot-copy-patchAUR进行修补 。
https://www.deepin.org/en/original/deepin-screenshot/ || deepin-screenshot
  • Escrotum — 使用python和gtk3的屏幕截图软件,灵感来源于scrot。
https://github.com/Roger/escrotum || escrotum-gitAUR
  • Flameshot — 基于Qt5的交互式屏幕截图软件。选择所需截图的区域,使用不同的工具录制,并且可以自定义功能。
https://github.com/lupoDharkael/flameshot || flameshot
https://gitlab.gnome.org/GNOME/gnome-screenshot/ || gnome-screenshot
  • grim — 从Wayland compositor上抓取图像。
https://github.com/emersion/grim || grim
  • gscreenshot — 简单的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 — Ksnip是一个基于Qt的跨平台截图工具,为您的截图提供了许多注释功能。
https://github.com/ksnip/ksnip || ksnip
  • Lightscreen — 一个简单的工具,自动优化繁琐的保存和编目屏幕截图过程,它作为一个隐藏的后台进程,调用一个(或多个)快捷键,然后根据用户的喜好保存屏幕截图文件到磁盘。
https://lightscreen.com.ar || lightscreenAUR
  • LXQt Screenshot — LXQt上的截图工具,使用lximage-qt --screenshot命令运行。
https://github.com/lxde/lximage-qt || lximage-qt
  • maim — 简单的命令行屏幕截图实用工具。它旨在取代scrot,并且在许多方面比scrot表现得更好。
https://github.com/naelstrof/maim || maim
  • MATE Screenshot — MATE桌面环境的截图工具
https://mate-desktop.org || mate-utils
  • menyoki — 命令行屏幕截图和屏幕播放工具,支持图像处理操作。
https://github.com/orhun/menyoki || menyoki
  • mss — 一个支持xrandr的屏幕截图Python模块,只需最小的CLI。
https://pypi.org/project/mss/ || python-mss
  • Pantheon Screenshot — 为elementary OS设计的屏幕截图工具。
https://github.com/elementary/screenshot || pantheon-screenshot
  • ScreenCloud — 拍摄整个屏幕或选择一个区域的屏幕截图,然后上传屏幕截图到imgur+auth。具有插件和系统托盘。
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 — 丰富的截图和编辑程序。支持 delay延迟拍摄。
https://shutter-project.org/ || shutter
  • Spectacle — 屏幕{截图,录制}的KDE应用程序。它能够捕获整个桌面、单个窗口、窗口的一部分、选定的矩形区域或手绘区域的图像。它是kde-graphics包组的一部分。
https://github.com/KDE/spectacle/ || spectacle
  • Xfce4 Screenshooter — 获取整个屏幕截图,活动窗口或选定区域的应用程序和Xfce 4面板插件。它是 xfce4-goodies包组的一部分。
https://goodies.xfce.org/projects/applications/xfce4-screenshooter || xfce4-screenshooter
  • xwd — X窗口管理器图像储存工具
https://www.x.org/ || xorg-xwd

xwd[编辑 | 编辑源代码]

xwd(1)xorg-xwd 提供。

要截取根窗口的屏幕截图:

$ xwd -root -out screenshot.xwd
提示:要在截屏前延迟,请使用 sleep 命令。例如:sleep 5; xwd ...

scrot[编辑 | 编辑源代码]

scrot 允许从命令行截取屏幕截图,并允许设定延迟截取等功能。除非特别指定,否则它将把文件保存到当前工作目录。

$ scrot -t 20 -d 5

上述的命令会保存一个带日期的 .png 文件,及其缩略图(源文件的 20%),以供网络内容使用。在这个例子中,它将在截屏前延迟5秒。

在保存文件时,同样可以使用标准日期和时间格式,比如:

$ scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png

会将屏幕截图以包含当前年、月、天数、小时、分钟、秒的文件名保存到主目录中名为 "screenshorts" 的文件夹中。

详见 scrot(1) 以查询更多信息。你可以像这样简单的自动上传文件 [1]

注意: 在某些窗口管理器(dwmAURxmonad 或者其他)中通过窗口管理器的键盘快捷键运行时,scrot -s 无法正常工作,者可以通过在对 short 调用前添加短暂的延迟 sleep 0.2; scrot -s 来解决。

escrotum[编辑 | 编辑源代码]

escrotum-gitAUR 受 scrot 启发,使用 PyGTK 截屏

创建的原因是 scrot 在选择模式与正在刷新的窗口一起使用时具有故障。

因为它的命令行界面和 scrot 几乎一样,因此可以作为它的替代品。

maim[编辑 | 编辑源代码]

maim 旨在成为一个改进的 scrot。

使用 slop 为桌面屏幕区域截图。这旨在克服 scrot 的缺点。

要选择屏幕的一部分并将其存储到剪贴板,可以使用 xclip

$ maim -s -u | xclip -selection clipboard -t image/png -i

特定于桌面环境的软件[编辑 | 编辑源代码]

Spectacle[编辑 | 编辑源代码]

如果你使用 KDE,那你可能想要使用 Spectacle

Spectacle 由 spectacle 软件包提供。

Xfce Screenshooter[编辑 | 编辑源代码]

如果你使用 Xfce 你可以安装 xfce4-screenshooter and then add a keyboard binding:

Xfce Menu > Settings > Keyboard > Application Shortcuts

If you want to skip the Screenshot prompt, type $ xfce4-screenshooter -h in terminal for the options.

GNOME[编辑 | 编辑源代码]

GNOME users can press PrintScreen or Apps > Accessories > Take Screenshot. You may need to install gnome-screenshot.

GNOME features built-in screen recording with the Ctrl+Shift+Alt+r key combination. A red circle is displayed in the bottom right corner of the screen when the recording is in progress. After the recording is finished, a file named Screencast from %d%u-%c.webm is saved in the Videos directory. In order to use the screencast feature the gst plugins need to be installed.

Cinnamon[编辑 | 编辑源代码]

The default installation of Cinnamon does not provide a screenshot utility. Installing gnome-screenshot will enable screenshots through the Menu > Accessories > Screenshot or by pressing PrintScreen.

其他桌面环境或窗口管理器[编辑 | 编辑源代码]

For other desktop environments such as LXDE or window managers such as Openbox and Compiz, one can add the above commands to the hotkey to take the screenshot. For example,

$ import -window root ~/Pictures/$(date '+%Y%m%d-%H%M%S').png

Note that import is part of the imagemagick package. Adding the above command to the PrintScreen key to Compiz allows to take the screenshot to the Pictures folder according to date and time. Notice that the rc.xml file in Openbox does not understand commas; so, in order to bind that command to the PrintScreen key in Openbox, you need to add the following to the keyboard section of your rc.xml file:

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>

If the Print above does not work, see Extra keyboard keys and use different keysym or keycode.

包含截屏实用程序的软件包[编辑 | 编辑源代码]

ImageMagick/GraphicsMagick[编辑 | 编辑源代码]

请参阅 ImageMagick#Screenshot taking

GIMP[编辑 | 编辑源代码]

也可以使用 GIMP 截图(File > Create > Screenshot...)。

imlib2[编辑 | 编辑源代码]

imlib2 provides a binary imlib2_grab to take screenshots. To take a screenshot of the full screen, type:

$ imlib2_grab screenshot.png

FFmpeg[编辑 | 编辑源代码]

请参阅 FFmpeg#Screen capture

录屏软件[编辑 | 编辑源代码]

See also FFmpeg#Screen capture and Wikipedia:Comparison of screencasting software.

Screencast utilities allow you to create a video of your desktop or individual windows.

  • Byzanz — Simple screencast tool that produces GIF animations.
https://gitlab.gnome.org/Archive/byzanz || byzanz
  • Deepin Screen Recorder — Screen recorder application for Deepin desktop.
https://www.deepin.org/en/original/deepin-screen-recorder/ || deepin-screen-recorder
  • FFcast — FFmpeg-based screencast tool written in Bash.
https://github.com/lolilolicon/FFcast || ffcastAUR
  • Green Recorder — Simple yet functional desktop recorder for Linux systems.
https://github.com/dvershinin/green-recorder || green-recorderAUR
  • Kazam — Screencasting program with design in mind. Handles multiscreen setups.
https://launchpad.net/kazam || kazamAUR
  • Kooha — Simple screen recorder with a minimal GTK interface.
https://github.com/SeaDve/Kooha || kooha
  • menyoki — Screen{shot,cast} and perform ImageOps on the command line.
https://github.com/orhun/menyoki || menyoki
https://obsproject.com/ || obs-studio
  • Peek — Simple screencast tool that produces GIF, APNG, WebM or MP4 animations.
https://github.com/phw/peek || peek
  • RecApp — User friendly screencaster written in GTK. Using free GStreamer modules and not depend on FFmpeg. No longer under development.
https://github.com/amikha1lov/RecApp || recapp-gitAUR
  • RecordItNow — Plugin based desktop recorder for KDE 4.
http://recorditnow.sourceforge.net/ || recorditnowAUR
  • RecordMyDesktop — Easy to use utility that records your desktop into the ogg format with a CLI, GTK or Qt interface. (inactive development)
http://recordmydesktop.sourceforge.net/ || CLI: recordmydesktop, GTK: gtk-recordmydesktopAUR, Qt: qt-recordmydesktopAUR
  • screencast — Command line interface to record an X11 desktop using FFmpeg, having support for offline recording and live streaming.
https://github.com/dbermond/screencast/ || screencastAUR
  • Screencast — Simple screencast recorder designed for elementary OS.
https://github.com/artemanufrij/screencast || pantheon-screencastAUR
  • SimpleScreenRecorder — Feature-rich screen recorder written in C++/Qt5 that supports X11 and OpenGL.
https://www.maartenbaert.be/simplescreenrecorder/ || simplescreenrecorder
  • VokoScreen — Simple screencast GUI tool using GStreamer.
https://linuxecke.volkoh.de/vokoscreen/vokoscreen.html || vokoscreen
  • XVidCap — Application used for recording a screencast or digital recording of an X Window System screen output with an audio narration.
http://xvidcap.sourceforge.net/ || xvidcapAUR

Wayland[编辑 | 编辑源代码]

Capturing the screen on Wlroots-based compositor can be done using grim or grimshot (provided by sway) for screenshots and wf-recorder (or wf-recorder-gitAUR) for video; wlrobs-hgAUR is an obs-studio plugin that allows you to screen capture on wlroots-based compositors. Optionally, slurp can be used to select the part of the screen to capture.

Take a screenshot of the whole screen:

$ grim screenshot.png

Take a screenshot of current window:

$ grim -g "$(swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')" screenshot.png

Take a screenshot of a part of the screen:

$ grim -g "$(slurp)" screenshot.png

Take a screenshot of a part of the screen and put the output into the clipboard using wl-clipboard:

$ grim -g "$(slurp)" - | wl-copy

Capture a video of the whole screen:

$ wf-recorder -f recording.mp4

Capture a video of a part of the screen:

$ wf-recorder -g "$(slurp)"
提示:
  • slurpshot is an interactive screenshot taking script using bemenu.
  • To use a post-capture screenshot editing and drawing tool such as swappy: grim -g "$(slurp)" - | swappy -f -

Additionally, some programs mentioned above work under Wayland (e.g. ksnip, green-recorderAUR).

Tmate[编辑 | 编辑源代码]

To capture your terminal(s) in wl-roots based compositor like wayland, use tmate, then copy your ssh key and send it to your mate. For further information see tmate(1)

录屏[编辑 | 编辑源代码]

Via GNOME screencast[编辑 | 编辑源代码]

green-recorderAUR, obs-gnome-screencastAUR and obs-studio support screen recording on Wayland using GNOME screencast feature.

Via a virtual webcam video feed[编辑 | 编辑源代码]

提示:
  • This method has been tested with zoomAUR (desktop client running under xorg-xwayland) and BigBlueButton under chromium (under firefox the resolution is really low); skypeforlinux-stable-binAUR detects the virtual video device VirtualVideoDevice, but outputs a blank screen.
  • The example uses wf-recorder but you can use whatever software, just feed the output to the virtual device.

Install wf-recorder (or wf-recorder-gitAUR) and v4l2loopback-dkms. Load the v4l2loopback kernel module with the following parameters:

# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDevice

Verify that a new virtual video device VirtualVideoDevice has been created:

$ v4l2-ctl --list-devices
...
VirtualVideoDevice (platform:v4l2loopback-000):
	/dev/video2
...    

Start recording the screen with wf-recorder and feed the output to the new virtual video device VirtualVideoDevice created by v4l2loopback:

$ wf-recorder --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p

The yuv420p colour space is required for the video output to be compatible with Zoom [2].

You can now select the above virtual video device as your "webcam" in video calling/video conferencing applications (the device is called VirtualVideoDevice). You can use ffplay (part of ffmpeg), mpv, or gst-launch (part of gstreamer) to verify that the virtual video device indeed outputs your screenshare:

$ ffplay /dev/video2
$ mpv av://v4l2:/dev/video2
$ gst-launch-1.0 -v v4l2src device=/dev/video2 ! glimagesink

If Firefox is unable to read the video stream and prints a message like "AbortError: Starting video failed", try preloading v4l2compat.so:

$ LD_PRELOAD=/usr/lib/v4l1compat.so firefox
Sharing individual applications[编辑 | 编辑源代码]
警告: This method does not involve a proper implementation of individual application sharing as the region being shared will not change after resizing any windows.

As explained above, wf-recorder is able to record only a portion of the screen by first selecting a region with slurp. To use this functionality for sharing a specific region/application window through a virtual video device, start recording the screen with the following modified command:

$ wf-recorder -g "$(slurp)" --muxer=v4l2 --codec=rawvideo --file=/dev/video2 -x yuv420p

After selecting a region of the screen, you will be able to access the video feed through the vitual video device /dev/video2 as above.

Via the WebRTC protocol[编辑 | 编辑源代码]

注意: This method only allows sharing an entire output and not individual applications [3].

See PipeWire#WebRTC screen sharing.

Chromium and Firefox should now be able to access the screenshare. You can verify this through Mozilla's getUserMedia / getDisplayMedia Test Page.

终端[编辑 | 编辑源代码]

Capture with ANSI codes[编辑 | 编辑源代码]

You can use the script(1) command, part of the util-linux package. Just run script and from that moment, all the output is going to be saved to the typescript file, including the ANSI codes.

Once you are done, just run exit and the typescript would ready. The resulting file can be converted to HTML using the ansi2htmlAUR package, from the AUR. (Not to be confused with ansi2html from python-ansi2html).

To convert the typescript file to typescript.html, do the following:

$ ansi2html --bg=dark < typescript > typescript.html

Actually, some commands can be piped directly to ansi2html:

$ ls --color|ansi2html --bg=dark >output.html

That does not work on every single case, so in those cases, using script is mandatory.

Framebuffer[编辑 | 编辑源代码]

Install a framebuffer and use fbgrab or fbdump to take a screenshot.

虚拟控制台[编辑 | 编辑源代码]

If you merely want to capture the text in the console and not an actual image, you can use setterm, which is part of the util-linux package. The following command will dump the textual contents of virtual console 1 to a file screen.dump in the current directory:

# setterm -dump 1 -file screen.dump

需要 root 权限,因为需要读取 /dev/vcs1 的内容。