如何使用 xdg 注册自定义协议?

如何使用 xdg 注册自定义协议?

今天早上我一直在努力尝试将应用程序与自定义协议关联起来,即emacsclient 和 org-protocol

我从网络浏览器书签小程序调用此协议,并得到以下行为:

在 Chromium 中,
会出现“启动应用程序”对话框,并调用 xdg-open org-protocol://... 最终启动一个新的 Chromium 框架。

在 Firefox 中,
我尝试将 network.protocol-handler.app.org-protocol 设置为空字符串或我的 emacsclient 路径,但我仍然收到以下错误消息:
“Firefox 不知道如何打开此地址,因为该协议(org-protocol)未与任何程序关联”,甚至没有显示任何外部应用程序选择对话框。

我没有使用任何桌面环境,所以我需要严格使用 xdg 来完成这项工作,但是,尽管阅读了共享的 mime 信息规范等,我仍然无法理解有效的配置。

答案1

XDG 方法:创建一个emacsclient.desktop处理 MIME 类型的文件x-scheme-handler/org-protocol

[Desktop Entry]
Name=Emacs Client
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol;

(注意MimeType=上面的行用于org-protocol:URI。)

将文件放入~/.local/share/applications或者/usr/local/share/applications

您可能需要打开该文件~/.local/share/applications/mimeapps.list并添加如下行:

x-scheme-handler/org-protocol=emacsclient.desktop

将其添加到该[Default Applications]部分下。

答案2

@grawity几乎是正确的,但他忽略了两个细节:

  1. 安装文件后.desktop,您可能需要手动运行。(如果您使用sudo update-desktop-database安装文件,则可能会为您完成此操作).desktopxdg-desktop-menu install emacsclient.desktop

    这就是让我的 Firefox 显示“应该由谁来处理这个协议?”对话框而不是仅仅显示错误页面所需要的。

  2. 在提出这个问题的时候,有一个错误导致xdg-open它盲目地将 URL 移交给$BROWSER“通用”(非 KDE、非 GNOME、非 Xfce 等)桌面,从而产生以下行为@朱利安正在经历。

    它应该在 xdg-open 的现代版本中得到修复,但如果您的桌面由于某种原因没有使用现代版本,那么这里是xdg-open 版本我深入研究/usr/local/bin以解决该问题。

答案3

至少在 Fedora 13 和各种基于 Debian 的发行版中xdg-开放打开所有没有文件://如果浏览器无法在受支持的桌面环境中运行,则该浏览器会尝试检测要使用的浏览器,具体方式取决于发行版。

作为xdg-开放只是一个 shell 脚本,您可以轻松地根据自己的需要进行调整。

相关内容