为什么 xdg-open 会在命令行上阻止?

Why does xdg-open block on command-line?

提问人:Gang Liang 提问时间:10/21/2023 更新时间:10/24/2023 访问量:82

问:

我的系统是Debian 12。我尝试用于打开图像文件,但在打开图像文件时它被阻止。在返回之前,必须关闭图像查看器。xdg-openxdg-open

虽然许多人表示,在他们的环境中会立即返回。我想知道这是配置问题还是分发问题。如果可能,是否有任何选项可以让 xdg-open 分离并立即返回。我搜索了文档,但没有找到任何东西。xdg-openxdg-open

Linux 终端 Debian

评论

0赞 Philippe 10/21/2023
我在 Ubuntu 中使用 xdg-open 而没有阻塞,所以我认为这是配置问题。由于它是一个 shell 脚本,您可以通过它进行调试,以了解它阻塞的原因。sh -x /usr/bin/xdg-open imagefile
0赞 Gang Liang 10/21/2023
@Philippe调试脚本是个好主意。在我的 Debian 系统上,对于 png 文件,xdg-open 登陆了 imagemagick 包的一部分。显示脚本的调用将阻塞。删除 imagemagick 后,png 文件将登陆 ,但同样,它会阻塞。你的输出怎么样?display-im6.q16feh
1赞 Philippe 10/21/2023
我刚刚在 Debian 上测试过,我明白了.当我跑步时,我得到了.我看不见或在脚本中。+ DE=gnome3xdg-open --versionxdg-open 1.1.3display-im6.q16fehxdg-open
0赞 Gang Liang 10/21/2023
谢谢!我的 xdg-open 版本和你的一样。两者都是外部包:它们注册自己以便能够处理 png 文件。现在我倾向于认为问题出在 X 环境上:我没有安装任何 X 环境,所以 xdg-open 使用通用路径来执行打开请求。displayfeh
0赞 Gang Liang 10/21/2023
@Philippe我使用 GUI,但只是没有安装 Gnome 或 KDE 等 X-Env 软件包,因此 xdg-open 在处理过程中将落入 X-Generic 路径。 立即返回 在您的案例中是因为它调用:gio detaches 并立即返回。在 X-Generic 中,xdg-open 直接调用程序,并阻止程序。xdg-opengio

答:

-1赞 Faxziz 10/21/2023 #1

尝试安装/重新安装软件包:xdg-utils

sudo apt install --reinstall xdg-utils

如果这个不起作用,请尝试:

sudo apt-get install --reinstall xdg-utils

如果这不起作用,请尝试更新您的软件包:

sudo apt update
sudo apt upgrade
1赞 umläute 10/24/2023 #2

xdg-open只是一个包装器,用于使用可以处理它的应用程序打开文件。

因此,它不能保证它是否会立即阻止或返回:这取决于委托的应用程序(因此,如果最终调用,那么它正在阻止(或不阻止)。xdg-opendisplay-im6.q16display-im6.q16

当然,事情要复杂一些。 例如,如果我运行,那么我也会得到,但没有阻塞。为什么?因为我安装了 ,所以不直接调用,而是调用(无论出于何种原因)不会阻塞。xdg-open file.jpgdisplay-im6.q16exo-utilsxdg-opendisplay-im6.q16exo-open

现在,我还没有找到任何保证不会阻止的文档。 如果您想立即返回,只需将其置于后台:exo-openxdg-open

xdg-open myfile &

如果您不想记住必须这样做,您还可以创建一个可执行文件,该文件(取决于您的)应优先于已安装的系统:/usr/local/bin/xdg-openPATH/usr/bin/xdg-open

#!/bin/sh
/usr/bin/xdg-open "$@" &

或者安装一些轻量级(至少我认为它是轻量级的)中间件,比如exo-utils

评论

0赞 Gang Liang 10/25/2023
非常感谢您的提醒:这是一个不错的轻量级程序启动器。由于它是 XFCE 框架的一部分,因此需要定义 as 才能欺骗 xdg-open 使用它。exo-utilsexo-utilsXDG_CURRENT_DESKTOPXFCE