質問: linuxはどのようにしてデフォルトのアプリケーションを決定しますか? ファイルを開くことができる各プログラムには、/usr/share/applicationsの下にデスクトップエントリがあり、各mimetypeのデフォルトは/usr/share/applications/defaults.listと~/.local/share/applications/mimeapps.listに保存されていることを知っています。私のシステムでは、これらのリストを更新するコマンドはupdate-mime-databaseです。しかし、そのファイルを処理できる複数のアプリケーションがインストールされている場合、このプログラムがどのアプリケーションをデフォルトにするかを決定する方法について、googleで答えを見つけることができませんでした。最近システムにgeanyをインストールしたとき、すべてのソースコードファイルが通常のテキストエディターではなくgeanyで開き始めたので、通常のエディターをgeanyに置き換える選択がどのように行われたのか疑問に思いました。また、各ファイルを手動で通常のエディターに戻すことができることは知っていますが、特定のプログラムで開くことができるすべての種類のファイルにデフォルトを設定する方法はありますか?基本的に、windowsのデフォルトのアプリケーションマネージャーと同様に、プログラムで開くことができるすべてのファイルタイプを確認し、それらすべてを選択または選択解除できます。xdg-mimeユーティリティも知っていますが、ファイルを開くため、または特定のプログラムのすべてのファイルタイプをデフォルトとして再登録するために、複数の可能なプログラムから選択するものではないようです。
回答: まず第一に、linux(オペレーティングシステム)はあなたが説明するものから何も選択しません(したがってタイトルはかなりオフです)、それはあなたがファイルをクリックしているアプリケーションかデスクトップ環境のどちらかに基づいて選択をしますロジックと情報。あなたはupdate-mime-databaseについて言及しましたが、これはグーグルでgnomeにつながり、このページは具体的に次のとおりです。 https://developer.gnome.org/shared-mime-info-spec/ (これは単なるレプリカです: http://standards.freedesktop.org/shared- mime-info-spec/shared-mime-info-spec-latest.html ) mimeデータベースへの貢献を希望する各アプリケーションは、アプリケーションにちなんで名付けられた単一のxmlファイルを3つの/ packages /ディレクトリの1つにインストールします(ユーザーがアプリケーションのインストールを要求した場所によって異なります)。このファイルをインストール、アンインストール、または変更した後、アプリケーションは、freedesktop.org共有データベースによって提供されるupdate-mime-databaseコマンドを実行する必要があります。 update-mime-databaseには、唯一の引数として変更されたpackagesサブディレクトリを含むmimeディレクトリが渡されます。これは、packagesサブディレクトリ内のすべてのxmlファイルをスキャンし、それらの情報を組み合わせて、多数の出力ファイルを作成します。 そして、ここに落とし穴があります: これらのファイルの情報が競合している場合は、リストの下位にあるディレクトリの情報が優先されます。 override.xmlという名前のファイルは、同じパッケージディレクトリ内の他のすべてのファイルよりも優先されます。これは、ユーザーがデータベースを編集して、ユーザーの変更が有効になるようにするツールで使用できます。 つまり、geanyはたまたま「リストの下位」に表示されるため、優先される可能性があります。ここで下がると、それぞれのファイルのアルファベット順から、事前定義されたアプリケーションリスト間の順序まで、何かを意味する可能性があります。このページでは、ファイルの形式についても説明し、データベースを操作するために追加のツール(具体的にはoverride.xml)を使用できる可能性があることにも言及しています。そのようなツールが存在するかどうかについては、別の質問に値するかもしれません。編集:mimeopenの使用に関するこの回答は、選択した特定のファイルマネージャーには当てはまらない場合でも、役立つ場合があります。- https://superuser.com/a/573488/243625