Ubuntu 24.04のFiles(Nautilus)で、Kleopatraを既定アプリにしても.gpgをダブルクリックして復号できない場合があった。
調べると、アプリの起動方法を定義する.desktopファイルに、対応するMIME型とファイル引数の指定がなかった。
この状態なら、ユーザー用の.desktopでMimeType=を補い、Exec=kleopatra --decrypt-verify %Fを指定することで、選択したファイルを復号や署名確認の画面へ渡せる。
以下では不足している設定を確かめてから修正し、復元できるよう変更前の値も保存する。
対象環境と切り分け
元となるブログ記事で、ダブルクリックからの復号と署名確認を確認した環境は次のとおり。
OS: Ubuntu 24.04.4 LTS (Noble Numbat)
ファイルマネージャー: GNOME Files / Nautilus 46系
暗号操作のGUI: Kleopatra(インストール済み)
まず、Kleopatraが端末から見つかり、必要なオプションを使えることを確認する。
command -v kleopatra
kleopatra --help
nautilus --version
dpkg-query -W kleopatra nautilus
command -vが空なら、先にインストール先とPATHを確認する。
--helpでは--decrypt-verifyがあることを確かめる。
このオプションはファイルの復号または署名確認を行う。Kleopatra公式マニュアル
既知のテスト用暗号化ファイルを端末から開くと、関連付けの問題かを切り分けられる。
./document.gpgは手元のパスへ置き換える。
kleopatra --openpgp --decrypt-verify ./document.gpg
端末からも処理できない場合は、Kleopatraの画面でエラーを確認し、対象ファイルや復号に必要な秘密鍵を調べる。
以下は、端末から操作できるのにダブルクリックではファイルを渡せない場合の手順である。
既定アプリと起動コマンドを確認する
ファイルの種類を表すMIME型ごとに、既定のアプリが選ばれる。
一方、.desktopのMimeType=はアプリが扱える型、Exec=はその起動コマンドを定義する。
既定アプリの指定だけでは、起動コマンドのファイル引数は補われない。対応MIME型の仕様
xdg-mime query default application/pgp-encrypted
gio mime application/pgp-encrypted
gio mime application/pgp-signature
grep -E '^(Name|Exec|MimeType|NoDisplay|Hidden)=' \
/usr/share/applications/org.kde.kleopatra.desktop
問題が起きた環境では、既定アプリはorg.kde.kleopatra.desktopなのに、gio mimeの登録アプリ一覧が空だった。
.desktopから得られた設定は次の2行だった。
Exec=kleopatra
Name=Kleopatra
このExec=にはファイルを渡す指定がなく、MimeType=もない。
複数のローカルファイルを個別の引数として渡すには、%Fを指定する。Execの仕様
すでにユーザー用のファイルがある場合は、そちらの設定も確認する。
if [ -f ~/.local/share/applications/org.kde.kleopatra.desktop ]; then
grep -E '^(Name|Exec|MimeType|NoDisplay|Hidden)=' \
~/.local/share/applications/org.kde.kleopatra.desktop
fi
復号用の起動コマンド、ファイル引数、両方のMIME型が設定済みなら、追加作業を省き、後述の「修正後の動作確認」で実ファイルのMIME型を調べる。
ユーザー用の.desktopを修正する
パッケージ管理下の/usr/share/applications/は直接変更せず、同名のファイルを~/.local/share/applications/へ置く。
以下はUbuntuの標準的なユーザーディレクトリを使う手順である。
最初に、変更前の既定アプリとユーザー用ファイルを保存する。
次のバックアップ処理は初回だけ実行する。
設定をやり直すときはバックアップを上書きせず、最後のvimから再開する。
mkdir -p ~/.local/share/nautilus-openpgp-backup
mkdir -p ~/.local/share/applications
xdg-mime query default application/pgp-encrypted \
> ~/.local/share/nautilus-openpgp-backup/pgp-encrypted.default
xdg-mime query default application/pgp-signature \
> ~/.local/share/nautilus-openpgp-backup/pgp-signature.default
if [ -f ~/.local/share/applications/org.kde.kleopatra.desktop ]; then
cp -p ~/.local/share/applications/org.kde.kleopatra.desktop \
~/.local/share/nautilus-openpgp-backup/org.kde.kleopatra.desktop
fi
cp /usr/share/applications/org.kde.kleopatra.desktop \
~/.local/share/applications/org.kde.kleopatra.desktop
vim ~/.local/share/applications/org.kde.kleopatra.desktop
エディターは普段使っているものに置き換えてよい。
[Desktop Entry]内のExec=を変更し、MimeType=を追加する。
次は変更箇所だけの抜粋なので、ファイル全体をこの3行で置き換えない。
[Desktop Entry]
Exec=kleopatra --decrypt-verify %F
MimeType=application/pgp-encrypted;application/pgp-signature;
既存のType=、Name=、Icon=などは残す。
MimeType=がすでにある場合は、その値を保持して不足している型だけを追記する。
対応表を更新し、2つのMIME型にKleopatraを指定する。
update-desktop-databaseがない場合は、sudo apt install desktop-file-utilsで導入する。
update-desktop-database ~/.local/share/applications
xdg-mime default org.kde.kleopatra.desktop application/pgp-encrypted
xdg-mime default org.kde.kleopatra.desktop application/pgp-signature
gio mime application/pgp-encrypted
gio mime application/pgp-signature
nautilus -q
nautilus -qでFilesのウィンドウが閉じるので、Filesを開き直す。
修正後の動作確認
復号に使うテストファイルは、自分の公開鍵を宛先に含め、対応する秘密鍵を利用できる状態にしておく。
-
.gpgをダブルクリックし、Kleopatraの復号画面が開くことを確認する。 - 復号後の内容が元ファイルと一致することを確認する。
- 分離署名を試す場合は、元ファイルと署名ファイルを同じフォルダーへ置き、署名ファイルをダブルクリックする。
- 元ファイルの指定を求められたら署名対象を選び、検証結果を確認する。
署名者を信頼する判断には、署名の検証結果に加え、公開鍵のフィンガープリントが署名者から確認した値と一致するかも確かめる。
まだ開けない場合は、拡張子から推測せず、実ファイルのMIME型を調べる。
xdg-mime query filetype ./document.gpg
gio info -a standard::content-type ./document.gpg
| 確認結果 | 次の操作 |
|---|---|
application/pgp-encrypted |
gio mime application/pgp-encryptedで既定アプリを再確認する |
| 別のMIME型 |
gio mime <表示されたMIME型>でその型の関連付けを確認する |
| Kleopatraは開くが処理に失敗する | 画面のエラー、対象ファイル、秘密鍵、署名の元ファイルを確認する |
| パッケージ更新後に挙動が変わった | ユーザー用と/usr/share/applications/の.desktopを比較する |
.ascには公開鍵や署名も入るため、一律に復号へ関連付けない。
ユーザー用の.desktopはパッケージ更新後も残るため、配布版の変更を必要に応じて取り込む。
設定を戻す
この手順で保存したバックアップを使い、ユーザー用の.desktopを復元する。
もともとユーザー用ファイルがなかった場合は、今回のコピーを削除する。
if [ -f ~/.local/share/nautilus-openpgp-backup/org.kde.kleopatra.desktop ]; then
cp -p ~/.local/share/nautilus-openpgp-backup/org.kde.kleopatra.desktop \
~/.local/share/applications/org.kde.kleopatra.desktop
else
rm -i -- ~/.local/share/applications/org.kde.kleopatra.desktop
fi
update-desktop-database ~/.local/share/applications
for pgp_type in pgp-encrypted pgp-signature; do
previous_app=$(cat "$HOME/.local/share/nautilus-openpgp-backup/$pgp_type.default")
if [ -n "$previous_app" ]; then
xdg-mime default "$previous_app" "application/$pgp_type"
fi
done
nautilus -q
バックアップの.defaultが空だった型は、このループでは復元できない。
~/.config/mimeapps.listなど、設定時に変更されたユーザー用のmimeapps.listを開き、該当する型から今回追加したKleopatraの指定だけを外す。
他の型や同じ行にある別アプリの指定は残す。
右クリックからの暗号化や署名、.ascの内容に応じたメニューの切り替えまで設定する場合は、元のブログ記事「Ubuntu 24.04でKleopatraをNautilusに統合する」にPython拡張のコードと導入手順を掲載している。