systemd --user: Могу ли я замаскировать все (несущественные) глобальные службы?

Я пытаюсь узнать больше о том, как запускается среда рабочего стола, особенно пользовательские службы. В моем текущем сеансе Ubuntu 20.04 по умолчанию активны несколько десятков служб, большинство из которых запускаются systemd --user как глобальные службы. Это затрудняет понимание того, что происходит.

Я хотел бы создать отдельного пользователя, которого я мог бы использовать для отладки, экспериментов и начать работу с минимально возможным набором необходимых сервисов. Как диспетчер отображения, диспетчер окон, dbus --session , панель и все, что нужно для входа в графический сеанс.

Для начала я ищу способ замаскировать или иным образом отключить все службы systemd --user только для данного пользователя и загрузить только те, которые явно указаны пользователем (например, в ] ~ / .config / systemd / user )? Возможно ли это?

0
задан 26 April 2020 в 18:36

1 ответ

Прочитав больше о том, как запускаются программы в графическом сеансе, я узнал, что существует три основных способа запуска программ. В следующем списке предполагается сеанс Xorg, он может отличаться для Wayland:

  • Запускается диспетчером отображения (например, gdm) или xinit
  • Запускается с помощью файлов .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)

Некоторыми компонентами сеанса могут управлять файлы автозапуска 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.

2
ответ дан 26 April 2020 в 22:09

Другие вопросы по тегам:

Похожие вопросы: