Вопрос или проблема
Я пытаюсь запустить 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.
Анализ проблемы
-
Linger mode: Вы включили режим linger для пользователя
raspi
, что позволяет вашему пользователю сохранять состояние сессии и включать его сервисы даже без активной входной сессии. Однако по умолчанию это не запускает пользовательский service manager при старте системы, а лишь дает возможность ему так работать. Следовательно, сам процесс управления сервисом запускается только после первого входа. -
Служебный файл: Ваш файл
/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 для получения поддержки.