XDG Desktop Entryの要件が競合しているように見える2つの要件をどのように処理するのですか?

XDG Desktop Entryの要件が競合しているように見える2つの要件をどのように処理するのですか?

私の理解によるとファイル名部分XDGデスクトップエントリ仕様では、リバース.desktopDNS表記に従ってファイル名を指定する必要があります。

デスクトップエントリの名前は、「リバースDNS」ルールに従う必要があります。つまり、アプリケーションの作成者が制御するリバースDNSドメイン名で始まる必要があります(小文字)。ドメイン名の後にはアプリケーション名が続きます。通常、最初の文字を大文字にした連結語(CamelCase)です。たとえば、example.orgの所有者が「Foo Viewer」を作成した場合は、org.example.FooViewerという名前を選択してorg.example.FooViewer.desktopというファイルを作成できます。

このようにデスクトップファイルに名前を付けてファイルを挿入してXDG_DATA_HOME/applications実行するxdg-desktop-menu forceupdateと、私のアプリケーションはgnome以外のすべての一般的な場所に表示されます。何らかの理由で、私のアプリは、他のファイルマネージャ/デスクトップ環境の「次のプログラムで開く...」に対応する「おすすめアプリ」には表示されません。

デスクトップはに従って有効ですdesktop-file-validate

多くの調査の最後に、xdg-desktop-menu install他のプログラムを使用してファイルを確認するための提案を見つけました。これを行うと、次のエラーが発生します。

xdg-desktop-menu:ファイル名 'org.example.FooViewer.desktop'に正しいベンダープレフィックスがありません。ベンダープレフィックスはアルファベット文字([a-zA-Z])で構成され、ダッシュ(「-」)で終わります。 。サンプルファイルの名前は「example-org.example.FooViewer.desktop」です。 --novendor を使用して上書きするか、追加情報を表示するには、「xdg-desktop-menu --manual」を使用してください。

リバースDNSシンボルを削除してファイル名のみを指定すると、example-FooViewer.desktopgnomeに表示されます。

今私は混乱しました。ルールに従ってファイル名を指定すると、gnomeがクラッシュするのはなぜですか?xdg-desktop-menu仕様に準拠していましたが、ファイル処理が拒否されたのはなぜですか? gnomeが同様の名前の別のデスクトップエントリファイルを中断しない理由 - デスクトップエントリの名前がリバースDNS表記で指定され、ほとんどのベンダプレフィックスまたは単一ダッシュが含まれていない場合でも、すべてのFlatpakはgnomeの次に開くメニューに表示されます!

ここで何が起こっているのでしょうか?独立したサードパーティのパッケージャとして、この競合をどのように処理する必要がありますか?私は何を逃したことがありませんか?

ベストアンサー1

xdg-desktop-menuが仕様に準拠しているにもかかわらず、このファイル処理を拒否するのはなぜですか?

ベンダープレフィックスのxdg-desktop-menuの確認は、OPが引用した仕様で指定された条件を正しく実装していないためです。

私たちが読むことができるように関数コードcheck_vendor_prefix()(行521で始まる)、成功したパススルー条件は、次のテストによってトリガーされます。

case "$file" in
   [a-zA-Z]*-*)

コマンド引数で指定されたファイル名がアルファベット文字で始まる場合は、大文字と小文字が一致します。ダッシュを少なくとも1つ含める必要があります。

そしてそこにはダッシュがありませんorg.example.FooViewer.desktop

したがって、.desktop ファイルをインストールするには、xdg-desktop-menuエラー メッセージに記載されているアドバイスに従ってください。

update-desktop-database をオーバーライドするには --novendor を使用します。


gnomeが同じ名前の別のデスクトップエントリファイルを中断しない理由 - すべてのFlatpaksは、gnomeの[次へ開く]メニューに表示されます。

他のデスクトップ項目については不明ですが、flatpackのインストールにより実行が開始されます。

おすすめ記事