xdg-open 无法通过 ssh 终端会话工作

xdg-open 无法通过 ssh 终端会话工作

我已经为我的自定义扩展名(.vwxy)执行了文件关联,并为其创建了 mime 规范文件和桌面条目文件。

我能够通过 ubuntu 20.04 终端上的 xdg-open <myfile.ext> 启动我的应用程序,但通过 ssh 终端会话执行相同操作却无法启动我的应用程序。

但是我的扩展已为 mime 注册,并且 mime 已为应用程序注册,这可以通过 ssh 终端中以下命令的结果看到。

gio info myFile.vwxy | grep "standard::content-type"

输出 : standard::content-type: application/myMimeType

 gio mime application/myMimeType

输出:

Registered applications:
        MyApp.desktop
Recommended applications:
        MyApp.desktop

我是否遗漏了什么?

答案1

D-Bus 就是这里的原因,它是一个用于应用程序之间通信的系统。

如果您登录到桌面(我假设是 Gnome),则会自动启动用户的 dbus 守护进程。如果您通过 ssh 登录,dbus 变量通常设置为使用桌面会话中已经运行的 D-Bus 会话(一开始我觉得很奇怪...)

要查看其运行情况,只需使用以下命令:您可以使用“watch -n 0.1 ps ux -U harry”查看用户“harry”使用不同用户通过 ssh 执行的进程。您可以在启动桌面会话期间或 ssh 登录期间查看它。

可以采取一种解决方法 - 对我来说,这有点像背叛应用程序,只给它们需要的部分。

这是来自dbus-run-session 手册页

DESCRIPTION
       dbus-run-session is used to start a session bus instance of dbus-daemon from a shell script, and start a specified program in that session. The dbus-daemon will run for as long as the
       program does, after which it will terminate.

       One use is to run a shell with its own dbus-daemon in a text‐mode or SSH session, and have the dbus-daemon terminate automatically on leaving the sub‐shell, like this:

       dbus-run-session -- bash

       or to replace the login shell altogether, by combining dbus-run-session with the exec builtin:

       exec dbus-run-session -- bash
       ...

在远程计算机上获得 shell 后(我假设是 bash),运行以下命令:

 > export XDG_CURRENT_DESKTOP=GNOME
 > dbus-run-session -- bash

然后你就有了一个 shell,例如 xdg-terminal 对我来说很管用。我假设这同样适用于你的用例。

我是如何遇到这个问题的:我在我的 openSuse 机器上也遇到了类似的问题。几个小时后,我阅读了D-Bus 文档尝试过“dbus-monitor”,“dbus 启动gnome-terminal” 阅读 xdg-temrinal 手册页,并像最后比较 XDG 环境 (env| grep XDG | sort),然后使用其中一个变量。

我在使用 gpg 密码对话框时遇到了同样的问题 - 使用 ssh-X 登录时使用文本模式。但启动 DBus 后,打开了一个基于 GUI 的对话框。

相关内容