Jump to content

# Screen capture

From ArchWiki

Related articles

- Desktop environment
- Key binding
- List of applications

This article lists and describes screenshot and screencast software.

## Screenshot software

### Dedicated software

#### Application list

- CoreShot — C-Suite screen capture utility for Xorg.

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

- Cutefish Screenshot — Screenshot tool for CutefishOS.

  https://github.com/cutefishos/screenshot || cutefish-screenshot

- Escrotum — Screen capture tool using PyGTK, inspired by scrot, and can be used as its replacement.

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

- Flameshot — Qt-based software for interactive screenshot taking.

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

- GNOME Screenshot — Screenshot tool for the GNOME desktop environment. Need running GDBus/GNOME under Wayland

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

- grim — Grab images from a Wayland compositor.

  https://gitlab.freedesktop.org/emersion/grim || grim

- gscreenshot — GTK frontend for multiple screenshot backends including scrot, ImageMagick, PIL, imlib2, and grim; with delays, selection, and copy-to-clipboard functionality.

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

- HotShots — Application for capturing screens and saving them in a variety of image formats as well as adding annotations and graphical data (arrows, lines, texts, ...).

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

- imgur-screenshot — Take screenshot selection, upload to imgur + more cool things.

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

- ksnip — Qt-based cross-platform screenshot tool that provides many annotation features, basic image manipulation and remote destination (ftp, imgur, script).

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

- Lightscreen — Simple tool to automate the tedious process of saving and cataloging screenshots, it operates as a hidden background process that is invoked with one (or multiple) hotkeys and then saves a screenshot file to disk according to the user's preferences.

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

- LXImage-Qt — Qt port of LXImage image viewer and screenshot tool (run with `lximage-qt --screenshot`).

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

- maim — Simple command line utility that takes screenshots meant to replace scrot and performs better than scrot in many ways.

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

- MATE Screenshot — Screenshot tool for the MATE desktop.

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

- menyoki — Command line screenshot and screencast tool with support for image manipulation operations.

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

- mss — An xrandr-aware screenshots Python module with a minimal CLI.

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

- Pantheon Screenshot — Screenshot tool designed for elementary OS.

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

- ScreenCloud — Take a screenshot of the entire screen or to select an area and then uploading the screenshot to imgur+auth with plugins and system tray.

  https://screencloud.net/ || screencloudAUR

- ScreenGrab — Desktop-environment-independent screenshot tool for X11 and Wayland, now maintained by the LXQt project.

  https://github.com/lxqt/screengrab || screengrab

- scrot — Simple command-line screenshot utility for X.

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

- Shotgun — Minimal X screenshot utility written in Rust (according to the author, it is twice as fast as maim).

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

- Shutter — Rich screenshot and editing program (supports delay).

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

- Spectacle — KDE application for screen capture, capable of capturing images of the whole desktop, a single window, a section of a window, a selected rectangular region or a freehand region; part of plasma. Needs running plasma under Wayland

  https://invent.kde.org/plasma/spectacle || spectacle

- Xfce4-screenshooter — Application and Xfce panel plugin to take screenshots about the entire screen, the active window or a selected region; part of xfce4-goodies. Only allow fullscreen capture with Wayland (oct 2025)

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

- xwd — X Window dump utility.

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

#### Usage

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: In my opinion, it's better to merge small description-only section (escrotum) into appropriate unit of the aforementioned application list, and create wiki pages for others. (Discuss in Talk:Screen capture)

##### maim

maim is aimed to be an improved scrot.

Save the full screen to file:

    $ maim filename

Prompt for selection and save to file:

    $ maim --select filename

Save the active window to file, assuming xdotool is installed:

    $ maim --window $(xdotool getactivewindow) filename

Prompt for selection, save without cursor, and store it to clipboard, assuming xclip is installed:

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

##### scrot

scrot enables taking screenshots from the CLI and offers features such as a user-definable time delay. Unless instructed otherwise, it saves the file in the current working directory.

    $ scrot -t 20 -d 5

The above command saves a dated .png file, along with a thumbnail (20% of original), for Web posting. It provides a 5 second delay before capturing in this instance.

You can also use standard date and time formatting when saving to a file. e.g.,

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

saves the screenshot in a filename with the current year, month, date, hours, minutes, and seconds to a folder in your home directory called "screenshots"

See scrot(1) for more information.

Note In some window managers (dwmAUR, xmonad and possibly others) `scrot -s` does not work properly when running via window manager's keyboard shortcut, this can be worked around by prepending scrot invocation with a short pause `sleep 0.2; scrot -s`.

### Desktop environment specific

#### Budgie

Budgie ships with its own screenshot utility called BudgieScreenshot.

It allows capturing the whole screen using `PrintScreen`, the active window or a selected area. See Keyboard Shortcuts for the shortcut to a specific action.

#### 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`.

#### GNOME

GNOME users can press `PrintScreen` or click the camera icon in the system menu. You can also optionally install gnome-screenshot and open it via Apps > Accessories > Take 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-plugin-pipewire and gst-plugins-good packages need to be installed.

#### KDE

If you use KDE, you might want to use Spectacle.

Spectacle is provided by the spectacle package.

#### Xfce

If you use Xfce you can install 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.

#### Other desktop environments or window managers

This article or section is a candidate for merging with ImageMagick#Screenshot taking.

Notes: This subsection is not about "other DE/WM" in general, but about usage of import. (Discuss in Talk:Screen capture)

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 `PrintScreen` above does not work, see Keyboard input and use different keysym or keycode.

### Packages including a screenshot utility

#### ImageMagick/GraphicsMagick

See ImageMagick#Screenshot taking.

#### GIMP

You also can take screenshots with 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

See FFmpeg#Screen capture.

## Screencast software

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.

- 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

- GPU Screen Recorder — Screen recorder that captures your screen on the GPU only to vastly improve performance, comparable to NVIDIA ShadowPlay and supports live streaming and replay buffer as well.

  https://git.dec05eba.com/gpu-screen-recorder-ui/about/ || gpu-screen-recorder-uiAUR

- 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 that 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 capture and perform ImageOps on the command line (X11 only, Wayland planned).

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

- Open Broadcaster Software — Video recording and live streaming application.

  https://obsproject.com/ || obs-studio
  - obs-gnome-screencastAUR – plugin for GNOME screencast feature, supports Wayland

- Peek — Simple screencast tool that produces GIF, APNG, WebM or MP4 animations (no longer under development as of 2023-01).

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

- RecApp — User friendly screencaster written in GTK using free GStreamer modules and not dependent on FFmpeg (no longer under development).

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

- RecordMyDesktop — Easy to use utility with a CLI interface that records your desktop into the Ogg format (inactive development).

  https://recordmydesktop.sourceforge.net/ || recordmydesktop

- 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/ || simplescreenrecorderAUR

- Spectacle — KDE application for screen capture, capable of capturing video (without sound) of the whole desktop, a single screen or a single window on Wayland; part of kde-graphics (works only with kwin activated, so cannot be used with other window managers).

  https://invent.kde.org/plasma/spectacle || spectacle

- VokoScreen — Powerful screencast GUI tool using GStreamer, supporting numerous codec, capture video and sound, from internal or external (micro, webcam) and screen/window/view sources, zoom and highlight of mouse region+buttons but with limited Wayland support.

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

- Wayfarer — GTK4 screen recorder for Wayland with Pipewire as well as Xorg.

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

## Annotation and visualization tools

Some tools that can be used to annotate things during screencasts or show elements like pressed keys, or mouse activity.

- Gromit — On screen draw.

  https://github.com/bk138/gromit-mpx/ || gromit-mpxAUR

- key-mon — Display currently pressed keyboards keys. Does not work on Wayland, due to security policies with input.

  https://github.com/scottkirkwood/key-mon/ || key-mon-gitAUR

- screenkey — Display currently pressed keyboards keys.

  https://www.thregr.org/~wavexx/software/screenkey/ || screenkey (doesn't seem to display anything with Wayland)

## Wayland

Capturing the screen on Wlroots-based compositor can be done using:

- grim or grimshot (from sway-contrib) for screenshots
- wf-recorder or obs-studio for video
- xfce4-screenshooter
- screengrab (full/rectangular part of screen)
- flameshot works, need to select grim for capture in configuration GUI

Optionally, slurp can be used to select the part of the screen to capture. If your GPU supports vaapi encoding, wl-screenrecAUR can be a more efficient alternative to wf-recorder.

Take a screenshot of the whole screen:

    $ grim screenshot.png

Take a screenshot of current window in Sway:

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

Take a screenshot of current window in Hyprland:

    $ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - screenshot.png

Take a screenshot of a part of the screen:

    $ slurp | grim -g - screenshot.png

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

    $ slurp | grim -g - - | wl-copy

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

    $ slurp | grim -g - - | tee ~/Pictures/$(date +%s).png | wl-copy

Capture a video of the whole screen with filename `recording.mp4` (the default is `recording.mkv`):

    $ wf-recorder -f recording.mp4

Capture a video of a part of the screen:

    $ wf-recorder -g "$(slurp)"

Tip

- hyprcapAUR is a script utility to capture screenshots and screen recordings on Hyprland making use of several of the programs mentioned above.
- 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 -`
- screenshot.sh GUI Screenshot Tool for Wayland Using zenity, grim and slurp

### Screencasting

#### Via GNOME screencast

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

#### Via the WebRTC protocol

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.

##### Hyprland

The Hyprland window manager allows screen casting and recording with OBS (including selection of individual windows and workspaces) when used with xdg-desktop-portal-hyprland [1].

##### Sway

Configuration for screen sharing with selection on Sway is covered by default in `/usr/share/xdg-desktop-portal/sway-portals.conf`.

##### Other wlroots based compositors

The factual accuracy of this article or section is disputed.

Reason: According to XDG Desktop Portal#List of backends and interfaces, the GTK portal (xdg-desktop-portal-gtk) is irrelevant to screen sharing. Explain why it is needed and potentially update the linked table. (Discuss in Talk:Screen capture)

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: Writing style does not fit with Help:Style#Language register. (Discuss in Talk:Screen capture)

for those on a different wlroots based compositors, such as dwl: you will need to do the following,

install xdg-desktop-portal-wlr with the gtk version then follow XDG Desktop Portal#Configuration with PipeWire installed then restart

See PipeWire#WebRTC screen sharing.

#### Via a virtual webcam video feed

See v4l2loopback#Casting Wayland using wf-recorder.

Tip

- This method has been tested with zoomAUR (desktop client running under xorg-xwayland) and BigBlueButton under chromium (under firefox the resolution is really low).
- 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].

Tip If you encounter `Unknown V4L2 pixel format equivalent for rgb0` run `wf-recorder` with `--force-yuv` or `-t` to force conversion of the data to yuv format, before sending it to the GPU. [3]

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

Warning 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 virtual video device `/dev/video2` as above.

### Screencast Wayland windows with X11 applications

You can share native Wayland windows (or the whole screen/workspace) to the X11 application. For this you need to use xwaylandvideobridgeAUR. See Fixing Wayland: Xwayland screen casting for details.

## Terminal

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

Use fbgrab or fbdumpAUR to take a screenshot.

### Virtual console

#### 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 permission is needed because the contents of `/dev/vcs1` need to be read.

#### Screencast of console

asciinema allows to record a whole terminal session activity, which is saved in a file in its own (open) format. This file can be played with the same tool or an HTML5 version of the tool, and can be shared on the asciinema.org official web site of the application, or on any own hosted HTML version.

Usage: asciinema(1) or `asciinema --help`.

- `asciinema rec output.cast` records the session, `Ctrl+\` can pause/resume it, `Ctrl-d`/exit of the session will stop it. Name of output file is optional.

Interesting arguments for recording:

- `-c command` if you just want to record a specific command action/output
- `-i 1.2` record for 1.2 seconds only
- `-t "beautiful title"` add a title to the terminalcast

Other functions than recording:

- `asciinema play file.cast` play an asciinema record file
- `asciinema upload file.cast` upload the file on asciinema.org for sharing
- `asciinema auth` manage recordings on asciinema.org account

## Troubleshooting

### Screenshot uses old screen state

See KDE#Spectacle screenshot uses old screen state.

### NVIDIA clipping background

If the NVIDIA driver is in use and the screen recording is experiencing background clipping, enable the `ForceCompositionPipeline` setting. See NVIDIA/Troubleshooting#Avoid screen tearing for details.

Categories:

- Lists of software
- Multimedia
- System administration

Hidden categories:

- Pages or sections flagged with Template:Style
- Pages or sections flagged with Template:Merge
- Pages or sections flagged with Template:Accuracy

Screen capture
Add topic