2026年2月12日

Wayland & MangoWC 環境でのスクリーンショットの撮りかた

grim と slurp というツールを使って、MangoWC 上でスクリーンショットを撮る方法を説明します。元ネタは下記のサイトです。

このリンク先の方法は Sway での使用を前提としていますが、それを MangoWC で使えるように改造します。

概要

ここでは次のように設定します。ご覧のとおり Windows を意識しております。

  • PrtSc キーでフルスクリーンを撮る
  • Super(Win) + PrtSc キーでフォーカスウィンドウを撮る ※
  • Super(Win) + Shift + S キーで指定範囲を撮る

※ Alt + PrtSc にすれば Windows に合わせられると思ったんですが、なぜかその組み合わせはスルーされてしまって何事も起きませんでした。

grim と slurp のインストール

Wayland コンポジター上でスクリーンショットを撮るのに grim を使います。また、マウスドラッグで範囲を指定するのに slurp を使います。どちらも packages からインストール可能です。

# pkg install -y grim slurp

grim と slurp の使いかた

まずはコマンドラインから使ってみます。スクリーンショット保存用のディレクトリを作り

% mkdir ~/ss/

フルスクリーンのショットを撮って ~/ss/fullscreen.png に保存。

% grim ~/ss/fullscreen.png

slurp と組み合わせると、Windows の「Win + Shift + S」ばりにマウスドラッグで範囲を指定して撮ることができます。

% grim -g "$(slurp)" ~/ss/slurp.png

「{x},{y} {w}x{h}」という書式により範囲を細かく指定することもできます。

% grim -g "100,0 1024x768" ~/ss/manual.png

フォーカスウィンドウを撮るにはちょっと工夫が必要です。MangoWC のプロセス間通信 (IPC) 機能を使ってフォーカスウィンドウのジオメトリを取得し、それを set コマンドで分割し、必要なところだけ取り出して「{x},{y} {w}x{h}」形式に整形します。

フォーカスウィンドウのジオメトリは mmsg -x コマンドで取得できます。このコマンドの詳細については MangoWC 公式 Wiki の IPC のページを参照してください。

% mmsg -x
eDP-1 x 1068
eDP-1 y 35
eDP-1 width 842
eDP-1 height 515

これを set コマンドと組み合わせると、mmsg-x の出力をスペースで分割してシェル変数 $1, $2, $3, ... に格納することができます。

% set -- $(mmsg -x)
% echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12}
eDP-1 x 1068 eDP-1 y 35 eDP-1 width 842 eDP-1 height 515

というわけで、$3$6$9${12} を使って書式を整えて、さっきと同じように grim -g に渡せば、フォーカスウィンドウのボーダーできっちりスクショすることができます。

% grim -g "$3,$6 ${9}x${12}" ~/ss/focuswindow.png

MangoWC 版 screenshot.sh

以上をふまえて、元ネタ版の screenshot.sh を MangoWC 版の screenshot.sh に改造します。コマンドライン引数として reg をとったら範囲指定、win をとったらフォーカスウィンドウ、all ならフルスクリーンを撮るようにします。

screenshot.sh
#!/bin/sh

mode="$1"

opath=~/ss
[ ! -d $opath ] && mkdir -p $opath

ofile=$opath/grim-$(date +%Y%m%d-%H%M%S).png

case $mode in
    reg*)
        grim -g "$(slurp)" $ofile
        ;;
    win*)
        set -- $(mmsg -x)
        grim -g "$3,$6 ${9}x${12}" $ofile
        ;;
    all)
        grim $ofile
        ;;
    *)
        echo >&2 "usage: screenshot.sh <reg(ion)|win(dow)|all>"
        exit 1
esac

このあとの説明の都合上、このスクリプトを ~/bin/ に置くことにします。そしてこのスクリプトに実行可能属性を付けます。

% chmod +x ~/bin/screenshot.sh

キーバインドの設定

あとは screenshot.sh にキーをバインドするだけです。MangoWC の設定ファイルの適当な位置に次の 5 行を追加します。

~/.config/mango/config.conf
# screenshot
bind=NONE,Print,spawn_shell,~/bin/screenshot.sh all
bind=SUPER,Print,spawn_shell,~/bin/screenshot.sh win
bind=SUPER+SHIFT,s,spawn_shell,~/bin/screenshot.sh reg
layerrule=noanim:1,noblur:1,layer_name:selection

5 行目は 公式 Wiki からの受け売りで意味はよくわかってませんが、画面がきっちり静止した状態で撮影するための設定みたいです。

撮った画像は ~/ss/grim-<日付>-<時刻>.png に保存されます。