I am trying to use the $HOME environment variable in the ExecStart. I tried many different things like $HOME and ${HOME} but nothing seems to be working
ExecStart=${HOME}/bin/some-binary
Anyone knows the correct format for this?
I am trying to use the $HOME environment variable in the ExecStart. I tried many different things like $HOME and ${HOME} but nothing seems to be working
ExecStart=${HOME}/bin/some-binary
Anyone knows the correct format for this?
I think this is what you're looking for: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers.
Specifically, %h should expand to the current user's home dir.
The full list of supported variables (called "Specifiers") is here: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers.
There is no specifier for the home directory of user the service is run as (the one specified by User=). There is only one for the user running the service manager.
From the link:
%his the home directory of the user running the service manager instance. In case of the system manager this resolves to "/root". Note that this setting is not influenced by theUser=setting configurable in the [Service] section of the service unit.
So, as the absence of practical examples in combination with comments makes a feeling like %h doesn't work (it does actually), here's a full example of a service that starts from HOME dir without hardcoding it.
Given a script ~/test.sh:
#!/bin/bash
echo hello
Creating a file ~/.config/systemd/user/test.service:
[Unit]
Description=Test
[Service]
Type=oneshot
ExecStart=%h/test.sh
[Install]
WantedBy=multi-user.target
then executing a systemctl --user daemon-reload && systemctl --user start test will make it start and print Hello to the journal.
It uses the %h specifier mentioned in other answers and documented as a This is the home directory of the user running the service manager instance. […]. So unless you'll run your user service as another user, this should work.
Systemd versions tested:
systemd 253 (253.1-3-arch)systemd 237.