デフォルトのファイルマネージャを設定し、デフォルトのファイルマネージャを使用してファイルを検索する

デフォルトのファイルマネージャを設定し、デフォルトのファイルマネージャを使用してファイルを検索する

私の質問を読む前に重複としてマークしないでください。これらの質問はすでに存在していることを知っていますが、既存の回答が期待どおりに機能しないため、この質問になります。

既存の回答によると、デフォルトのファイルマネージャを設定する方法は、デフォルトのファイルマネージャをxdg-mime default <app name> inode/directory使用してファイルを見つける方法はですdbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"<path>" string:""

ただし、一部のArchベースのディストリビューション(Gnomeを含むArchを含む)でテストしたときに、Nemoファイルマネージャ(GnomeのデフォルトのファイルマネージャはGnome Files)をインストールした後、コマンドが指示されたファイルマネージャとして開かないdbus-sendことがありました。出力xdg-mime query default時に、上記のコマンドはGnome Filesを開き、前者が "org.gnome.Nautilus.desktop"を出力すると、後者はNemoを開きます。 (実行中のファイルマネージャがない場合。ファイルマネージャのインスタンスがすでに存在する場合、コマンドはそのファイルマネージャを使用しているように見えます。)xdg-mime query default inode/directorynemo.desktopdbus-send...dbus-send

dbus-send上記のコマンドは、「デフォルトのファイルマネージャを使用したファイルの検索」の正しいコマンドですか?上記のコマンドは期待どおりに機能しませんが、ファイルを右クリックして[次へdbus-send開く]をクリックしてファイルマネージャの名前をクリックすると、JetBrainのIDE(Android StudioやIntelllJなど)でデフォルトのファイルマネージャを使用します。正しく発見されました。私は彼らのソースコードを研究したいのですが、それは巨大なアプリケーションであり、検索しようとしています。彼らのソースコード結果は返されません(「開く」や「ファイルマネージャ」などのキーワードを使用しました)。

答え1

これら2つの構成は、システムに実際に「基本ファイルマネージャ」という統一された概念がないため、互いに関連しない。xdg-mimeMIMEタイプの接続のみが変更されますが、org.freedesktop.FileManager1プログラムがD-Busを介して通信しようとしたときにアクティブなサービスにはまったく影響しません。

(これは、.htmlファイルとhttp:// URLが他のプログラムとどのように関連付けられるのかと似ています。)

従来の理由により、dbus-daemonは複数の.serviceファイルが同じサービス名を提供すると宣言できるようにします。 (これはサービスが有効になっている場合にのみ重要です。まだ実行中です。実行中のプロセスがすでに名前を主張している場合、アクティベーションは使用されません。 )

最初のステップは、どのD-Bus .serviceファイルが名前を提供するかを見つけることです。

$ grep -rl Name=org.freedesktop.FileManager1 /usr/share/dbus-1/services
/usr/share/dbus-1/services/org.kde.dolphin.FileManager1.service
/usr/share/dbus-1/services/org.xfce.Thunar.FileManager1.service
/usr/share/dbus-1/services/org.freedesktop.FileManager1.service

(ファイル名が提供するサービス名と一致しないことを念頭に置かないでください。)

次に、次の方法で不要なサービスを無視します~/.local/share/dbus-1

$ mkdir -p ~/.local/share/dbus-1/services
$ ln -s /dev/null ~/.local/share/dbus-1/services/org.xfce.Thunar.FileManager1.service
$ ln -s /dev/null ~/.local/share/dbus-1/services/org.kde.dolphin.FileManager1.service

実際に名前が付けられたのはorg.freedesktop.FileManager1.serviceNautilusなので、そのまま残すことができます。

$ cat org.freedesktop.FileManager1.service 
[D-BUS Service]
Name=org.freedesktop.FileManager1
Exec=/usr/bin/nautilus --gapplication-service

動作していることを確認してください。

$ urlencode() {
    echo -n "$1" | perl -pe's/[^\/A-Za-z0-9_.!~,=-]/sprintf"%%%02X",ord$&/gse'
  }
$ uri="file://$(urlencode "$path")"
$ gdbus call -e -d org.freedesktop.FileManager1 \
                -o /org/freedesktop/FileManager1 \
                -m org.freedesktop.FileManager1.ShowItems \
                "['$uri']" \
                "''"

関連情報