Hello there !
We have a first program mysnap.launcher who is lauching my other mysnap.app with the current command (in a cpp code) :
int errCode = system(“snapctl start mysnapp.app”);
This works like a charm, and we are quite happy about it
But now we want to do add an argument
int errCode = system(“snapctl start mysnap.app --my-option”);
This does not work, is passing an arg when starting a snap supported ?
Btw is there somewhere with a snapctl doc? snapctl -h does not have much options, we found somewhere on internet that we could do something like
snapctl run mysnapp.app --my-option
And it works, but does seem to be run in the current shell launched and not handled by the “snap management” layer
Any hints about this ? Or are we missing something? Is there a better solution to simply pass an arg when launching a snap from a snap ?
This is starting a daemon in your snap, not running the snap app process from inside your snap. You can run a specific snap app from the current snap by just executing the appropriate binary or shell script referenced in the snapcraft.yaml for your snap’s app.
The reason this does not work is because you aren’t launching an app, you are asking systemd (eventually via systemctl) to start the daemon. That daemon runs with whatever args are defined in the snapcraft.yaml for your snap and as such doesn’t allow changing the arguments this way.
This will not work,
snapctl does not support
$ snapctl run my-snap
error: error running snapctl: Unknown command `run'. Please specify one command of: get, restart, services, set, set-health, start, stop or unset
Perhaps you are thinking of running snap apps via
snap run my-snap ..., which only works outside of snap confinement. A snap is not allowed to launch other snaps or even use the
snap command, things that you would normally use
snap to do that you want to do in the snap should be done with
snapctl, but note that some things are still disallowed from inside the snap (such as the
snap run command).
There is some information on https://snapcraft.io/docs/supported-snap-hooks but we could use more information on
snapctl considering it has grown considerably beyond just accessing snap config.
Yes that’s actually exactly what we want to do, we were trying to check if there was a way to provide an arg to this daemon or not. Thanks for confirming that it is indeed impossible, we will find another way !
And thanks for the quick reply !
One way that you could do this is to have your program read options from snapctl, so instead of doing something like
inside the code for
program you would call
snapctl get like this:
snapctl get my-option
and when you want to change that option just call
snapctl set my-option=true or something like that.
Oh yes, that’s a nice workaround, will explore that, thanks a lot !