多用户的 systemd 单元文件模板

多用户的 systemd 单元文件模板

我发过这个答案回答我之前的问题。现在,由于不断发展的需求,我想让 VNC 服务器可供多个用户使用。该服务应在启动时启动并可用。

我尝试将各种参数传递给User=指令(在[Service]部分下)。我尝试了User=$USERUser=%u和其他一些替代方案。没有一个奏效。每文档User应该是单一的和静态的。但是,文档还提到了指令DynamicUser下方的User=,不幸的是,这超出了我的理解范围systemd。(也许我应该尝试User=$USERUser=%uDynamicUser=true不起作用。)

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


诗篇似乎可以用老的init.d

答案1

无法向 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=字段,这在用户会话中没有意义。还请注意WantedBy从(在用户会话中不存在)到 的[Install]更改。multi-user.targetdefault.target

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

相关内容