Não é possível passar vários parâmetros para o modelo do systemd (consulte lista de discussão relacionada discussão ). No entanto, como temos apenas dois parâmetros e um é o nome de usuário, faz sentido torná-lo um serviço do usuário em vez de um serviço do sistema.
Os serviços do usuário podem ser executados durante a inicialização se você ativar a demora para esses usuários:
sudo loginctl enable-linger username
Em man loginctl
:
enable-linger [USER...], disable-linger [USER...]
Enable/disable user lingering for one or more users. If enabled for
a specific user, a user manager is spawned for the user at boot and
kept around after logouts. This allows users who are not logged in
to run long-running services. Takes one or more user names or
numeric UIDs as argument. If no argument is specified,
enables/disables lingering for the user of the session of the
caller.
Você pode criar um serviço de usuário em /etc/systemd/user
, que seria semelhante a (adaptando seu serviço anterior):
[Unit]
Description=Start TigerVNC Server at startup
After=syslog.target network.target
[Service]
Type=forking
PAMName=login
PIDFile=%h/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -depth 24 -geometry 1920x1080 -nolisten tcp -localhost
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=default.target
Use o especificador %h
para o diretório inicial do usuário. Eu omiti o campo User=
, o que não faz sentido nas sessões do usuário. Observe também a alteração para WantedBy
in [Install]
de multi-user.target
(que não existe nas sessões do usuário) para default.target
.
Os usuários podem controlar esse serviço usando os comandos systemctl --user
. (Observe que você pode precisar reiniciar depois de ativar o linger se esse usuário ainda não tiver efetuado login, para que uma sessão do usuário seja iniciada para eles.)