How can I take a screenshot in X.org?

I am unsure if the Print Screen button will "just work" and I don't know how I would go about testing it.

4 Answers 4


The most commonly used Linux application for taking screen-shots is called scrot

You can install it with for Debian:

sudo apt-get install scrot

Or for Arch:

sudo pacman -S scrot

A screenshot is taken by typing:

scrot output-file.png

If you want to bind scrot to the print screen key then that will need to be controlled by your window manager.

  • 1
    Scrot is quicker and smaller than ImageMagick - 1MB compared to 43MB.
    – Andrew Fogg
    Jun 16, 2012 at 23:26

I found a great answer to this question here, it is worth repeating.

This can be achieved with ImageMagick. Install by running the command

sudo apt-get install imagemagick

To grab all desktop just type

import -window root screen.png

Or you can do it with a delay of 5 seconds

sleep 5; import -window root screen.png
  • I wonder whether we could bind this to a key combo; anyone? Jun 16, 2012 at 19:22
  • @AlexChamberlain: This is dependant on the WM that is being used.
    – Jivings
    Jun 16, 2012 at 21:03
  • @AlexChamberlain there is an answer as to how to do that here
    – Andrew Fogg
    Jun 17, 2012 at 13:54
  • 1
    -1 I despise ImageMagick and all of its derivatives/relatives. It's a kick in the pants to install, and it's even worse to fix if something breaks. Jun 18, 2012 at 17:21
  • @Jivings I guess if you're using your window manager's keybindings; I would think most people use xbindkeys though Jul 9, 2012 at 18:37

I use 'xwd'. For example, one I just did: xwd | xwdtopnm > dw.ppm The only downside I know of with xwd is that you need some other utility to convert its output to something understood by anything other than 'xwud'.


This is the perl6 script I use to take root area window or delay ScreenShots using import:

#!/usr/bin/env perl6
use v6;

sub message(Str $file) {
  run <xmessage -nearmouse -timeout 3>, "Screenshot saved in $file";

sub print_window(Str $file) {
  qx{xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"} ~~ /(0x\d*).*$/;
  run <import -window>, $0, $file;

sub MAIN( Str $option where $option ∈ <root area window delay> ) {
  my $today = DateTime.now( formatter => { 
        sprintf "%04d_%02d_%02d_%02d:%02d:%02d", 
                .year, .month, .day, .hour, .minute, .second 
       } );
  my $file  = "$*HOME/Dades/Imatges/ScreenShots/$today.png";

  given $option {
    when 'root'   { run <import -window root>, $file; message($file) }
    when 'area'   { run "import", $file             ; message($file) }
    when 'window' { print_window($file)                              }
    when 'delay'  { sleep 5; print_window($file)                     }
    default       { say 'Something went wrong'      ; exit           }

These are the key bindings in i3 to run the script:

bindsym $mod+Print exec Print_Screen root 
bindsym --release $mod+Shift+Print exec Print_Screen area
bindsym $mod+Mod1+Print exec Print_Screen delay
bindsym $mod+Control+Print exec Print_Screen window

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .