macOS で外部ドライブにスクリーンショットを保存できなくなったときの対処方法

スクリーンショット

ある日に突然、macOS でスクリーンショットを保存できなくなったのでその原因と対処方法を調べてみました。


macOS で 3 4 などを使うと画面のスクリーンショットが取れるようになっていますけれど、あるときこれがエラーになってしまうようになりました。

ショートカットキーを押してスクリーンショットを撮ったタイミングで「スクリーンショットを保存できません。」というメッセージが表示されてしまいます。その説明には「目的の書き込み先にファイルを書き込めません。」と出ていることから、ディスク(ボリューム)のアクセス権限が適切に設定できていないことが予想されるものの、エラーが出るようになる頃合いに何かをした心当たりがまったくなくて。

とりあえず良さそうな感じにボリュームのパーミッションを調整してみるものの、このエラーが解消される感じはしませんでした。

保存に失敗する条件

macOS といえば何かと、どのボリュームにデータを保存できるかを制限しがちな印象もあるので、そこから可能性を探ってみると、どうやら外付けドライブのボリュームをマウントしたフォルダーにスクリーンショットを保存するように設定している場合に失敗することがわかりました。内蔵の、とりわけホームディレクトリにスクリーンショットを保存するように設定しなおすと成功します。

とりあえず、これまでもずっと外付けドライブに保存する設定にしてあって、最近になるまでちゃんと保存できていたので、なぜ今に問題が起こったのかまではわからないものの、少なくとも保存先が外部ドライブかどうかに起因している問題の様子は窺えました。

スクリーンショットを保存できるようにする

そうしたアプローチから、スクリーンショットを正常に保存できるようにする方法を探してみたところ、次の2つが見つかりました。

SystemUIServer にフルディスクアクセスの権限を与える方法

まず最初に見つけた解消方法として、SystemUIServer プロセスに「フルディスクアクセス」権限を指定する方法がありました。

ところで、スクリーンショットの保存先を変更するときに、ターミナルアプリからコマンドを入力して行う場合は defaults write com.apple.screencapture location 保存先フォルダーのパス を実行することになりますけれど、このときこれを反映するために killall SystemUIServer をすることになります。

つまりここから、スクリーンショットを取得するときには SystemUIServer アプリが関係していることが窺えるので、それが外部ディスクに保存できなくなっているなら、一般に「フルディスクアクセス」権限をこのアプリに付与することで保存できるようになる可能性は高そうです。


そこで macOS の「設定」から プライバシーとセキュリティー フルディスクアクセス へと辿り、ここに SystemUIServer アプリを登録してみることにしました。この SystemUIServer/System/Library/CoreServices フォルダー内にあります。

このように権限を与えてみると、外部ドライブにあるボリュームをスクリーンショットの保存場所に設定しておいたままでも、正常にスクリーンショットを保存できるようになりました。

フローティングサムネイル表示を有効にする方法

ただ、今回の問題が発生するまで、これまでに1度も SystemUIServer にフルディスクアクセスを許可することなくスクリーンショットを撮れていたのが気になります。

SystemUIServer にフルディスクアクセスを許可したことで何か安全面に支障をきたすことがないかも 気がかりですし、まさかスクリーンショット取得機能が不正なプログラムに置き換えられたりしているのでは — みたいに心配になってウイルスチェックをしてみたりしてもそれは問題なさそう … みたいに調べを進めてみているうちに、そういえば、これまでスクリーンショットを取得したときに画面右下に取得したスクリーンショットのサムネイルが表示されていたのもされなくなっていることに気がつきました。


どこかで設定ができるものかと調べてみると、これについては 5 を押したときに表示されるスクリーンショットの機能の中で、オプションとして「フローティングサムネール」表示の有無を切り替えられるようになっているのがわかりました。

これが OFF になっていたので、ON にしてみたところ、スクリーンショット取得時にそのサムネイルが画面右下に再び表示されるようになって、加えてまさかの、特にフルディスクアクセスの権限を SystemUIServer に与えなくても外部ドライブに対してスクリーンショットを正常に保存できるようになりました。


きっとこれが、本来の状態なのでしょう。フローティングサムネール機能を OFF にした記憶はないので、うっかりミスか何かの拍子に OFF になってしまったのだと思うのですけれど、とにかくこうして再び ON に戻してあげることで、外部ディスクに対しても適切な動作をしてくれるようになりました。

そんな感じで今回は 5 を押して実行できるスクリーンショットアプリからマウス操作でフローティングサムネール機能を ON にしましたけれど、そのほかにもターミナルから次のコマンドを実行することでも ON にできる様子でした。

defaults delete com.apple.screencapture show-thumbnail