答案1
无法向 systemd 模板传递多个参数(请参阅相关邮件列表讨论)。但是,由于我们只有两个参数,其中一个是用户名,因此将其设为用户服务而不是系统服务是有意义的。
如果您启用逗留对于那些用户:
sudo loginctl enable-linger username
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.
您可以在 创建一个用户服务/etc/systemd/user
,它看起来像(调整您之前的服务):
[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
使用%h
用户主目录的说明符。我省略了该User=
字段,这在用户会话中没有意义。还请注意WantedBy
从(在用户会话中不存在)到 的[Install]
更改。multi-user.target
default.target
然后用户可以使用systemctl --user
命令来控制此服务。(请注意,如果该用户尚未登录,则可能需要在启用 linger 后重新启动,以便为他们启动用户会话。)