web-dev-qa-db-ja.com

デフォルトのファイルマネージャでディレクトリを開き、ファイルを選択します

私が書いているプログラムで、現在処理しているファイルがあるディレクトリを開き、そのファイルを自動的に選択する機能を提供したいと考えています(ユーザーがファイルを検索する必要がないようにします)。

私はデフォルトのファイルマネージャでディレクトリを開くことができることを知っています

xdg-open /path/to/directory

Nautilusでディレクトリを開いて、ファイルを選択できることを知っています

nautilus /path/to/file.txt

I thought使用できる

xdg-mime query default inode/directory

デフォルトのファイルマネージャを取得し、それがnautilusの場合は、上記のように呼び出します。しかし、nautilusが私のシステムのデフォルトであるという事実にもかかわらず(xdg-open nautilusを開き、gnomeシェルの場所メニューも開きます)、xdg-mime 戻り値 Thunar.desktop。 (私が試してみました find / -name Thunar.desktop -mount 2>/dev/nullが見つかりませんでした。)

また、私はディレクトリを開いて、nautilusでサブディレクトリを選択する方法を知りません(上記のアプローチでは、サブディレクトリを開きます)。

デフォルトのファイルマネージャでディレクトリを開くにはどうすればよいですかおよびそのディレクトリでファイルを選択します(ディレクトリを選択することも可能だったとしても、このアプリケーションでは不要です)または少なくとも見つける私はそれを直接呼び出すことができるようにデフォルトのファイルマネージャーを出しますか?

9
jakun

1。ディレクトリを開き、nautilusでサブディレクトリ/ファイルを選択するには:

nautilus --select path/to/file/or/directory

nautilus(1)man page から:

-s、-select
指定されたURIを親フォルダーで選択します。

2。xdg-mimeThunar.desktopを返しますが、xdg-opennautilusを開きます

xdg-mimemimeapps.listを使用して、使用するデフォルトのアプリケーションを決定します。

ユーザー固有、システム固有、およびディストリビューション固有の要件を処理するために、個別のmimeapps.listファイルが存在します。それらの検索順序は here で見つかります。

mimeapps.listは、[デフォルトアプリケーション]セクションに、指定されたMIMEタイプのデフォルトアプリケーションをリストします。複数のデフォルトアプリケーションを優先順位の高い順にリストすることができます。例えば ​​:

[Default Applications]
mimetype1 = default1.desktop;default2.desktop;

ここで、mimetype1はMIMEタイプであり、*。desktopはデスクトップファイルです。

xdg-openは、有効なデスクトップファイルが見つかるまで、設定リスト全体で、検索順序に従ってデスクトップファイルを検索します。すべてのファイルにわたってそのようなファイルが見つからない場合は、関連付けに応じて最も優先されるファイルが選択され、デフォルトのアプリケーションとして使用されます。

したがって、この例の場合、default1.desktopがシステムに存在しないと仮定すると、xdg-opendefault2.desktopを使用してファイルを開こうとします。ただし、xdg-mimeは、default1.desktopファイルの最初のエントリであるmimeapps.listを返します。

あなたの場合、default1.desktopThunar.desktopでなければならないため、出力になります。ただし、システムにインストールされていません。したがって、xdg-openは、システムに存在するnautilusを使用してファイル/ディレクトリを開きます。これを確認するには、mimeapps.listファイルでinode/directoryを含む行を確認します。 Ubuntu 17.10の場合、mimeapps.listファイルの場所は/usr/share/applications/defaults.listです。

注:「デフォルトのアプリケーション」を決定するための完全なアルゴリズムは、 here にあります。

6
Amit Singh