Вопрос или проблема
Я пытаюсь запустить tigervnc как процесс systemd на моей машине Ubuntu 24.04.
Сервер работает, когда я запускаю его так:
vncserver -fg :1
Но как процесс systemd я не могу его заставить работать.
Вот ошибка, которую я получаю:
× vncserver@:1.service - Start TigerVNC server at startup
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sun 2025-01-19 15:22:04 CET; 42min ago
Process: 8790 ExecStart=/usr/bin/vncserver ::1 (code=exited, status=1/FAILURE)
CPU: 2ms
Jan 19 15:22:04 t1 systemd[1]: Starting vncserver@:1.service - Start TigerVNC server at startup...
Jan 19 15:22:04 t1 (ncserver)[8790]: PAM unable to dlopen(pam_lastlog.so): /usr/lib/security/pam_lastlog.so: cannot open shared object file: No such file or directory
Jan 19 15:22:04 t1 (ncserver)[8790]: PAM adding faulty module: pam_lastlog.so
Jan 19 15:22:04 t1 (ncserver)[8790]: pam_unix(login:session): session opened for user alexander(uid=1000) by alexander(uid=0)
Jan 19 15:22:04 t1 systemd[1]: vncserver@:1.service: Control process exited, code=exited, status=1/FAILURE
Jan 19 15:22:04 t1 systemd[1]: vncserver@:1.service: Failed with result 'exit-code'.
Jan 19 15:22:04 t1 systemd[1]: Failed to start vncserver@:1.service - Start TigerVNC server at startup.
Это мой конфиг systemd:
[Unit]
Description=Start TigerVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=alexander
PAMName=login
PIDFile=/home/alexander/.vnc/%H:%i.pid
ExecStart=/usr/bin/vncserver :%i
ExecStop=/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target
Я пытался переустановить libpam-modules
, потому что многие это рекомендуют, но безуспешно.
Интересно, что каталог /usr/lib/security/
, упомянутый в ошибке, действительно не существует. Хотя не знаю почему.
Ответ или решение
Настройка TigerVNC в качестве сервиса systemd на Ubuntu 24.04 может включать в себя множество шагов и устрожений, связанных с различными конфигурациями и компонентами. Давайте подробно рассмотрим проблему, возможные причины и пути её решения, используя методологию TEA (теория, пример, применение).
Теория
TigerVNC — это высокопроизводительный, полностью оснащенный и безопасный сервер VNC, который позволяет удалённо управлять графическим интерфейсом системы. Чтобы автоматически запускать TigerVNC как сервис systemd при старте системы, требуется правильная настройка конфигурационных файлов и учёт всех зависимостей, таких как модули PAM.
Systemd — это система инициализации, которая управляет службами на уровне системы, и его широкие возможности обеспечивают гибкость в управлении автозапуском процессов с различной сложностью настройки. Чтобы TigerVNC корректно работал через systemd, важно удостовериться, что все компоненты и зависимости установлены правильно.
Пример
Рассмотрим конфигурацию, описанную в вашем исходном сообщении:
-
Unit-файл systemd для TigerVNC:
[Unit] Description=Start TigerVNC server at startup After=syslog.target network.target [Service] Type=forking User=alexander PAMName=login PIDFile=/home/alexander/.vnc/%H:%i.pid ExecStart=/usr/bin/vncserver :%i ExecStop=/usr/bin/vncserver -kill %i [Install] WantedBy=multi-user.target
-
Ошибки:
PAM unable to dlopen(pam_lastlog.so)
: эта ошибка указывает на проблему с модулем PAM, который отсутствует в системе или неправильно настроен.- Отсутствие каталога
/usr/lib/security/
: это может быть связано с тем, что необходимый пакет не был установлен, или конфигурация пути установлена неверно.
Применение
Чтобы решить данную проблему, следуйте следующему пошаговому алгоритму:
-
Установите отсутствующие библиотеки PAM:
Поскольку сообщение об ошибке указывает на проблемы с модулемpam_lastlog.so
, перепроверьте наличие пакета с командой:sudo apt update sudo apt reinstall libpam-modules
Если ошибка сохраняется, выполните установку пакета из репозитория:
sudo apt install --reinstall libpam0g
-
Проверьте пути и доступность модулей PAM:
Убедитесь, что файлpam_lastlog.so
доступен по ожидаемому пути. Если файла нет в/usr/lib/security/
, можно попробовать найти его в системе:find / -name pam_lastlog.so
Если отсутствует возможность найти его, возможно потребуется создание символьной ссылки из имеющегося места:
sudo ln -s /lib/x86_64-linux-gnu/security/pam_lastlog.so /usr/lib/security/pam_lastlog.so
-
Проверьте права доступа:
Убедитесь, что у пользователяalexander
есть необходимые права на каталог~/.vnc
и что все команды выполняются от имени верного пользователя. -
Диагностика и логирование:
Включите больше логов для службы:[Service] Type=forking User=alexander PAMName=login PIDFile=/home/alexander/.vnc/%H:%i.pid ExecStart=/usr/bin/vncserver :%i -Log *:stderr:100 ExecStop=/usr/bin/vncserver -kill %i
Это позволит получить более подробную информацию о возможных проблемах.
-
Проверьте файлы конфигурации VNC:
Убедитесь, что файл конфигурацииxstartup
в каталоге~/.vnc
настроен правильно и соответствует вашим требованиям к графической оболочке. -
Тестирование и запуск:
После внесения всех изменений перезапустите сервис и проверьте его статус:sudo systemctl daemon-reload sudo systemctl start vncserver@:1.service sudo systemctl status vncserver@:1.service
Пройдите все предложенные шаги и, если некоторые из указанных решений не срабатывают, рассмотреть дополнительные логи и факторы, которые могут мешать корректному выполнению сервиса. Обратите внимание на специфические настройки безопасности и политики в вашей системе. Если проблема продолжает существовать, возможно, стоит рассмотреть консультацию с системным администратором для более углубленного анализа.