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


9

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

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

xdg-open /path/to/directory

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

nautilus /path/to/file.txt

私は考えた私が使用できること

xdg-mime query default inode/directory

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

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

どのように私は、デフォルトのファイルマネージャでディレクトリを開くことができますし、そのディレクトリ内のファイルを選択します(ディレクトリを選択し、あまりにも、素晴らしいことだということができましたが、このアプリケーションのために必要でない場合)、または少なくともので、デフォルトのファイルマネージャを見つけるI直接呼び出すことができますか?

回答:


6

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

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

オウムガイ(1)のmanページ

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

2. xdg-mime戻るThunar.desktopxdg-open開くnautilus

xdg-mime使用mimeapps.listするデフォルトのアプリケーションを決定するために使用します。

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

mimeapps.listは、[デフォルトアプリケーション]セクションに、指定されたMIMEタイプのデフォルトアプリケーションをリストします。複数のデフォルトアプリケーションを優先度の降順で一覧表示できます。例えば ​​:

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

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

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

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

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

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


未回答の問題がある場合や混乱がある場合は、コメントを投稿してください。
アミットシン

1
あなたの優れた回答は最初の場所の質問のように見えました(削除の理由とは何ですか)、それはレビュー担当者を誤解させる可能性があるため、少し編集しました。問題がなければ、遠慮なくロールバックしてください。
peterh-モニカを2017年

@peterh編集ありがとうございます!今後の回答のために覚えておきます。
アミットシン

+1。回答ありがとうございます。最初の部分は完全に動作します。環境変数が設定されていない場合に想定される値を説明するこの仕様とともに2番目の部分は、Thunarが返される理由を説明しています。
jakun

1
ただし、Nautilusがで指定されていないため、なぜ起動したのかはまだわかりませんmimeapps.list。「すべてのファイルが処理された後、デフォルトのアプリケーションがまだ見つからない場合、そのタイプをサポートする最も好ましいアプリケーション(関連付けによる)を選択する」でこれらの関連付けが何であるかを説明できますか?このアルゴリズムを再実装する必要がある自動的に開始されるプログラムを見つける方法を知っていますか?
jakun 2017

0

ファイルは急速に普及しているため、dbusを使用してファイルを開くことを検討してください。

「デフォルト」のファイルマネージャーの概念は、だけに集中している場合にのみ存在しますがxdg-mime、dbusの土地で実際に存在するアプリケーションの大部分では、ストーリーは別のひねりを加えたものであり、「デフォルト」のファイルマネージャーの概念は存在しなくなります。

これは/home/me/path/to/folder/or/file、dbusを使用して(デフォルト?)ファイルマネージャーでファイル()を開く方法です。

dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"file:///home/me/path/to/folder/or/file" string:""

このコマンドが行うことは、org.freedesktop.FileManager1インターフェースを実装するdbusサービスを探し、それを、開くファイルへのパスを指定して呼び出すことです。

デフォルトの後に疑問符を付けた理由は、dbusが「デフォルト」のファイルマネージャーの概念を尊重しないためです。それが行うすべては、インターフェースを実装し、操作を処理させる最初のサービスに呼び出しを送信することです。選択したアプリケーションが「デフォルト」のファイルマネージャーである可能性がありますが、それが常に保証されるとは限りません。

ほとんどの最近のアプリケーションはdbusデフォルトで使用しxdg-mime、dbus呼び出しが失敗した場合にフォールバックするため、これをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.