LINUX.ORG.RU

История изменений

Исправление 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