ラズベリーパイでスクリーンショットが撮れない問題を解決!Wayland対応grim&slurpの使い方

最近、久しぶりにRaspberryPiを使用したら、「あれ?スクリーンショットの画像が真っ暗になるぞ?」と焦りました😭

スクリーンショットが真っ黒になっている

「もしかして、ハードや設定がおかしくなった?」とドキドキします。これは、OSのアップデートで起こった大きな変化、Wayland(ウェイランド)の採用が原因になっていました。

Wayland(ウェイランド)は、LinuxなどのUNIX系OSで、アプリケーションの画面描画や入力処理を司る新しいディスプレイサーバプロトコルです。長年にわたりLinuxのウィンドウシステムとして使われてきたX Window SystemX11)の後継となることを目指して開発されました。

なぜscrotは動かなくなったのか?

X11からWaylandへの移行

これまでのRaspberryPi(OS)で主流だったのはX11という表示システムでした。このX11では、アプリケーションが他のウィンドウの内容を比較的簡単にキャプチャすることができていました。変更されたWaylandX11に比べて以下の特徴があります。

  • モダンで高性能
  • セキュリティが大幅に強化
  • プライバシー保護を重視

変更というよりもモダナイズと言ったほうがいいのかもしれません。

Waylandの新しい「お作法」とは?

Waylandは「スクリーン全体を勝手に撮るなんて、プライバシー的にどうなの?」という考え方を採用しています。そのため、コンポジターWaylandのウィンドウマネージャー)が許可したツールでしか画面情報にアクセスできなくなりました😨

つまり、X11では、ディスプレイサーバ(Xサーバ)ウィンドウマネージャーが別々の役割を担っていましたが、Waylandでは、これらの機能をコンポジタと呼ばれる1つのプログラムに統合しています。

例えるなら、「写真を撮るには、警備員(コンポジター)に許可をもらって専用カメラを使わないといけない」というルールができたようなものです。これが、従来のX11ベースのツールが機能しなくなった理由となります。

grimslurp を組み合わせた新しい方法

新しくなってもちゃんと手段は存在します。Waylandでは、きちんと作法を守ってスクリーンショットを撮るためのツールがあり、それがgrimslurpとなります。

ツールの特徴

インストールと使い方

1. まずはインストール!

ターミナルを開いて、以下のコマンドを実行しましょう。

$ sudo apt update
$ sudo apt install grim slurp

これで準備完了です!

2. 画面全体をキャプチャ(grim単体)

一番シンプルなのがgrim単体での使用です。実行すると、即座に画面全体がファイルとして保存されます。

$ grim ~/Pictures/my_full_screen.png

問題なくスクリーンショットが作成できました

ファイル名を変えれば、連番での保存も簡単にできます。

3. 範囲を指定してキャプチャ(slurp + grim

今までのscrot -sと同じように、マウスで範囲指定して撮りたい場合は、slurpと組み合わせます。

役割分担

  • slurp … どの範囲を撮るか座標を決定
  • grim … その情報を受け取って実際にキャプチャ

これらをパイプ(|)でつなぐのが、Wayland時代のスマートなやり方です!

$ slurp | grim -g - ~/Pictures/partial_capture.png

このコマンドを実行すると…

  1. 画面が少し暗くなる
  2. 十字カーソルが表示される
  3. 撮りたい場所をドラッグして囲む
  4. 自動的にファイルが保存される

キーボードで打ち込む量はあるものの、慣れた操作感になると思います。

指定エリアのスクリーンショットも可能

4. 遅延撮影でメニューも撮れる!(sleep + grim

メニューやドロップダウンを開いた状態でスクリーンショットを撮りたい時は、sleepコマンドと組み合わせて遅延撮影ができます。

$ sleep 5 && grim ~/Pictures/delayed_capture.png

このコマンドを実行すると、5秒後に自動的にスクリーンショットが撮影されます。その間にメニューを開いたり、ツールチップを表示したスクリーンが可能です。

遅延した画面も問題なく作成できます

便利な活用テクニック

ショートカットキーの設定

流石に毎回ターミナルでコマンドを打つのが面倒なので、以下の方法で効率化できます。

シェルのエイリアス設定~/.bashrcに追加)

alias screenshot-full='grim ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png'
alias screenshot-area='slurp | grim -g - ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png'
alias screenshot-delay='sleep 5 && grim ~/Pictures/screenshot_delayed_$(date +%Y%m%d_%H%M%S).png'

設定後はsource ~/.bashrcを行うか、ターミナルを再起動すると使えるようになります。

使用例

  • screenshot-full → 即座に全画面撮影
  • screenshot-area → マウスで範囲選択して撮影
  • screenshot-delay → 5秒待ってから撮影

デスクトップ環境のショートカットキー設定

上記の設定が終わったら、お使いのデスクトップ環境の設定から、上記のAliasを任意のキーに割り当ててください。

クリップボードへの直接コピー

wl-clipboardパッケージと組み合わせることで、ファイル保存せずに直接クリップボードへコピーも可能です。

$ grim - | wl-copy

おわりに

Waylandの採用によって変更がありましたが、grimslurpを使いこなせば、以前同様にスクリーンショットを作成することができますね! 少し苦言をいうよすれば、scrotがデフォルトでインストールされている点でしょうか。使えないならインストールしなくても…

あと、なぜ今まで気が付かなかったのかというと、リモートデスクトップ接続でRaspberryPiを使用しているからでした💦たまには本体で触るのも大切なのかもしれません。