我已经为我的自定义扩展名(.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 的对话框。