linux/systemd: add an app- prefix to the systemd unit

The XDG Freedesktop Portal has a _major_ undocumented requirement for
programs that are launched/controlled by `systemd` to interact with the
Portal. The unit _must_ be named `app-<appid>.service`. The Portal uses
the systemd unit name figure out what the program's application ID is
and it will only look at unit names that begin with `app-`. I can find
no place that this is documented other than by inspecting the code or the
issue and PR that introduced this feature. See the following code:

7d4d48cf07/src/xdp-utils.c (L152-L220)

This may fix many people's issues with getting global shortcuts
to work.

Note that this is a breaking change if you have been using Ghostty
compiled from source since #7433 was merged. You will need to ensure
that any Ghosty systemd unit files _not_ prefixed with `app-` are
deleted.

Original discussion/PR in the XDG Desktop Portal repository:

https://github.com/flatpak/xdg-desktop-portal/issues/579
https://github.com/flatpak/xdg-desktop-portal/pull/719

Originally discussed on Discord:

https://discord.com/channels/1005603569187160125/1394845362186879026

Co-authored-by: ambareeshbalaji@gmail.com
This commit is contained in:
Jeffrey C. Ollie
2025-07-16 09:33:02 -05:00
parent f44c24ef88
commit 2435cee11b
2 changed files with 2 additions and 2 deletions

View File

@ -1,4 +1,4 @@
[D-BUS Service]
Name=@APPID@
SystemdService=@APPID@.service
SystemdService=app-@APPID@.service
Exec=@GHOSTTY@ --launched-from=dbus

View File

@ -293,7 +293,7 @@ fn addLinuxAppResources(
if (!cfg.flatpak) try ts.append(.{
b.path("dist/linux/systemd.service.in"),
b.fmt(
"{s}/systemd/user/{s}.service",
"{s}/systemd/user/app-{s}.service",
.{
if (b.graph.system_package_mode) "lib" else "share",
app_id,