我创建了一个应用程序并将其打包/发布为 Flatpak(以及其他)。该应用程序具有用户可以启用的设置,因此当用户登录其系统时该应用程序将自动启动。
此设置作为常规 Linux 应用程序运行良好,但是 Flatpak 打包应用程序似乎需要使用 dbus 方法来设置此设置,而这似乎对我不起作用。
根据 Flatpak 文档,我尝试使用 RequestBackground dbus 方法在登录时自动启动应用程序,但它不起作用 - 即使响应成功,返回报告
background
和 autostart
现在都是 true
。
如果我将普通应用程序作为
commandline
参数(如 gedit
)传递,它会按预期工作,并在我注销/登录时自动启动。然而,传递给它运行像 flatpak run <id>
这样的 Flatpak 的命令,甚至 /usr/bin/flatpak run <id>
似乎不起作用。我的 flatpak 应用程序如何设置为在用户登录系统时自动运行?
使用
dbus-monitor
我可以捕获交互。
method call time=1690393997.911834 sender=:1.74 -> destination=:1.115 serial=2703 path=/org/freedesktop/portal/desktop; interface=org.freedesktop.impl.portal.Background; member=EnableAutostart
string ""
boolean true
array [
string "/usr/bin/flatpak"
string "run"
string "codes.merritt.Nyrna"
]
uint32 0
method return time=1690393997.912268 sender=:1.115 -> destination=:1.74 serial=1674 reply_serial=2703
boolean true
signal time=1690393997.912469 sender=:1.74 -> destination=:1.751 serial=2704 path=/org/freedesktop/portal/desktop/request/1_751/dart1647111112; interface=org.freedesktop.portal.Request; member=Response
uint32 0
array [
dict entry(
string "background"
variant boolean true
)
dict entry(
string "autostart"
variant boolean true
)
]
登录后检查日志以获取有关尝试启动的信息。
journalctl -xe | grep Nyrna
Jul 24 13:38:03 shodan systemd[17012]: Started app-flatpak-codes.merritt.Nyrna-250100.scope.
Jul 24 13:38:03 shodan systemd[17012]: Started app-gnome-codes.merritt.Nyrna-250100.scope - Application launched by gnome-session-binary.
Jul 24 13:38:03 shodan codes.merritt.Nyrna.desktop[250440]: bwrap: execvp /usr/bin/flatpak: No such file or directory
这里的这个错误(
bwrap: execvp /usr/bin/flatpak: No such file or directory
)似乎是相关的,但我不知道如何处理这些信息。
必须从 Flatpak 包中访问门户。测试实现无法通过调试会话完成。
将commandline
参数设置为应用程序的可执行文件名称,门户将自动将
flatpak run
部分添加到命令中。因为它是从 Flatpak 包中运行,所以该环境和门户知道在哪里可以找到应用程序的可执行文件,即使它通常不在
PATH
上。门户将在主机文件系统上为
~/.config/autostart
(或
$XDG_CONFIG_HOME
)中的应用程序创建一个可以检查的桌面文件:
~/.config/autostart/codes.merritt.Nyrna.desktop
[Desktop Entry]
Type=Application
Name=codes.merritt.Nyrna
Exec=flatpak run --command=nyrna codes.merritt.Nyrna
X-Flatpak=codes.merritt.Nyrna