linux 系统打开虎牙直播等网页出现 xdg-open 弹窗解决办法

01. xdg-open 是什么?

xdg-openXDG Utilities 提供的一个命令,它用于 打开 URL 或文件,并调用系统默认的应用来处理。例如:

  • xdg-open https://www.google.com 会调用默认浏览器打开网页。
  • xdg-open file.pdf 会调用默认的 PDF 阅读器。
  • xdg-open mailto:someone@example.com 会调用默认的邮件客户端。

当 Chrome 访问虎牙直播时,虎牙的网页可能会尝试使用 xdg-open 来打开某些自定义协议(如 kiwi://),但 Linux 上 没有注册 kiwi:// 的处理程序,所以 xdg-open 无法正确处理,最终导致错误弹窗。

02. kiwi:// 是什么?

kiwi:// 可能是虎牙直播用来处理 Web 事件的一个 自定义协议,可能用于:

  • 直播插件或扩展的内部通信(比如检测网页状态)。
  • 调用某个本地应用(如虎牙 PC 客户端)。
  • 触发特定的浏览器事件(如 domcontentloaded )。

Windows 或 macOS,虎牙可能有相应的软件可以处理 kiwi:// 协议,但在 Linux,这个协议没有被正确注册,所以 xdg-open 直接报错。

03. Chrome 为什么调用 xdg-open

Chrome 会调用 xdg-open 处理某些协议(如 mailto:webcal:),以及一些网站定义的自定义协议。虎牙直播的 JavaScript 可能包含类似的代码:

1
window.location.href = "kiwi://domcontentloaded";

或者:

1
window.open("kiwi://domcontentloaded");

这会导致 Chrome 触发 xdg-open kiwi://domcontentloaded,然后 xdg-open 由于找不到处理程序而报错。

问题在于

  1. Chrome 不检查 kiwi:// 是否有处理程序,直接调用 xdg-open
  2. xdg-open 发现 kiwi:// 不是标准 URL,也 没有找到相应的应用,就会报错。

04. 强行解决问题

sudo vim /usr/bin/xdg-openxdg-open 文件的最前面添加:

1
2
3
if [[ "$1" =~ ^kiwi:// ]]; then
exit 0
fi

这样它在执行任何逻辑之前就会检查 kiwi:// 相关的 URL,从而告诉 xdg-open

  • 如果 URL 以 kiwi:// 开头,直接退出,不执行任何操作。
  • 这样,Chrome 即使调用 xdg-open kiwi://domcontentloaded,也不会触发弹窗。

最终,xdg-open 不会继续执行 默认的 URL 解析逻辑,错误弹窗也不会出现。

/usr/bin/xdg-open 里添加拦截规则,可以避免不必要的错误。

这个方法适用于 任何未知的、导致错误的协议,比如:

1
2
3
>if [[ "$1" =~ ^(kiwi|huya|wegame):// ]]; then
exit 0
>fi

05. 温和的解决方案

在 Linux 上注册 kiwi:// 处理程序(静默处理请求) 可以手动创建一个假的 kiwi:// 处理器:

1
2
3
4
5
6
echo "[Desktop Entry]
Name=Ignore Kiwi
Exec=/bin/true
Type=Application
NoDisplay=true
MimeType=x-scheme-handler/kiwi;" > ~/.local/share/applications/ignore-kiwi.desktop

然后注册它:

1
xdg-mime default ignore-kiwi.desktop x-scheme-handler/kiwi

这样 xdg-open kiwi://xxx 就不会弹窗了。


linux 系统打开虎牙直播等网页出现 xdg-open 弹窗解决办法
https://wxwdaydayup.top/linux 系统打开虎牙直播等网页出现 xdg-open 弹窗解决办法/
作者
Nail Clipper
发布于
2025年3月21日
许可协议