在我正在编写的程序中,我想提供打开当前正在处理的文件所在目录的功能,并自动选择该文件(以便用户不需要搜索它)。
我知道我可以使用以下命令在默认文件管理器中打开一个目录
xdg-open /path/to/directory
Run Code Online (Sandbox Code Playgroud)
我知道我可以在 nautilus 中打开一个目录并使用
nautilus /path/to/file.txt
Run Code Online (Sandbox Code Playgroud)
我以为我可以用
xdg-mime query default inode/directory
Run Code Online (Sandbox Code Playgroud)
获取默认文件管理器 - 如果它是 nautilus - 如上所示调用它。但是,尽管 nautilus 是我系统上的默认设置(xdg-open打开 nautilus 和 gnome shell 中的位置菜单),xdg-mime返回Thunar.desktop. (我试过了find / -name Thunar.desktop -mount 2>/dev/null但没有找到任何东西。)
另外,我不知道如何打开一个目录,然后选择一个子目录中的鹦鹉螺(与上面提到的方法,将打开子目录)。
我怎样才能打开默认的文件管理器的目录,并选择在该目录中的文件(如果选择一个目录,也很可能将是巨大的,但是对于这种应用并不需要),或至少找出默认的文件管理器,这样我可以直接调用吗?
正如许多人所知,目前的解决方案defaults.conf和mimetypes.cache不起作用。
Firefox 目前使用 D-bus 来激活服务org.freedesktop.FileManager1来处理“打开包含文件夹”操作等。
如果安装了许多服务文件(例如 nemo 和 dolphin)并且没有运行守护程序(dolphin --daemon或/usr/bin/nemo --no-default-window),则没有干净的方法来选择首选文件管理器。
在我的系统上看起来像选择的第一个服务文件按字母顺序排序。因此,在 KDE 系统上 Firefox 通过 Nemo 处理文件夹。
我目前至少看到两种解决方案,两者似乎都是黑客:
制作一个符号链接:
ln -s /usr/share/dbus-1/services/org.kde.dolphin.FileManager1.service /usr/share/dbus-1/services/00_preferred_org.freedesktop.FileManager1.service
Run Code Online (Sandbox Code Playgroud)
(不要忘记终止当前正在运行的文件管理器守护进程或重新登录会话)
早期预运行需要org.freedesktop.FileManager1处理程序。就像dolphin --daemon在~/.profile适当的条件下一样。
还有更干净的方法吗?
PS尝试在没有Firefox的情况下执行文件管理器:
dbus-send --session \
--print-reply \
--dest=org.freedesktop.FileManager1 \
/org/freedesktop/FileManager1 \
org.freedesktop.FileManager1.ShowFolders \
array:string:"file:/" string:""
Run Code Online (Sandbox Code Playgroud)