macOS を Catalina にアップグレードしたら、Emacs の dired で ~/Documents の中身を開こうとした時に、
Listing directory failed but `access-file' worked
なるエラーが出て、「書類」フォルダにアクセスできなくなっていました。
この度、この問題を解決する方法が分かったため、共有します。
環境
私の環境は次のとおりです。
- macOS Catalina (Ver. 10.15.2)
- GNU Emacs 26.3 (build 1, x86_64-apple-darwin18.2.0, NS appkit-1671.20 Version 10.14.3 (Build 18D109)) of 2019-09-02
問題解決の手順
- 画面左上のリンゴマークから「システム環境設定」を開く。
- 「セキュリティとプライバシー」を開く。
- 「プライバシー」タブを開く。
- ウィンドウの左半分の一覧から「フルディスクアクセス」を開く。
- ウィンドウの左下にある錠前をクリックして、ログインパスワードを入力する。
- これでウィンドウの右半分の一覧にアクセスできるようになるので、その一覧の下の「+」ボタンをクリックする。
- ファイル選択ダイアログが開くので、内蔵ドライブのルート(「Macintosh HD」など)を開く。
- ここで、⌘+⇧+[.](コマンド+シフト+ピリオド)を押して、隠しファイルも表示させる。
- 「/usr/bin」フォルダを選ぶ。(「usr」フォルダ→「bin」フォルダを選ぶということです。)
- 一番右の一覧から「ruby」を選ぶ。(ファイルがたくさんあるかもしれませんが、落ち着いて。アルファベット順に並んでいます。)
- 「プライバシー」タブに戻った時に一覧に「ruby」が追加されていることを確認する。
- ウィンドウの左下にある錠前をクリックして、再びセキュリティロックを有効にする。環境設定を終了する。
これで Emacs の dired から「書類」フォルダにアクセスできるようになっているはずです。
なぜこの方法で問題が解決するのか
Stack Exchange の記事によると、
Emacs.app actually launches using a ruby script. As a result, MacOS Catalina uses the permissions set for ruby, not the permissions for Emacs.app.
Emacs.app は Ruby のスクリプトを使って起動するため、OS は Ruby のパーミッションに基づいて Emacs のアクセス権を管理している、ということでしょうか?
ですので、Ruby への設定が効いてくる、と。