Я пытаюсь узнать больше о том, как запускается среда рабочего стола, особенно пользовательские службы. В моем текущем сеансе Ubuntu 20.04 по умолчанию активны несколько десятков служб, большинство из которых запускаются systemd --user
как глобальные службы. Это затрудняет понимание того, что происходит.
Я хотел бы создать отдельного пользователя, которого я мог бы использовать для отладки, экспериментов и начать работу с минимально возможным набором необходимых сервисов. Как диспетчер отображения, диспетчер окон, dbus --session
, панель и все, что нужно для входа в графический сеанс.
Для начала я ищу способ замаскировать или иным образом отключить все службы systemd --user
только для данного пользователя и загрузить только те, которые явно указаны пользователем (например, в ] ~ / .config / systemd / user
)? Возможно ли это?
Прочитав больше о том, как запускаются программы в графическом сеансе, я узнал, что существует три основных способа запуска программ. В следующем списке предполагается сеанс Xorg, он может отличаться для Wayland:
.desktop
, найденных в различных путях по умолчанию в системе. (например, /etc/xdg/autostart
или /usr/share/applications
). systemd --user
Таким образом, то, какой графический сеанс Xorg завершится, будет зависеть не только от запуска модулей systemd --user
, но и от что находится в /etc/xdg/autostart
, а также как настроена ваша X-сессия.
Можно замаскировать каждую пользовательскую службу systemd с помощью system --user mask $SERVICE
. Список сервисов можно получить через:
systemctl --user list-units -t service --state=running --full --all --plain --no-legend | awk -F ' ' '{ print $1 }'
Как упомянул @heynnema, так легко сломать вашу систему, например, я замаскировал свой dbus.socket
, а затем Xorg больше не запускался, вероятно, потому, что некоторые процессы, которые требовались для сеанса, зависели от D-Bus.
Некоторыми компонентами сеанса могут управлять файлы автозапуска XDG .desktop
. Чтобы отключить автоматически запускаемый компонент, для текущего пользователя необходимо скопировать соответствующий файл рабочего стола .desktop
(например, из /etc/xdg/autostart
или /usr/share/applications) в ~/.config/autostart
и должен содержать Hidden=true
.
Однако, если ваш сеанс использует systemd
, то эти файлы .desktop
могут автоматически игнорироваться, если они содержат X-GNOME-HiddenUnderSystemd=true
.
Предполагая, что имя текущего сеанса находится в ${XDG_SESSION_DESKTOP}
, можно использовать следующую строку, чтобы проверить, какие компоненты требуются для ваших сеансов, и посмотреть, управляются ли они systemd:
components=$(cat /usr/share/gnome-session/sessions/$XDG_SESSION_DESKTOP.session|grep RequiredComponents | awk -F '=' '{ print $2 }' | tr ';' '\n' | awk 'NF'); for component in $components; do file=$(locate -r "/${component}.desktop$" | grep -v "/home" ); systemd=$(grep "X-GNOME-HiddenUnderSystemd" $file); echo "$file: $systemd"; done | sort -u
Некоторые аспекты могут быть специфичны для рабочего стола GNOME.