История изменений
Исправление intelfx, (текущая версия) :
Я долго смотрел в конфиги, как это сделал гном, и мне вот непонятно ничегошеньки. Раньше мне казалось, что вот есть user.target, и он запускается в сессии. Оказалось, не все так просто, каким-то образом гномьи юниты запускаются только при старте гнома. Переключаюсь в другую сессию, и их там нет. Как система различает, какие таргеты включить вот прям щас? Как объяснить gdm, что вот сейчас я хочу другой набор, специально для WindowMaker?
Мы ведь говорим о том, как запускать куски гномовской сессии (которые начиная с GNOME 3.34 перекочевали под управление systemd --user
) вне гномовской сессии?
Как ты написал, всё так и есть. Только не user.target
, а default.target
, и в нём действительно нет ничего GNOME-специфичного. Гномьи юниты запускаются «вручную» в процессе логина специальным промежуточным бинарником (т. е. GDM, вместо того чтобы тупо запустить иксы, выставить переменные окружения и экзекнуть Xsession, запускает специальный промежуточный бинарник, который дальше вручную стартует юниты в юзерском systemd и засыпает до выхода).
Если быть точнее, то при входе в гном GDM запускает процесс gnome-session
(через враппер gdm-wayland-session
, который не знаю зачем нужен). Это шелл-скрипт, который подготавливает переменные окружения (чтобы соблюсти семантику /etc/profile
) и запускает gnome-session-binary
, который по сути занимается оркестрацией этой сессии через systemd. Какие конкретно юниты и в каком порядке там запускаются — вот этого уже не знаю.
Там какой-то очень сложный граф вызовов с кучей таргетов, которые запускают друг друга, но если я правильно тебя понимаю, то тебя интересует в первую очередь gnome-session-initialized.target
, который втягивает кучу gsd-*.target
и по транзитивности gsd-*.service
. Там много хардкода (например, gnome-session-intiialized.target
не запустится без gnome-session.target
, потому что Requisite, но ты можешь написать свой таргет и запускать его из своего самописного Xsession-скрипта.
А вообще что тебя интересует в конечном итоге?
В любом случае, ты можешь посмотреть на это всё сам:
systemd-analyze --user dot 'gnome-*' 'gsd-*' | grep -v 'color="red"' | dot -Tsvg > systemd-user-gnome.svg
firefox systemd-user-gnome.svg
Исходная версия intelfx, :
Я долго смотрел в конфиги, как это сделал гном, и мне вот непонятно ничегошеньки. Раньше мне казалось, что вот есть user.target, и он запускается в сессии. Оказалось, не все так просто, каким-то образом гномьи юниты запускаются только при старте гнома. Переключаюсь в другую сессию, и их там нет. Как система различает, какие таргеты включить вот прям щас? Как объяснить gdm, что вот сейчас я хочу другой набор, специально для WindowMaker?
Мы ведь говорим о том, как запускать куски гномовской сессии (которые начиная с GNOME 3.34 перекочевали под управление systemd --user
) вне гномовской сессии?
Как ты написал, всё так и есть. Только не user.target
, а default.target
, и в нём действительно нет ничего GNOME-специфичного. Гномьи юниты запускаются «вручную» в процессе логина специальным промежуточным бинарником (т. е. GDM, вместо того чтобы тупо запустить иксы, выставить переменные окружения и экзекнуть Xsession, запускает специальный промежуточный бинарник, который дальше вручную стартует юниты в юзерском systemd и засыпает до выхода).
Если быть точнее, то при входе в гном GDM запускает процесс gnome-session
(через враппер gdm-wayland-session
, который не знаю зачем нужен). Это шелл-скрипт, который подготавливает переменные окружения (чтобы соблюсти семантику /etc/profile
) и запускает gnome-session-binary
, который по сути занимается оркестрацией этой сессии через systemd. Какие конкретно юниты и в каком порядке там запускаются — вот этого уже не знаю.
Там какой-то очень сложный граф вызовов с кучей таргетов, которые запускают друг друга, но если я правильно тебя понимаю, то тебя интересует в первую очередь gnome-session-initialized.target
, который втягивает кучу gsd-*.target
и по транзитивности gsd-*.service
. Там много хардкода (например, gnome-session-intiialized.target
не запустится без gnome-session.target
, потому что Requisite, но ты можешь написать свой таргет и запускать его из своего самописного Xsession-скрипта.
В любом случае, ты можешь посмотреть на это всё сам:
systemd-analyze --user dot 'gnome-*' 'gsd-*' | grep -v 'color="red"' | dot -Tsvg > systemd-user-gnome.svg
firefox systemd-user-gnome.svg