Вопрос или проблема
Согласно моему искренне наивному пониманию единиц systemd, одной из служб, которую хочет завершить multi-user.target, является NetworkManager.service. Как только multi-user.target достигнут, выполняется graphical.target, который является целевым значением по умолчанию, что запускает display-manager.service, который, в свою очередь, запускает gdm.
Возможно ли удалить “NetworkManager.service” из зависимостей multi-user.target и вместо этого запустить его из display-manager.service?
Что я хотел бы, так это чтобы запуск не ждал, пока сеть будет доступна, и как только экран входа будет достигнут, NetworkManager.service выполнялся, чтобы сеть инициализировалась параллельно с тем, как пользователь входит в систему.
Могут быть случаи использования сети во время загрузки, но я не могу представить себе такой случай для обычного пользователя рабочего стола, как я.
Ответ или решение
Запуск NetworkManager.service после достижения graphical.target: реализация и возможные подходы
Введение
Вопрос, касающийся зависимости сервиса NetworkManager.service от целевого уровня multi-user.target, является важным аспектом работы с systemd, особенно в контексте desktop-систем. Здесь мы рассмотрим, возможно ли удалить зависимость NetworkManager.service от multi-user.target и запустить его в контексте отображения графического интерфейса.
Понимание зависимостей в systemd
Система инициализации systemd управляет подъемом сервисов и их зависимостями через цель (target), что позволяет организовать последовательность старта служб. Многие системы, включая Ubuntu и Fedora, используют multi-user.target как стандартный целевой уровень для многопользовательского режима. В этом состоянии предполагается, что сетевые услуги, как правило, должны быть доступны до входа пользователя в систему.
Механизм работы
При достижении multi-user.target ожидается, что NetworkManager.service будет запущен и готов к использованию, что позволяет пользователю иметь требуемую сеть при входе в систему. После этого происходит переключение на graphical.target, который отвечает за запуск графического дисплея (в вашем случае gdm, экранного менеджера).
Перемещение NetworkManager.service
Вопрос о том, возможно ли перемещение NetworkManager.service в цепочку вызовов, чтобы его запуск происходил после graphical.target, требует несколько изменений в конфигурациях systemd:
-
Удаление зависимости от multi-user.target:
Можно изменить зависимости, чтобы NetworkManager.service не находился под управлением multi-user.target. Это может быть сделано через изменение файла конфигурации сервиса. -
Создание зависимости от display-manager.service:
Альтернативный путь — добавить зависимость, чтобы NetworkManager.service запускался после display-manager.service. Это позволит NetworkManager.service инициализироваться в тот момент, когда графическая сессия готова.
Потенциальные риски
Следует учитывать несколько факторов, прежде чем внедрять изменения:
-
Сетевые сервисы: Многие приложения и функции зависят от наличия сети на этапе загрузки системы. Удаление NetworkManager.service из зависимости может негативно сказаться на таких процессах.
-
Управление пользователем: Если пользователь пытается войти в систему без интернет-соединения, это может вызвать затруднения, особенно если доступ к удалённым ресурсам (например, для аутентификации) требуется сразу при загрузке.
Рекомендации
Для пользователей, желающих попробовать описанный метод, рекомендуется:
-
Создать резервную копию конфигурации: Прежде чем производить изменения, создайте резервные копии ваших текущих конфигураций.
-
Тестировать изменения в безопасной среде: Протестируйте систему в режиме «live» или используйте отдельный тестовый компьютер, чтобы избежать поломок в основной системе.
-
Альтернатива с пользовательскими сценариями: Используйте пользовательские скрипты для автоматизации последовательности запуска, оставляя зависимость NetworkManager.service от multi-user.target, но позволяя его инициализацию в фоновом режиме во время логина пользователя.
Заключение
Согласно описанию и условиям, запуск NetworkManager.service после достижения graphical.target возможен, но требует аккуратного подхода к изменению конфигураций systemd. Важно учитывать как технические аспекты, так и возможные проблемы, которые могут возникнуть при изменении последовательности запуска. Убедитесь, что любые изменения соответствуют вашим нуждам и поддерживают необходимый функционал системы для оптимальной работы в условиях сети.