Not a @store reviewer, the following is merely my own opinion on this matter.
First of all, you should use the request template in About the classic-confinement category for applying classic-confinement.
This shouldn’t matter as long as the binary isn’t executed by the app itself but by the systemd user service manager.
As per Process for reviewing classic confinement snaps , accessing software only available on host is an unsupported category of granting classic-confinement on the Snap Store:
Unsupported
- dependent software only available on host (ship in instead snap (eg, stage-packages, build from source))
You’ll need to ship the said binaries within the snap, and do whatever compile-time/runtime configuration required to make it work in the snap runtime like accessing a certain D-Bus interface or Unix Domain Socket that is made available by one of the snapd confinement interfaces.
In this case, the following criteria for granting classic-confinement might apply:
Criteria
This lists some criteria that might require classic (non-exhaustive):
- access to resources not yet supported by snapd and where the requirement is clearly understood to be supportable by snapd. This may result in temporarily granting classic until snapd supports the use case in strict mode
NOTE: while something may be known to require classic, that alone may not justify granting classic confinement.
However, it is a stop-gap solution that requires explicit approval from the snapd @architects after the use case is fully understood and is not an easy process.
You might also be able to make the snap work without applying classic-confinement if you can implement the missing snapd confinement interface(s) that allows the app to function in strict confinement and contribute it to the snapd project, see https://github.com/canonical/snapd/blob/master/CONTRIBUTING.md for the contributing guidelines.
As far as I can tell you’ll need an interface that ships the following similar AppArmor policy:
dbus (send)
bus=session
interface=org.freedesktop.systemd1
path=/org/freedesktop/systemd1/unit{,/**}
peer=(label=unconfined),
dbus (receive)
bus=session
interface=org.freedesktop.systemd1
path=/org/freedesktop/systemd1/unit{,/**}
peer=(label=unconfined),
with the following names:
user-service-control
user-service-observe
As a last resort, you can always distribute classic-confined snaps without store restrictions via other channels like GitHub Releases.