多个用户的systemd单元文件模板

前一段时间我把这个答案发给了我的问题。 现在,由于不断变化的需求,我想让VNC服务器可供多个用户使用。 该服务应该在启动时启动,并且可用。

我试图将各种参数传递给User=指令(在[Service]部分下)。 我尝试了User=$USERUser=%u ,以及其他一些替代品。 没有用。 根据文档 , User应该是一个单一的和静态的。 但是,文档还在User=指令下面提到了一个DynamicUser ,遗憾的是,这超出了我对systemd理解。 ( 也许我应该尝试User=$USERUser=%uDynamicUser=true不起作用。)

有没有办法为多个用户创建systemd模板单元文件?


PS。 似乎可以使用较旧的init.d来完成

无法将多个参数传递给systemd模板(请参阅相关的邮件列表讨论 )。 但是,由于我们只有两个参数,一个是用户名,因此将其作为用户服务而不是系统服务是有意义的。

如果为这些用户启用了延迟 ,则可以在启动时运行用户服务:

 sudo loginctl enable-linger username 

来自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. 

您可以在/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=字段,这在用户会话中没有意义。 另请注意[Install]multi-user.targetmulti-user.target (用户会话中不存在)到default.target更改。

然后,用户可以使用systemctl --user命令控制此服务。 (请注意,如果该用户尚未登录,则可能需要在启用“延迟”后重新启动,以便为其启动用户会话。)