web-dev-qa-db-ja.com

freedesktop .desktopファイルが相対パスを許可しないのはなぜですか?

。desktop files は、Linuxデスクトップ上のアプリケーションに簡単にアクセスするための事実上の標準になり、実行可能ファイルはGUIから簡単に起動できなくなり、多くのランチャーはアプリアイコンを使用せず、で指定されたアイコンのみを使用します.desktopファイル。

なぜ、実行可能ファイルへの相対パスを指定する.desktopファイルを使用することができないように思われ、これを回避する方法があるのでしょうか。

ユーザーに強制的にインストールさせたくないソフトウェアを出荷する場合、これを可能にする唯一の方法は相対パスです。

AppImageは、ユーザーが初めて実行するときに.desktopファイルをインストールすることでこの問題を回避しているようです。これは、柔軟なパスを使用してソフトウェアのアイコンとランチャーを有効にするための賢い方法のようです。相対パスの方がはるかに良い方法です。 Linuxのデスクトップではなぜこのソリューションが不可能なのですか?これが単なる見落としではないようですが、この決定の背後にあるより深い理由を見逃しています。

4
Christian

インラインシェルスクリプトを使用してパスを計算できます。

Exec=sh -e -c "exec \\"\\$(dirname \\"\\$0\\")/some_app\\"" %k

はい、エスケープには2つのレベルが必要です。

2
Timothy Baldwin

Exec fileldの場合、その理由は、どのパスをベースとして使用する必要があるかが明確でないためだと思います。たとえば、*.desktopファイルの場所との相対性を期待していますが、Path値との相対性を期待しています。そして、このあいまいさは間違いを引き起こす可能性があります。さらに、Pathは必須フィールドではないため、Execが相対パスを取得し、Pathが定義されていない場合に、どうなるかがさらに複雑になります。相対パスがまったくサポートされていないことを示し、%PATH%ディレクトリ内の絶対パスとバイナリのみを期待する方が便利です。

独自の方法で扱われるIconフィールドの場合:

ファイルマネージャ、メニューなどに表示するアイコン。名前が絶対パスの場合、指定されたファイルが使用されます。名前が絶対パスでない場合は、アイコンの検索に アイコンテーマの仕様 で説明されているアルゴリズムが使用されます。

ちなみに、それら(standards.freedesktop.org) 発音なし 相対パスのサポートですが、実際には*.desktopファイルでサポートされているようです。

ファイル名の前に./を書き込んだ場合、Pathフォルダー内の実行可能ファイルが実行されます。

[Desktop Entry]
Name=TheApp
Type=Application
Path=/usr/lib/TheApp
Exec=./TheAppExecutable
0
Ovsyanka

状況を理解するには、「何に関連していますか」と自問してください。 .desktopファイルはGUIコンテキスト内で使用するためのものであり、.desktopファイルへの配置を検討する可能性のある相対パスから絶対パスを構築するためのベースパスを想定できません。

相対パスは、特定の場所(絶対パス)に変換でき、参照ポイントが必要な場合にのみ役立ちます。これは、一般的なGUIコンテキストでは想定できません。

0
user1404316