スクリーンショットの取得

提供: ArchWiki
移動先: 案内検索

この記事ではシステムのスクリーンショットを取得する様々な方法を説明しています。

専用のソフトウェア

  • Deepin Screenshot — とても使いやすいスクリーンショットツール。機能: スクリーンショットツールを発動するホットキー、選択した領域のスクリーンショットの取得、スクリーンショットに文章や線画を簡単に追加。Python/Qt5 ベース。
https://www.deepin.org/ || deepin-screenshot
  • Escrotum — pygtk を使用して画面をキャプチャ。scrot の影響を受けています。
https://github.com/Roger/escrotum || escrotum-gitAUR
  • gnome-screenshot — dconf, gtk3, libcanberra にしか依存しないため GNOME 以外でも使えます。
http://gnome.org || gnome-screenshot
  • gscreenshot — シンプルな GTK スクリーンショットユーティリティ。遅延時間を設定したり範囲選択・クリップボードにコピーする機能があります。
https://github.com/thenaterhood/gscreenshot || gscreenshotAUR
  • imgur-screenshot — スクリーンショットを取得して imgur にアップロードするツール。
https://github.com/jomo/imgur-screenshot || imgur-screenshot-gitAUR
  • Lightscreen — 退屈なスクリーンショットの保存とカタログ化を自動化するシンプルなツール。表には現れないバックグラウンドプロセスとして動作し、(複数の) ホットキーで呼び出してスクリーンショットファイルをユーザーの設定にあわせてディスクに保存する。
http://lightscreen.com.ar || lightscreenAUR
  • maim — スクリーンショットを取得するシンプルなコマンドラインユーティリティ。scrot を置き換えるものとして様々な点で scrot よりも優れています。
https://github.com/naelstrof/maim || maim
  • screencloud — 画面全体のスクリーンショットや領域を選択して撮影し、imgur+auth にスクリーンショットをアップロードできるツール。プラグインとシステムトレイが付属。
http://screencloud.net/ || screencloudAUR
  • screengrab — スクリーンショットを手軽に取得するためのクロスプラットフォームのアプリケーション (Qt)。
http://screengrab.doomer.org/ || screengrabAUR
  • Scrot — X 向けのシンプルなコマンドラインスクリーンショットユーティリティ。
http://freecode.com/projects/scrot || scrot
  • Shutter — リッチなスクリーンショット・編集プログラム。
http://shutter-project.org/ || shutterAUR
  • Spectacle — スクリーンショットを撮るための KDE のアプリケーション。デスクトップ全体、単一のウィンドウ、ウィンドウの一部、四角形またはフリーハンドで指定した領域の画面をキャプチャすることができます。kdegraphics に含まれています。
https://github.com/KDE/spectacle/ || spectacle
  • Xfce4 Screenshooter — 画面全体、アクティブウィンドウ、または選択領域のキャプチャを行えます。スクリーンショットを撮るまでの待機時間とスクリーンショットを撮った後の動作を設定できます: PNG ファイルに保存、クリップボードにコピー、別のアプリケーションで開く、無料の画像ホスティングサービスである ZimageZ にアップロード。xfce4-goodies に含まれています。
http://goodies.xfce.org/projects/applications/xfce4-screenshooter || xfce4-screenshooter
  • xwd — X Window System イメージダンプユーティリティ。
http://xorg.freedesktop.org/ || xorg-xwd

スクリーンショットユーティリティが含まれているパッケージ

  • GIMPAdobe Photoshop などのプロプライエタリなエディタに匹敵する画像編集スイート。GIMP (GNU Image Manipulation Program) の開発は1990年代中頃から開始され、大量のプラグインや補助ツールが存在します。
http://www.gimp.org/ || gimp
  • GraphicsMagick — API やコマンドラインの安定性を確保するために作られた ImageMagick のフォーク。パフォーマンスを向上させるためのマルチコア CPU をサポートしており、パフォーマンスを目当てに様々な巨大な商用サイト (Flickr, etsy) で採用されています。
http://www.graphicsmagick.org/ || graphicsmagick
  • ImageMagick — コマンドラインの画像処理プログラム。100以上のフォーマットをサポートしており正確なフォーマット変換ができることで知られています。ImageMagick の API はスクリプト化することができ大抵はバックエンドの処理に使われています。
http://www.imagemagick.org/script/index.php || imagemagick
  • Imlib2 — 画像ファイルのロードと保存、さらにレンダリング、操作、任意多角形をサポートしているライブラリ。
http://sourceforge.net/projects/enlightenment/ || imlib2
  • MATE Utils — ディスク使用量・ログ・フォントを表示したり、スクリーンショットを取得したり、辞書の管理、ファイル検索などを行うための汎用 MATE ユーティリティ。
http://mate-desktop.org || mate-utils

一般的な方法

ImageMagick/GraphicsMagick

import コマンドを使うことで現在のシステムのスクリーンショットを簡単に取得できます:

$ import -window root screenshot.jpg

importimagemagick パッケージに入っています。

-window オプションを付けずに import を実行するとウィンドウや任意の領域をインタラクティブに選択することが可能です。

ノート: graphicsmagick を使いたい場合は、"gm" を前に付けて下さい、例: $ gm import -window root screenshot.jpg

複数の X 画面のスクリーンショット

twinview または dualhead で使っている場合、2回スクリーンショットを取得して imagemagick を使って貼り付けます:

import -window root -display :0.0 -screen /tmp/0.png
import -window root -display :0.1 -screen /tmp/1.png
convert +append /tmp/0.png /tmp/1.png screenshot.png
rm /tmp/{0,1}.png

Xinerama ヘッドのスクリーンショット

Xinerama による multi-head セットアップでは仮想スクリーンが一つしかありません。物理的なスクリーンの高さに違いがあると、スクリーンショットにデッドスペースが出来てしまいます。こういう場合、それぞれの物理的なスクリーンごとにスクリーンショットを取得すると良いでしょう。Xinerama の情報が X サーバーから取り出せていれば、以下のスクリプトが動作します:

#!/bin/sh
xdpyinfo -ext XINERAMA | sed '/^  head #/!d;s///' |
while IFS=' :x@,' read i w h x y; do
        import -window root -crop ${w}x$h+$x+$y head_$i.png
done

アクティブなウィンドウ/フォーカスしたウィンドウのスクリーンショット

以下のスクリプトは現在フォーカスされているウィンドウのスクリーンショットを取得します。EWMH/NetWM 準拠の X ウィンドウマネージャで動作します。スクリーンショットを上書きしないように、ファイル名に取得時刻を使っています。

#!/bin/sh
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId=${activeWinLine:40}
import -window "$activeWinId" /tmp/$(date +%F_%H%M%S_%N).png

もしくは、次のコマンドは EWMH をサポートしているかどうかに関わらず動作します:

$ import -window "$(xdotool getwindowfocus -f)" /tmp/$(date +%F_%H%M%S_%N).png
ノート: (dwb や zathura) プログラムのスクリーンショットが空になる場合は、xdotool コマンドに -frame を付けたり -f を削除してみてください。

GIMP

GIMP を使ってスクリーンショットを取得することもできます (File > Create > Screenshot...)。

xwd

ルートウィンドウのスクリーンショットを取得:

$ xwd -root -out screenshot.xwd
ノート: import でアクティブウィンドウのスクリーンショットを取得する方法でも xwd を使うことができます。

scrot

scrot を使えば CLI からスクリーンショットを撮ることができ、シャッターを押すまでの待機時間をユーザーが定義できるなどの機能があります。特に指定がなければ、カレントディレクトリにファイルが保存されます。

$ scrot -t 20 -d 5

上記のコマンドは日付が入った .png ファイルが作成され、ウェブ投稿用にサムネイルも作られます (元の画像の 20%)。上の例ではキャプチャするまで5秒間待ちます。

ファイルに保存するときに標準的な日付のフォーマットを使うこともできます、例えば:

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

このコマンドではホームディレクトリの "screenshots" という名前のフォルダに、現在の年・月・日・時間・分・秒がファイル名のスクリーンショットが保存されます。

詳しくは man scrot を見て下さい。[1] のようにファイルのアップロードを自動化することもできます。

ノート: このスレッド によると、scrotdwm で動作しません。

escrotum

escrotum-gitAUR は pygtk を使って画面をキャプチャします。scrot にインスパイアされています。

選択モードを使った時に scrot ではウィンドウのリフレッシュでバグが発生するので開発されました。

コマンドラインインターフェースは scrot とほぼ同じなので、そのまま同じように使うことができます。

imlib2

imlib2 にはスクリーンショットを取得するためのバイナリ imlib2_grab が含まれています。フルスクリーンのスクリーンショットを取得するには、次を入力:

$ imlib2_grab screenshot.png

実は scrotimlib2 を使っています。

maim

maim は scrot の向上版を目指しています。

scrot の欠点を補っており 複数の点 で scrot を上回っています。

FFmpeg

FFmpeg は X11 のスクリーンをキャプチャできる x11grab デバイスを提供しています。

ディスプレイの横幅x高さを指定してスクリーンショットを取得:

$ ffmpeg -f x11grab -video_size widthxheight -i $DISPLAY -vframes 1 screen.png

上記のコマンドでは PNG コーデック (ロスレスでスクリーンショットに向いている) を使っていますが、他の画像コーデックも使うことができます。

同じデバイスを使ってスクリーンキャストも可能です (ディスプレイのリフレッシュレートを rate HZ で指定):

$ ffmpeg -f x11grab -video_size widthxheight -framerate rate -i $DISPLAY -c:v libx264 -preset ultrafast cast.mkv

上記のコマンドでは、エンコード速度が一番高速な x264 コーデックを使っていますが、他のコーデックも使えます。ただし (ディスクのパフォーマンスが足りなかったりエンコードが遅かったりして) フレームの書き込みが遅すぎると、フレームが抜け落ちて出力された動画は飛び飛びになります。

Weston

Wayland のコンポジットマネージャである Weston では、Super+s を押すことでスクリーンショットを撮影することができ、Weston の現在の作業ディレクトリに保存されます。スクリーンキャストもサポートされています。録画の開始と停止は Super+r を押すことで行われ、Weston の現在の作業ディレクトリに capture.wcap という名前のファイルが作成されます。wcap-decode --yuv4mpeg2 capture.wcap を実行することでキャプチャを YUV フォーマットにデコードできます。このコマンドの出力をファイルに書き込んだり、FFmpeg にパイプして更に処理を加えることもできます。

デスクトップ環境による方法

Spectacle

KDE を使っている場合、Spectacle を使用すると良いでしょう。Prnt Scr で使うことができます。

Spectacle は spectacle に入っています。

Xfce Screenshooter

Xfce を使っている場合 xfce4-screenshooter をインストールしてキーボードバインディングを追加することができます:

Xfce Menu > Settings > Keyboard > Application Shortcuts

Screenshot プロンプトをスキップしたい場合は、オプションのターミナルに $ xfce4-screenshooter -h と入力してください。

GNOME

GNOME ユーザーは Prnt Scr を押すか Apps > Accessories > Take Screenshot でスクリーンショットが取れます。gnome-screenshot をインストールする必要があります。

Cinnamon

Cinnamon はデフォルトでスクリーンショットユーティリティがインストールされません。gnome-screenshot をインストールするとスクリーンショットが有効になり、Menu > Accessories > Screenshot または Prnt Scr を押すことで撮影できるようになります。

他のデスクトップ環境やウィンドウマネージャ

LXDE などのデスクトップ環境や OpenboxCompiz などのウィンドウマネージャの場合、上述のコマンドをホットキーに追加してスクリーンショットを撮影することができます。例えば:

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

上のコマンドを Prnt Scr キーに追加すれば Compiz でスクリーンショットを取得して Pictures フォルダに日付を付けて保存できます。Openbox の rc.xml ファイルではコンマを使えないので、Openbox でこのコマンドを Prnt Scr キーに指定するには、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>

上記の Print が動作しない場合、特別なキーボードキーをみて、別のキーシムキーコードを使って下さい。

ターミナル

ansi コードで出力

util-linux パッケージに含まれている、script コマンドを使うことができます。$ script と入力すればその瞬間から、全ての出力は (ansi コードを含めて) typescript ファイルに保存されるようになります。

終わったら、exit と入力するだけで typescript が作成されます。作成されたファイルは AURansi2htmlAUR パッケージを使って html に変換できます。

typescript ファイルを typescript.html に変換するには、次を実行:

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

また、コマンドによっては直接 ansi2html にパイプで渡すこともできます:

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

どんなコマンドでも使えるというわけではないので、その場合は、script を使う必要があります。

仮想端末

Uvesafb をインストールして fbgrab または fbdump を使ってスクリーンショットを取得してください。

単にコンソールの文章を取得したいだけで画像は要らない場合、util-linux パッケージに含まれている setterm を使うことができます。以下のコマンドは仮想端末1のテキストをカレントディレクトリの screen.dump ファイルに保存します:

# setterm -dump 1 -file screen.dump

/dev/vcs1 の中身を読まないといけないので root 権限が必要です。