メニュー項目が見つからないという問題と設定が消える問題は、同じ反射で直されがちですが、無関係な問題です。一方はデスクトップ統合、もう一方はアプリケーションの状態であり、新しいアイコンはどちらも単独では変えません。両者を切り分けるには実験が一つあれば足り、この話題に持ち込まれる混乱の大半を説明できます。ランチャーはプログラムを起動し、何を覚えておくかはプログラムが決めます。

一つのように見える二つの仕事

デスクトップ統合とは、環境が実行ファイルを見つけ、名前とアイコンを示し、正しい引数を渡せることです。アプリケーションの状態とは、プログラムがプロファイルを永続的な場所に書き、次回の起動時に読み直すことです。どちらも他方を含意しないため、機能するショートカットがすべて忘れたクライアントを起動することもあります。

アプリケーション自身の設定画面で無害な表示設定を一つ変え、同じ方法で閉じて開き直してください。設定が戻れば永続化は機能しており、残る不満はデータの保存ではなくウィンドウの見つけ方です。消えたままならショートカットは気を散らすものであり、本当の問いはそのプロセスがファイルをどこに置くかです。一度に一つの設定だけを試してください、パスワードを再要求するクライアントは、設定を失っているのではなく秘密を守っているのかもしれません。

再インストールの前に起動の入力を比べる

デスクトップエントリから始めて、実際に何をしているかを読み取ってください、メニューからの起動は端末からの起動と同じプロセス環境になるとは限りません。重要なのは Exec、Path、そして間接的にセッションが与える環境です。Exec 内のラッパースクリプトは、変数を設定したり、ディレクトリを変えたり、メニューには決して現れない特権ヘルパーを呼び出したりできます。再インストールはアプリケーションがすでに持っていたファイルを置き換えるだけで、変化した変数であることはまれです。

grep -h '^Exec=' ~/.local/share/applications/*.desktop
desktop-file-validate ~/.local/share/applications/client.desktop

~/.local/share/applications 配下のファイルを /usr/share/applications 配下のものより先に見てください、ユーザー側のコピーはシステム側のコピーを覆い隠すからです。エントリの挙動がおかしいときは desktop-file-validate を実行し、削除済みのパスを指したままの古いコピーを探してください。無効なユーザーコピーでも多くのデスクトップはそちらを優先するため、壊れたファイルがメニューからエントリを消し、パッケージ側のファイルは有効なまま残ることがあります。そのうえで同じコマンドを手で実行し、二つの起動が何を生むかを比べてください。

設定が実際に住む場所

XDG の基本ディレクトリ規則に従うアプリケーションは、設定を $XDG_CONFIG_HOME に、永続的な状態を $XDG_STATE_HOME に、使い捨てのデータを $XDG_CACHE_HOME に置き、これらの変数が未設定なら既定で ~/.config、~/.local/state、~/.cache を使います。この三つは役割であって約束ではないため、特定の VPN 製品がまったく別のことを記述していることもあります。ディレクトリ名からパスを推測するより、ベンダー自身のドキュメントを読むほうが確実です。ドキュメントが薄いときは、ファイルシステムではなくプロセスを観察してください。

ファイルのオープンに絞り込んだトレースは、クライアントが試すすべての設定パスを、終了時に書き込むパスも含めて示します。同じユーザーと同じ環境で実行し、そのパスを想定していたディレクトリと比べてください。

strace -f -e trace=openat,stat -o /tmp/vpn.log vpn-client

秘密とプロファイルの持ち主は別

保存されたプロファイルと保存された資格情報は別々の対象で、多くの場合に別々の保管場所を持ちます。一方が設定ファイルに住み、もう一方がセッションごとに解錠されるキーリングに座っていることがあり、パスワードを再要求するクライアントは設計どおりに動いているだけかもしれません。要求を止めるためにプロファイルを削除するのが、動作する設定を失う道です。

特権付きの起動はさらに複雑です、sudo や PolicyKit ヘルパー経由の起動は別のホームディレクトリ、したがって別の設定群を提示することがあります。ホームディレクトリ全体を再帰的にではなく、アプリケーションが記述している特定のファイルで所有権を直し、今後どの識別子がプロファイルを所有すべきかを決めて、以後の起動をそれに揃えてください。

アイコンが伝えられることと伝えられないこと

アイコンが証明するのはランチャーファイルが解決することだけで、それ以上ではありません。接続状態はクライアントに属するため、信頼できる確認はインターフェース、ルート、またはクライアント自身の状態出力だけです。起動に失敗したトレイアプレットは動作中のトンネルを壊れて見せ、古いアプレットは壊れたものを正常に見せることがあります。接続とランチャーを別々に試し、どちらを実際に直したのかを書き留めてください。

両方が壊れていたなら、修理を一つの変更として扱う誘惑に抗ってください。エントリを直し、起動を確認し、次にトンネルを確認し、各段階の結果を記録します。その記録こそが、次に失われた設定が報告されたときに、今回の繰り返しではなく診断可能なものにし、問題のどちらの半分が本物だったかを次の人に伝えます。

関連記事