Служба VNC для пользователей systemd не будет запускаться автоматически.

Вопрос или проблема

Я пытаюсь запустить VNC сервер в systemd в пользовательском режиме автоматически после загрузки. Использую Arch Linux, работающий в виде виртуальной машины.

Сервер VNC – это Tiger VNC:

$ pacman -Qs vnc
local/tigervnc 1.9.0-1
    Набор серверов и клиентов VNC. Основан на ветке VNC 4 TightVNC.

/home/raspi/vnc.service:

[Unit]
Description=Служба удаленного рабочего стола (VNC)

[Service]
Type=simple
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :1 > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :1 -geometry 1920x1080 -alwaysshared -fg -name remote
ExecStop=/usr/bin/vncserver -kill :1

[Install]
WantedBy=default.target

Линегрирование включено:

$ loginctl show-user raspi | grep -i linger
Linger=yes

Установлено с:

$ systemctl --user enable /home/raspi/vnc.service
Создана символическая ссылка /home/raspi/.config/systemd/user/default.target.wants/vnc.service → /home/raspi/vnc.service.
Создана символическая ссылка /home/raspi/.config/systemd/user/vnc.service → /home/raspi/vnc.service.

Запущено с:

$ systemctl --user start vnc.service

Я могу запустить его и подключиться к нему, но он не запускается автоматически при загрузке системы. Мне нужно войти в систему и вручную запустить systemctl --user start vnc.service. Что я упускаю?

Вы упускаете тот факт, что управление службами для каждого пользователя по умолчанию не начинается при загрузке. Оно начинается, когда вы впервые входите в систему, в результате хука менеджера служб в систему входа.

Дополнительное чтение

Ответ или решение

Для автоматического запуска VNC-сервера (Tiger VNC) в режиме пользователя с помощью systemd в Arch Linux необходимо учесть несколько моментов, поскольку ваша конфигурация уже почти завершена. Вы правильно указали, что система service user не запускается при загрузке системы. Она активируется только с первой попыткой входа пользователя; это связано с механизмом логирования и управлением сессиями в systemd.

Анализ проблемы

  1. Linger mode: Вы включили режим linger для пользователя raspi, что позволяет вашему пользователю сохранять состояние сессии и включать его сервисы даже без активной входной сессии. Однако по умолчанию это не запускает пользовательский service manager при старте системы, а лишь дает возможность ему так работать. Следовательно, сам процесс управления сервисом запускается только после первого входа.

  2. Служебный файл: Ваш файл /home/raspi/vnc.service выглядит корректно, что позволяет успешно запускать его вручную. Однако важно понять, что при автоматическом запуске после перезагрузки системы вам все равно потребуется активировать пользователя через loginctl.

Решение

Для достижения вашей цели – автоматического старта VNC сервера при загрузке системы – выполните следующие шаги:

Шаг 1: Активация linger

Убедитесь, что linger действительно включен для вашего пользователя. Вы уже сделали это, выполнив команду:

loginctl show-user raspi | grep -i linger

Если вы не видите Linger=yes, получите права суперпользователя и выполните:

loginctl enable-linger raspi

Шаг 2: Настройка графической среды

Смело продолжайте! Вам необходимо настроить вашу графическую среду, чтобы она запускала систему инициализации (такую как startx или display manager) автоматически при старте системы. Это связано с тем, что несмотря на то, что ваш зависимый сервис уже настроен, вам все же необходимо входить в систему для активации службы.

Шаг 3: Программный запуск пользователем

Если автоматизация входа не является желаемой опцией, вы можете добавить команду запуска VNC в файл инициализации вашей графической сессии. Например, если вы используете ~/.xinitrc, добавьте следующее:

if command -v vncserver &>/dev/null ; then
    systemctl --user start vnc.service
fi

Таким образом, при каждом запуске графической сессии команда systemctl будет запускать службу VNC.

Шаг 4: Ручной запуск

Как крайняя мера, вы можете оставить запуск вручную, но для более удобного доступа можно написать скрипт, который будет запускать systemctl --user start vnc.service.

Заключение

Используя режим linger и следуя вышеописанным шагам, вы можете гарантировать, что ваш VNC сервер будет автоматически активироваться, как только вы войдете в систему. Это обеспечит более гладкий опыт работы и упростит доступ к вашему VNC серверу на Arch Linux.

Если у вас возникнут дополнительные проблемы, обратитесь к специализированным ресурсам или форумам пользователей Arch Linux для получения поддержки.

Оцените материал
Добавить комментарий

Капча загружается...