Solution for Error while taking the screenshot. capturing active window in Shutter
Linuxの画面キャプチャーソフトであるShutterで,現在画面の画面キャプチャーの取得をショートカットキーに割り当てて実行する際に生じる問題の解決策を記す。
Introduction
Linuxの画面キャプチャーソフトであるShutterには,コマンドラインから実行するためのオプションがある。これを利用して,Alt-PrintScreenキーに現在画面のスクリーンショットを撮るように,以下のコマンドを割り当てた。
shutter --active
しかし,Ubuntu 16.04のshutter 0.93.1でAlt-PrintScreenキーで画面キャプチャーを撮ろうとすると以下のエラーが出てしまった。
Shutter
Error While taking the screenshot.
No window with name pattern 'shutter' detected.
範囲選択(shutter -s
)などではこの問題は発生しない。しかし,現在画面のキャプチャーは利用頻度が高いので,困っていた。
1年ほど前からこの問題が発生していたのが,原因がわからずに放置していた。気が向いたので解決策を調べてみた。
Solution
この問題は「Bug #1418149 “Shutter fails to detect active window” : Bugs : Shutter」で議論されており,「Andreas Wehler – Comment #9 : Bug #1418149 : Bugs : Shutter」の回答で解決した。
結論としては,ショートカットキーの割当コマンドに以下を記入すればよい。
sh -c 'pkill shutter && shutter --active'
Ubuntu 16.04であれば,以下のコマンドでキーボードショートカットの設定画面を開くことができる。
unity-control-center keyboard shortcuts
[Custom Shortcuts]に追加してやればよい。
Discussion
この解決策のポイントは以下2点となる。
- 外部シェルから起動
- 事前にshutterのプロセスを終了
1点目の本質的な理由はよく理解できていない。ただし,2点目のことから逆説的に必要となる。
2点目。これはshutterが起動した状態でさらにshutterで現在画面をキャプチャーしようとすると,shutterの初回起動時の現在画面を取得してしまうためだ。そのため,一度shutterのプロセスを終了させてからコマンドでキャプチャーを取得している。
ショートカットキーに複数のコマンドを割り当てる場合,;
や&&
によりコマンドを1行でつなげる必要がある。しかし,どうやらここで指定する内容は文字列として解釈されてしまうようで,これらの予約語が有効でなかった。そのため,sh
の-c
オプションで文字列を解釈させて対応した。
手順書や備忘録を記入する際に,画面キャプチャーは重要であるため頻繁に取得する。そのため,Shutterで現在画面を短絡キーで取得できなくて今まで手間だった。これで快適に作業できるだろう。