Я отправил этот ответ на свой вопрос когда-то назад. Теперь, из-за развития потребностей, я хотел бы сделать сервер VNC доступным для многочисленных пользователей. Сервис должен запуститься при запуске и быть доступным.
Я пытался передать различные аргументы User=
директива (под [Service]
раздел). Я попробовал User=$USER
, User=%u
, и немного других альтернатив. Ни один не работал. На документацию, User
должно быть унитарное и статическое. Однако документация также упоминает a DynamicUser
чуть ниже User=
директива, которая является, к сожалению, вне моего понимания systemd
. (Возможно, я должен попробовать Не работает.)User=$USER
или User=%u
и DynamicUser=true
?
Есть ли способ создать a 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=
поле, которое не имеет смысла на сеансах пользователя. Также обратите внимание на изменения к WantedBy
в [Install]
от multi-user.target
(который не существует на сеансах пользователя) к default.target
.
Пользователи могут затем управлять этим сервисным использованием systemctl --user
команды. (Обратите внимание, что Вы, возможно, должны были бы перезапустить после включения задерживаются, если тот пользователь еще не вошел в систему, так, чтобы сеанс пользователя был запущен для них.)