我正在尝试配置我的 Linux 环境以obsidian://
使用 Obsidian 应用程序打开 URI(请参阅使用黑曜石 URI)。
这是我正在使用的流程。我在一台干净的 Ubuntu 机器上执行此操作,以确保它能够重现:
该文件与文件一起
Obsidian.AppImage
存储。该文件具有执行权限。~/obsidian
icon.jpg
AppImage
这是我的
~/.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;
我已经跑了
update-desktop-database ~/.local/share/applications/
xdg-open
按预期使用作品:xdg-open "obsidian://new?vault=notes&name=note&content=content"
此命令行将打开包含新注释和内容的 Obsidian 应用程序。
在 Firefox(预装)中,在 URL 栏中输入上述 URI 也会打开包含新注释和内容的 Obsidian 应用程序。
.deb
我通过从 Chrome 官方网站下载文件并运行来安装 Google Chromedpkg -i <.deb file>
在 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 打开“特殊链接”。
重置始终运行选项
如果您之前接受了“始终打开此类型的文件”对话框,那么您将需要重置此设置。您要清除的选项是这样的:
下载后自动打开某些文件类型
要进入此选项:
- 在 chrome 中打开特殊 URL chrome://settings/
- 向下滚动并单击底部的高级链接
- 单击“andvanced”上的 V 形图标以显示更多设置
- 下载下有一个选项,仅当您设置了至少一个文件来运行而不是下载时才存在
- 点击“清除”“下载后自动打开某些文件类型”旁边的按钮
没有选项可以仅重置某些文件类型。您会注意到该按钮随后消失。
检查 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 应用程序可以要求打开文件类型
和
站点可以要求处理协议
参考:
- https://bbs.archlinux.org/viewtopic.php?id=152993
- https://www.ghacks.net/2015/10/29/how-to-open-downloads-in-chrome-automatically/
- https://stackoverflow.com/questions/51986354/how-to-prevent-popping-up-xdg-open-dialogue-from-ubuntu-chrome-while-opening-spe
- https://askubuntu.com/questions/465586/how-to-reset-external-protocol-handler-in-chrome
答案2
对我有用的是sudo update-desktop-database
我也遇到了同样的问题,经过一段时间的搜索后我发现了这个:https://superuser.com/questions/162092/how-can-i-register-a-custom-protocol-with-xdg