自定义 URI 处理:xdg-open 和 Firefox 可以工作,但 Chrome 不行

自定义 URI 处理:xdg-open 和 Firefox 可以工作,但 Chrome 不行

我正在尝试配置我的 Linux 环境以obsidian://使用 Obsidian 应用程序打开 URI(请参阅使用黑曜石 URI)。

这是我正在使用的流程。我在一台干净的 Ubuntu 机器上执行此操作,以确保它能够重现:

  1. 该文件与文件一起Obsidian.AppImage存储。该文件具有执行权限。~/obsidianicon.jpgAppImage

  2. 这是我的~/.local/share/applications/obsidian.desktop文件内容:

    [Desktop Entry]
    Name=Obsidian
    Exec=/home/rachum/obsidian/Obsidian.AppImage %u
    Terminal=false
    Type=Application
    Icon=/home/rachum/obsidian/icon.png  
    StartupWMClass=obsidian
    X-AppImage-Version=0.8.15
    Comment=Obsidian
    Categories=Office;
    MimeType=text/html;x-scheme-handler/obsidian;
    
  3. 我已经跑了update-desktop-database ~/.local/share/applications/

  4. xdg-open按预期使用作品:

    xdg-open "obsidian://new?vault=notes&name=note&content=content"
    

    此命令行将打开包含新注释和内容的 Obsidian 应用程序。

  5. 在 Firefox(预装)中,在 URL 栏中输入上述 URI 也会打开包含新注释和内容的 Obsidian 应用程序。

  6. .deb我通过从 Chrome 官方网站下载文件并运行来安装 Google Chromedpkg -i <.deb file>

  7. 在 Chrome 中输入上述 URI 只会将我重定向到 Google 搜索“obsidian://new?vault=notes&name=note&content=content”。

为什么 Chrome 不尊重 XDG 配置?


更新#1:添加更多详细信息来回答评论。

我的~/.local/share/applications/mimeapps.list文件如下所示:

[Default Applications]
x-scheme-handler/obsidian=obsidian.desktop

我的~/.local/share/applications/mimeinfo.cache文件如下所示:

[MIME Cache]
text/html=obsidian.desktop;
x-scheme-handler/obsidian=obsidian.desktop;

答案1

为什么 Chrome 不尊重 XDG 配置?

您的评估不正确,Chrome 确实使用了 xdg-open。下面的截图展示了 google-chrome 和 chromium 都会提示使用 xdg-open 打开“特殊链接”。

提示 xdg-open

重置始终运行选项

如果您之前接受了“始终打开此类型的文件”对话框,那么您将需要重置此设置。您要清除的选项是这样的:

下载后自动打开某些文件类型

要进入此选项:

  1. 在 chrome 中打开特殊 URL chrome://settings/
  2. 向下滚动并单击底部的高级链接
  3. 单击“andvanced”上的 V 形图标以显示更多设置
  4. 下载下有一个选项,仅当您设置了至少一个文件来运行而不是下载时才存在
  5. 点击“清除”“下载后自动打开某些文件类型”旁边的按钮

没有选项可以仅重置某些文件类型。您会注意到该按钮随后消失。

高级设置: 高级设置

清除始终运行设置: 清除设置


检查 URL 是否未被阻止。

适用于在 Chrome 浏览器上登录托管帐户的 Linux 用户。使用您首选的 JSON 文件编辑器:

转到您的 /etc/opt/chrome/policies/driven 文件夹。创建或更新 JSON 文件并根据需要输入 URL:在 URLBlocklist 中,添加要阻止的 URL。在 URLAllowlist 中,添加您希望用户访问的 URL。

您可以使用以下命令验证当前加载的策略:chrome://policy/

来源:


重置 chrome 协议处理程序

$ grep -r ~/.config/google-chrome/ -e protocol_handler -l

如果您使用默认配置文件,则这是要编辑的文件:

  • $HOME/.config/google-chrome/Default/Preferences

如果您使用多个配置文件,则首选项文件将位于 google-chrome/Profile 2、google-chrome/Profile 3 等中。

根据需要清除特定协议的设置,在本例中为 obsidian://。

$ jq <  /home/jaroslav/.config/google-chrome/Default/Preferences  \
    | grep protocol_handler -C 2

  "custom_handlers": {
    "enabled": true,
    "ignored_protocol_handlers": [
      {
        "last_modified": "13276367110202441",
--
      }
    ],
    "registered_protocol_handlers": []
  },
  "custom_links": {
--
        },
        "ppapi_broker": {},
        "protocol_handler": {},
        "safe_browsing_url_check_data": {},
        "sensors": {},

在最新版本的 Chrome 上,您可以通过 Web-ui 进行控制。只要打开这个特殊的网址

  • chrome://settings/content/fileHandlers
  • chrome://设置/处理程序

你想选择这个:

Web 应用程序可以要求打开文件类型

站点可以要求处理协议


参考:

答案2

对我有用的是sudo update-desktop-database我也遇到了同样的问题,经过一段时间的搜索后我发现了这个:https://superuser.com/questions/162092/how-can-i-register-a-custom-protocol-with-xdg

相关内容