首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置默认文件管理器并使用默认文件管理器定位文件

设置默认文件管理器并使用默认文件管理器定位文件
EN

Unix & Linux用户
提问于 2023-04-27 15:26:54
回答 1查看 57关注 0票数 0

在读我的问题之前,请不要把它标记为重复。我知道这些问题已经存在,但现有的答案并不如预期的那样有效,这就是我提出这一问题的原因。

现有的答案是,设置默认文件管理器的方法是xdg-mime default inode/directory,使用默认文件管理器定位文件的方法是dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"" string:""

但是,当我在一些基于Arch的发行版(包括使用Gnome的Arch)上测试这一点时,dbus-send命令在安装xdg-mime query default文件管理器( Gnome的默认文件管理器是Gnome)之后,并不总是打开D3指示的文件管理器。当xdg-mime query default inode/directory输出nemo.desktop时,上面的dbus-send...命令打开Gnome文件,当前者输出"org.gnome.Nautilus.desktop“时,后者打开Nemo。(此时没有正在运行的文件管理器。如果已经有一个文件管理器的实例,则dbus-send命令似乎使用该文件管理器。)

上面的dbus-send命令是否是“使用默认文件管理器定位文件”的正确命令?虽然上面的dbus-send命令没有像预期的那样工作,但是JetBrain的IDE就像Android或IntellJ一样,当我右键单击一个文件,然后单击"Open“,然后单击文件管理器的名称时,JetBrain的IDE或IntellJ正确地定位了默认的文件管理器。我曾想过查看它们的源代码,但这些都是巨大的应用程序,试图搜索它们的源代码返回的结果(我使用了诸如"open“或”文件管理器“之类的关键字)。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-04-30 14:48:44

这两种配置之间没有任何关系,因为系统实际上没有统一的“默认文件管理器”概念。xdg-mime只更改MIME类型关联,但对程序试图通过D总线与org.freedesktop.FileManager1对话时激活什么服务没有任何影响。

(这有点像.html文件和http:// URL如何与不同的程序相关联。)

由于遗留的原因,dbus-守护进程允许多个.service文件声称它们提供了相同的服务名称。(这仅在激活尚未运行的服务时才重要;如果已经运行的进程已经声明了名称,则不使用激活。)

第一步可能是找出哪个D总线.service文件提供了名称:

代码语言:javascript
复制
$ 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覆盖不需要的服务:

代码语言:javascript
复制
$ 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,所以它可以留下来:

代码语言:javascript
复制
$ cat org.freedesktop.FileManager1.service 
[D-BUS Service]
Name=org.freedesktop.FileManager1
Exec=/usr/bin/nautilus --gapplication-service

核实它是否有效:

代码语言:javascript
复制
$ urlencode() {
    echo -n "$1" | perl -pe's/[^\/A-Za-z0-9_.!~,=-]/sprintf"%%%02X",ordA8/gse'
  }
$ uri="file://$(urlencode "$path")"
$ gdbus call -e -d org.freedesktop.FileManager1 \
                -o /org/freedesktop/FileManager1 \
                -m org.freedesktop.FileManager1.ShowItems \
                "['$uri']" \
                "''"
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/744254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档