-
Notifications
You must be signed in to change notification settings - Fork 11
Managing systemd configuration with cme
This page explains how to use
cme to manage Systemd
user configuration, i.e. how to use cme to update user Systemd
configuration files located in ~/.config/systemd/user.
On Debian/Ubuntu:
apt-get install cme libconfig-model-systemd-perlTo get the optional graphical interface, add:
apt-get install libconfig-model-tkui-perlRun
cpanm App::Cme
cpanm Config::Model::Systemd
cpanm Config::Model::TkUIRun cme check systemd-user:
$ cme check systemd-user cme: using Systemd model loading data checking data check done
cme command can also be run as root to check Systemd configuration
which is located in /etc/systemd/system/:
$ cme check systemd cme: using Systemd model loading data checking data check done
The edit modify and shell commands described below for
systemd-user can be applied the same way to systemd.
Once you run cme edit systemd-user, you will see a window like:

Most of your configuration will probably be in the service section.
This section is shown in the screenshot above. It contains user services
defined in global /usr/lib/systemd/user/ and in local
~/.config/systemd/user/. The services defined in the global directory
can be overridden by files defined in the local directory.
With cme, you don’t have to worry where the service files are stored.
cme offers the possibility to override the global settings with local
settings. This will be detailed later.
Let’s edit the following example of a service file through cme:
$ cat ~/.local/share/systemd/user/[email protected] [Unit] Description=Tunnel IMAPS connections to Free with Systemd [Service] StandardInput=socket ExecStart=-/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888
The content of this file can be accessed by opening service and then
free-imap-tunnel:

Since Systemd features a lot of options, you may want to click on
show only custom values button (top right) to hide unmodified
configuration values:

The image above shows the parameters set up by user for the service
(highlighted by the green arrow): * the Unit description * the parameter
StandardInput * the list of command to execute (ExecStart)
Install does not show any value because no parameter was set. Once you
double-click on Install, cme show the available parameters in the
right part of the window. Parameters of Install can be edited there.
The green arrow means that the value is different from the default value.
To change a value (e.g. =StandardInput=), you: * double-click on
StandardInput (right-click has the same effect) * click on any value
in the “Edit value” widget * click on store button

Once, this is done, you need to save the changes to the configuration by clicking on File->save menu.
If you have trouble running the graphical interface, you can use a shell
like interface by running cme shell systemd-user command:
$ cme shell systemd-user [return] cme: using Systemd model >:$ ls [return] service socket >:$ cd service: [return] Can't cd in a hash, please add an index (e.g. service:foo) >:$ cd service: [tab][tab] service: service:glib-pacrunner service:gvfs-mtp-volume-monitor service:at-spi-dbus-bus service:"gmail-imap-tunnel@" service:gvfs-udisks2-volume-monitor service:colord-session service:gnome-terminal-server service:obex service:evolution-addressbook-factory service:gvfs-afc-volume-monitor service:"office365-imap-tunnel@" service:evolution-calendar-factory service:gvfs-daemon service:pulseaudio service:evolution-source-registry service:gvfs-goa-volume-monitor service:systemd-exit service:evolution-user-prompter service:gvfs-gphoto2-volume-monitor service:"free-imap-tunnel@" service:gvfs-metadata >:$ cd service:"free-imap-tunnel@" [return] >: service:"free-imap-tunnel@" $ ls [return] disable Unit Install Service >: service:"free-imap-tunnel@" $ cd Service [return] >: service:"free-imap-tunnel@" Service $ ll [return] name value type comment CPUAccounting [undef] boolean CPUShares [undef] uniline << snip >> ExecStart -/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888 list << snip >> >: service:"free-imap-tunnel@" Service $ cd - Unit [return] >: service:"free-imap-tunnel@" Unit $ ls Description [return] Description >: service:"free-imap-tunnel@" Unit $ ll Description [return] name value type comment Description "Tunnel IMAPS connections to Free with corkscrew" uniline >: service:"free-imap-tunnel@" Unit $ set Description="Tunnel IMAPS connections to Free with Systemd"[return] >: service:"free-imap-tunnel@" Unit $ ll Description [return] name value type comment Description "Tunnel IMAPS connections to Free with Systemd" uniline >: service:"free-imap-tunnel@" Unit $ changes [return] service:"free-imap-tunnel@" Unit Description: 'Tunnel IMAPS connections to Free with corkscrew' -> 'Tunnel IMAPS connections to Free with Systemd' >: service:"free-imap-tunnel@" Unit $ exit [return] Changes applied to systemd-user configuration: - service:"free-imap-tunnel@" Unit Description: 'Tunnel IMAPS connections to Free with corkscrew' -> 'Tunnel IMAPS connections to Free with Systemd' write back data before exit ? (Y/n) [return] $
For more details, see the documentation on available cme shell commands
Not yet provided. Unlike Ssh model, Systemd model currently contains no provision to upgrade older Systemd configuration because the author is not aware of such a need. Feel free to log a bug on github to require upgrade capabilities.
You can use the modify subcommand of cme to perform configuration
modifications with a command line:
$ cme modify systemd-user 'service:"free-imap-tunnel@" Unit Description="Tunnel IMAPS connections to Free with Systemd"' cme: using Systemd model Changes applied to systemd-user configuration: - service:"free-imap-tunnel@" Unit Description: 'Tunnel IMAPS connections to Free with System-d' -> 'Tunnel IMAPS connections to Free with Systemd'
The command used after systemd-user follows the syntax described in
Config::Model::Loader
documentation.
Starting from
Config::Model 2.086,
cme() function can be used to modify Systemd configuration:
use strict;
use warnings;
use Config::Model qw/cme/;
cme('systemd-user')->modify('service:"free-imap-tunnel@" Unit Description="Tunnel IMAPS connections to Free with Systemd"');For more details, see Systemd and cme documentation.