如何将 Flatpak 应用程序设置为自动启动?

Mer*_*itt 5 linux dbus sandbox flatpak

我创建了一个应用程序并将其打包/发布为 Flatpak(以及其他)。该应用程序具有用户可以启用的设置,因此当用户登录其系统时该应用程序将自动启动。

此设置作为常规 Linux 应用程序运行良好,但是 Flatpak 打包应用程序似乎需要使用 dbus 方法来设置此设置,而这似乎对我不起作用。

根据 Flatpak 文档,我尝试使用RequestBackground dbus 方法在登录时自动启动应用程序,但它不起作用 - 即使响应成功,返回报告两者background&autostart现在都是true.

如果我传递一个普通应用程序作为commandline参数,gedit它会按预期工作,并在我注销/登录时自动启动。然而,向它传递命令来运行 Flatpak 之类的命令flatpak run <id>,或者甚至/usr/bin/flatpak run <id>似乎不起作用。我的 flatpak 应用程序如何设置为在用户登录系统时自动运行?


输出

使用dbus-monitorI 可以捕获交互。

方法调用

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
Run Code Online (Sandbox Code Playgroud)

回复

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
      )
   ]
Run Code Online (Sandbox Code Playgroud)

启动日志

登录后检查日志以获取有关尝试启动的信息。

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
Run Code Online (Sandbox Code Playgroud)

这里的这个错误(bwrap: execvp /usr/bin/flatpak: No such file or directory)似乎是相关的,但是我不确定如何处理这些信息。

Mer*_*itt 3

必须从 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
Run Code Online (Sandbox Code Playgroud)