AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 744254
Accepted
Damn Vegetables
Damn Vegetables
Asked: 2023-04-27 23:26:54 +0800 CST2023-04-27 23:26:54 +0800 CST 2023-04-27 23:26:54 +0800 CST

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

  • 772

在阅读我的问题之前,请不要将其标记为重复。我知道已经有这些问题了,但是现有的答案没有按预期工作,这就是我问这个问题的原因。

已有答案说设置默认文件管理器的方法是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 的发行版(包括 Arch with Gnome)上对此进行测试时,在安装 Nemo 文件管理器(Gnome 的默认文件管理器是 Gnome Files)之后,该dbus-send命令并不总是打开指示的文件管理器。xdg-mime query default在xdg-mime query default inode/directory输出的同时nemo.desktop,dbus-send...上面的命令打开了 Gnome Files,当前者输出“org.gnome.Nautilus.desktop”时,后者打开了 Nemo。(这是没有正在运行的文件管理器的情况。如果已经有文件管理器的实例,dbus-send命令似乎使用该文件管理器。)

dbus-send上面的命令是“使用默认文件管理器定位文件”的正确命令吗?虽然dbus-send上述命令没有按预期工作,但 JetBrain 的 IDE(如 Android Studio 或 IntellJ)使用默认文件管理器正确定位了文件,当我右键单击一个文件,然后单击“打开方式”,然后单击文件管理器的名称时。我想查看他们的源代码,但这些都是巨大的应用程序,尝试搜索他们的源代码没有返回任何结果(我使用了“打开方式”或“文件管理器”等关键字)。

d-bus
  • 1 1 个回答
  • 22 Views

1 个回答

  • Voted
  1. Best Answer
    user1686
    2023-04-30T22:48:44+08:002023-04-30T22:48:44+08:00

    这两个配置彼此无关,因为系统并没有真正统一的“默认文件管理器”概念。仅更改 MIME 类型关联,但对程序尝试通过 D-Busxdg-mime通信时激活的服务绝对没有影响。org.freedesktop.FileManager1

    (这有点像 .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']" \
                    "''"
    
    • 0

相关问题

  • 观看 sd-bus 属性

  • Plasma-browser-integration 因 `export QT_QPA_PLATFORMTHEME="qt5ct"` 而中断

  • 使用 dbus 获取当前播放的媒体播放器的名称

  • 专用 Centos 7.2/Plesk 12.5 服务器大多数服务在启动时失败。dbus 故障 - 循环太快。稍微限制执行

  • 没有 x 会话的 gnome-keyring 用法

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve