Setting system options

Snap supports a set of system-wide options that allow you to customise your snap environment. See System options for which options are supported.

As with Configuration in snaps, these options are changed with the set and get commands, but with a target of system instead of a specific snap:

$ snap set system some.option="some value"
$ snap get system some.option

Configuration options can be unset by either passing their names to the unset command or by adding an exclamation mark (!) to the end of an option name: (from snapd 2.41+):

$ snap unset system some.option
$ # or
$ snap set system some.option!

If a setting is part of the system snap, provided by either the core snap or snapd itself, the command syntax will include two instances of system, such as with system.timezone:

$ snap set system system.timezone="Europe/London"  

Typing snap get system outputs a top-level view of system-wide option categories which can be added as arguments to view their contents:

$ snap get system
Key           Value
experimental  {...}
refresh       {...}
seed          {...}
system        {...}
$ snap get system experimental
Key                   Value
experimental.hotplug  true
experimental.layouts  true

The entire set of system configuration options can be dumped as JSON by adding the -d option:

$ snap get -d system
        "experimental": {
                "hotplug": true,
                "layouts": true,
                "quota-groups": true
        "refresh": {
                "last": "2017-05-25T09:03:58.664837614+01:00",
                "retain": 2
        "seed": {
                "loaded": true
        "system": {
                "hostname": "neon",
                "network": {},
                "timezone": "UTC"

Note: Options are not visible until after they are set. The snap get command can then be used to check their state.


I’ve transformed the post into a wiki, reformatted the options to be a bit more readable, and fixed them so that they use dashes instead of underscores which is what’s supported.

@mvo Hopefully I’m not mistaken about your intent here.


It would be great if we can get all these added to which also has an explanatory description of each available option.

Also why do we have device specific options on the core snap? What does happen if I set pi-config.disable-overscan on a device not a pi? Will I see default values for those?

1 Like

i guess long term that should move to the gadget snaps … and we are still missing a lot of options that will make users still edit the file by hand.

@morphis This page should be removed and link here instead. This is a pattern we should try to replicate with other pages in the documentation. We’ll have many more contributing eyes here, and everyone is able to immediately fix broken documentation, take feedback, and improve it right then.

@davidcalle Can you help us with that?

@ogra Before we move this out of core, we need to have a better picture of how gadget updates are taking care of boot assets, etc. We don’t want to hand off control of these sensitive configuration files before we do that as depending on how we do these updates we might brick devices in the field. Note that having it in core already allows gadgets to tune these options nevertheless.

yup, fully agreed, but what will the migration path for vendors that start using this in their images today be ?
if we move it later we somehow need to move their products too, to not break them with a core update that suddenly does not have that feature anymore …

There’s no reason for us to break the support in core.

Included refresh.schedule and transformed it into something more prosaic.

What time zone is refresh.schedule in? I would have assumed the system time zone, but snap changes for example shows timestamps in UTC.

1 Like

The proposed implementation is using system’s local time.

1 Like

Can someone document ‘timer’ as well with the complete syntax and representative cron/anacron replacement examples? (eg, hourly, daily at midnight, etc)

Until that happens, one can look at ParseSchedule() at

I’ve added most common formats to this topic: Timer string format

1 Like

I was trying to set the refresh timer to 1st Wednesday of the month at 13:00 and used the convention wed1,13:00. I was expecting the next refresh timer to be set to 1st August which is two days from today (30th of July 2018) but it is set to Wednesday of the second week of August . Is this a bug or am I doing something wrong ?

Here is my commands

$ sudo snap set system refresh.timer=wed1,13:00
$ sudo snap get system refresh.timer
$ sudo snap refresh --time
timer: wed1,13:00
last: 11 days ago, at 12:33 IST
next: in 9 days, at 13:00 IST

Thanks for reporting this. This looks like a bug in calculating the time, I’ll look into it.

Edit: The fix is waiting for review atm.

1 Like

Using the latest Edge image for Core, setting pi-config.display-rotate=1 (or manually editing /boot/uboot/config.txt) results in a dysfunctional system. According to the official documentation for config.txt video options, display_rotate is deprecated and one should use display_hdmi_rotate or display_lcd_rotate. Setting either manually in /boot/uboot/config.txt seems to have no effect. Do I need to change any of the HDMI-related parameters as well, or is this a known issue in Edge? When I use Core stable, using the snap configuration hook for display_rotate works as expected.

(ping @ogra for Pi-related things IIRC :blush: )

AFAIK the rotate options only apply to the raw framebuffer that the Pi firmware initalizes.

we default to use the kms/drm framebuffer driver in our pi gadgets though, can you try commenting dtoverlay=vc4-kms-v3d in config.txt and see if the rotation options work then …

if this fixes it, we probably need to make sure the snapd code disables the overlay (at the cost of any accelerated graphics support) in case one of these rotate options gets set.

Will try out disabling the overlay as you suggested, but I’d be happy to use other methods if they preserve accelerated graphics support. Do you happen to have a solution for display rotation with kms/drm, preferably one that can be changed without a reboot?

Is there a preferred mechanism to unset a configuration item?

Let’s say that I want to set a proxy:

$ sudo snap set system proxy.https="localhost:9000"

And later on, I wish to remove that proxy by setting the key to an empty string:

$ sudo snap set system proxy.https=""

That item now still appears within the config:

$ sudo snap get system proxy.https
Key          Value

Is it possible to delete the key?

1 Like

refresh.hold is not documented.

1 Like