私の質問を読む前に重複としてマークしないでください。これらの質問はすでに存在していることを知っていますが、既存の回答が期待どおりに機能しないため、この質問になります。
既存の回答によると、デフォルトのファイルマネージャを設定する方法は、デフォルトのファイルマネージャを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/directory
nemo.desktop
dbus-send...
dbus-send
dbus-send
上記のコマンドは、「デフォルトのファイルマネージャを使用したファイルの検索」の正しいコマンドですか?上記のコマンドは期待どおりに機能しませんが、ファイルを右クリックして[次へdbus-send
開く]をクリックしてファイルマネージャの名前をクリックすると、JetBrainのIDE(Android StudioやIntelllJなど)でデフォルトのファイルマネージャを使用します。正しく発見されました。私は彼らのソースコードを研究したいのですが、それは巨大なアプリケーションであり、検索しようとしています。彼らのソースコード結果は返されません(「開く」や「ファイルマネージャ」などのキーワードを使用しました)。
答え1
これら2つの構成は、システムに実際に「基本ファイルマネージャ」という統一された概念がないため、互いに関連しない。xdg-mime
MIMEタイプの接続のみが変更されますが、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.service
Nautilusなので、そのまま残すことができます。
$ 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']" \
"''"