From f434508b074366a2cdfa17c0ecd41f51443dc8e2 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 21 Oct 2020 17:10:46 +0100 Subject: [PATCH] env.d: Port the environment generators to use --print-updated-env This reduces the amount of shell in use, and the number of subprocesses spawned by that, so our system environment generator is as fast as possible when used in the critical startup path. It adds a new system environment generator so that the system flatpak installation can be used outside of a user session. In particular, this allows enumeration of system-installed flatpaks in gnome-initial-setup in order to set parental controls on them. Signed-off-by: Philip Withnall --- Makefile.am | 5 ++++- configure.ac | 9 +++++++++ env.d/60-flatpak | 17 ++--------------- env.d/60-flatpak-system-only | 2 ++ 4 files changed, 17 insertions(+), 16 deletions(-) create mode 100755 env.d/60-flatpak-system-only diff --git a/Makefile.am b/Makefile.am index b85ccaa6..99f944b5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -161,13 +161,16 @@ if INSTALL_GDM_ENV_FILE env_DATA += flatpak.env endif -EXTRA_DIST += env.d/flatpak.env.in env.d/60-flatpak +EXTRA_DIST += env.d/flatpak.env.in env.d/60-flatpak env.d/60-flatpak-system-only DISTCLEANFILES += flatpak.env flatpak.env: env.d/flatpak.env.in $(AM_V_GEN) $(SED) -e "s|\@localstatedir\@|$(localstatedir)|" \ -e "s|\@sysconfdir\@|$(sysconfdir)|" $< > $@ +systemenvgendir = $(systemdsystemenvgendir) +systemenvgen_SCRIPTS = env.d/60-flatpak-system-only + userenvgendir = $(systemduserenvgendir) userenvgen_SCRIPTS = env.d/60-flatpak diff --git a/configure.ac b/configure.ac index bc6aaed6..a236ab8e 100644 --- a/configure.ac +++ b/configure.ac @@ -122,6 +122,15 @@ AC_ARG_WITH([systemdsystemunitdir], [with_systemdsystemunitdir='${prefix}/lib/systemd/system']) AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) +AC_ARG_WITH([systemdsystemenvgendir], + [AS_HELP_STRING([--with-systemdsystemenvgendir=DIR], + [Directory for systemd system environment generators (default=PREFIX/lib/systemd/system-environment-generators)])], + [], + dnl This is deliberately not ${libdir}: systemd units always go in + dnl .../lib, never .../lib64 or .../lib/x86_64-linux-gnu + [with_systemdsystemenvgendir='${prefix}/lib/systemd/system-environment-generators']) +AC_SUBST([systemdsystemenvgendir], [$with_systemdsystemenvgendir]) + AC_ARG_WITH([systemduserenvgendir], [AS_HELP_STRING([--with-systemduserenvgendir=DIR], [Directory for systemd user environment generators (default=PREFIX/lib/systemd/user-environment-generators)])], diff --git a/env.d/60-flatpak b/env.d/60-flatpak index c804e5a2..9b98ab57 100755 --- a/env.d/60-flatpak +++ b/env.d/60-flatpak @@ -1,15 +1,2 @@ -#!/bin/bash - -new_dirs= -while read -r install_path -do - share_path=$install_path/exports/share - case ":$XDG_DATA_DIRS:" in - *":$share_path:"*) :;; - *":$share_path/:"*) :;; - *) new_dirs=${new_dirs:+${new_dirs}:}$share_path;; - esac -done < <(echo "${XDG_DATA_HOME:-"$HOME/.local/share"}/flatpak"; flatpak --installations) - -XDG_DATA_DIRS="${new_dirs:+${new_dirs}:}${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" -echo "XDG_DATA_DIRS=$XDG_DATA_DIRS" +#!/bin/sh +exec flatpak --print-updated-env diff --git a/env.d/60-flatpak-system-only b/env.d/60-flatpak-system-only new file mode 100755 index 00000000..0dfcc2d6 --- /dev/null +++ b/env.d/60-flatpak-system-only @@ -0,0 +1,2 @@ +#!/bin/sh +exec flatpak --print-updated-env --print-system-only