ArchWiki / Screen capture
ArchWiki / Screen capture
es:Screen capture ja:スクリーンキャプチャ pt:Screen capture ru:Screen capture zh-hans:Screen capture
This article lists and describes screenshot and screencast software.
Screenshot software
Dedicated software
Application list
Usage
maim
maim is aimed to be an improved scrot.
Save the full screen to file:
$ maim filenamePrompt for selection and save to file:
$ maim --select filenameSave the active window to file, assuming xdotool is installed:
$ maim --window $(xdotool getactivewindow) filenamePrompt for selection, save without cursor, and store it to clipboard, assuming xclip is installed:
$ maim -s | xclip -selection clipboard -t image/png -iscrot
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 5The 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.pngsaves 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.
In some window managers (dwm, 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
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').pngNote 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.
Note that <command> in Openbox does not pass the string to a shell, so in order to run the subcommand, you need to run sh manually. For example, add the following to the keyboard section of your rc.xml file:
<!-- 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>
rc.xmlIf 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.pngFFmpeg
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.
obs-gnome-screencast – plugin for GNOME screencast feature, supports Wayland
Annotation and visualization tools
Some tools that can be used to annotate things during screencasts or show elements like pressed keys, or mouse activity. See List of applications/Other#On-screen annotation.
Wayland
Capturing the screen on Wlroots-based compositor can be done using:
grim or grimshot (from sway-contrib) for screenshots
gscreenshot (whole screen only)
wf-recorder or obs-studio for video
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-screenrec can be a more efficient alternative to wf-recorder.
Screenshot
Take a screenshot of the whole screen:
$ grim screenshot.pngTake a screenshot of current window in Sway:
$ swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | grim -g - screenshot.pngTake a screenshot of current window in Hyprland:
$ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - screenshot.pngTake a screenshot of a part of the screen:
$ slurp | grim -g - screenshot.pngTake a screenshot of a part of the screen and put the output into the clipboard using wl-clipboard:
$ slurp | grim -g - - | wl-copyTake 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* hyprcap 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
vokoscreen now supports both Qt (it's base environment) and GNOME Desktop Environments (DE) for screencast screen, window or screen area. The DE will open a window asking to accept access (fullscreen for fullscreen or cropped part, window, for window) at each new record on GNOME.
Via GNOME screencast
green-recorder, obs-gnome-screencast 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 https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/.
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
Capture a video of the whole screen with filename recording.mp4 (the default is recording.mkv):
$ wf-recorder -f recording.mp4Capture a video of a part of the screen:
$ wf-recorder -g "$(slurp)"
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.
*This method has been tested with zoom (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-git) and v4l2loopback-dkms. Load the v4l2loopback kernel module with the following parameters:
# modprobe v4l2loopback exclusive_caps=1 card_label=VirtualVideoDeviceVerify that a new virtual video device VirtualVideoDevice has been created:
...
VirtualVideoDevice (platform:v4l2loopback-000):
/dev/video2
...$ v4l2-ctl --list-devicesStart 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 yuv420pThe yuv420p colour space is required for the video output to be compatible with Zoom https://github.com/ammen99/wf-recorder/pull/43.
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. https://github.com/ammen99/wf-recorder/issues/164
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 ! glimagesinkIf 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 firefoxSharing 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 yuv420pAfter 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 xwaylandvideobridge. 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 ansi2html 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.htmlActually, some commands can be piped directly to ansi2html:
$ ls --color|ansi2html --bg=dark >output.htmlThat does not work on every single case, so in those cases, using script is mandatory.
Framebuffer
Use fbgrab or fbdump 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.dumpRoot 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.castrecords 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 commandif you just want to record a specific command action/output-i 1.2record for 1.2 seconds only-t "beautiful title"add a title to the terminalcast
Other functions than recording:
asciinema play file.castplay an asciinema record fileasciinema upload file.castupload the file on asciinema.org for sharingasciinema authmanage 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.