VSCodeのOpen Containing FolderでThunarを起動する
VSCodeでファイルを右クリックして Open Containing Folder を実行すると、なぜか Gnome Nautilus が立ち上がってしまう現象に遭遇した。
普段のファイルマネージャーには Thunar を使っており、~/.config/mimeapps.list でもちゃんと以下のように設定済みのはずだった。
| |
xdg-mime のクエリでも正しく Thunar が返ってくる。
| |
それなのに Nautilus が起動する。何故?
VSCode (Electron) は D-Bus 経由でファイルマネージャーを呼ぶみたい
調べてみると、VSCode(というか Electron)の showItemInFolder は xdg-mime や mimeapps.list を見ないということが分かった。
代わりに D-Bus の org.freedesktop.FileManager1 インターフェース経由でファイルマネージャーを呼び出している。これは mimeapps.list とは完全に別経路。
そしてシステム標準では以下のサービスファイルが配置されており、こいつが Nautilus を起動する定義になっている。
| |
| |
mimeapps.list 側でいくら Thunar を指定しても、VSCode は D-Bus を叩いて Nautilus を起動してくるという罠だった。
ユーザーローカルにサービスファイルを置いて上書きすることで解決
D-Bus のサービスファイルは、ユーザーローカル(~/.local/share/dbus-1/services/)がシステム(/usr/share/dbus-1/services/)より優先される。
なので同名のサービスファイルを Thunar 起動定義で配置すれば上書き出来る。
| |
| |
これで VSCode の Open Containing Folder でちゃんと Thunar が起動するようになった。
余談
/usr/share/dbus-1/services/ を直接書き換える方法もあるが、パッケージ更新で上書きされて元に戻る可能性があるので、ユーザーローカルに置く方が安全。
同じやり方は、他のアプリ(Discord, Slack 等の Electron 製アプリ全般)でも有効なはず。
ファイルマネージャー周りの「設定したのに効かない」現象は、xdg-mime / D-Bus / GVfs / それぞれのアプリ独自の設定 … と複数のレイヤーが絡んでくるので、一筋縄では行かない事が多くて困る。
EOF