From 445d438c45a4acdf7a2baffdab197ae6455826ff Mon Sep 17 00:00:00 2001 From: Mikhail Novosyolov Date: Thu, 16 Dec 2021 19:42:24 +0300 Subject: [PATCH] Hack to make alterator use correct icons --- kometa-xdg.spec | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/kometa-xdg.spec b/kometa-xdg.spec index 50fe242..c3d3d90 100644 --- a/kometa-xdg.spec +++ b/kometa-xdg.spec @@ -60,6 +60,73 @@ KDE 5 desktop settings for classic variant of Kometa #-------------------------------------------------------------- +%define regex auth[[:space:]]([[:space:]]).*pam_env.so user_envfile=.kometa_env readenv=0 user_readenv=1 + +%package pam-env +Summary: Hack PAM configs to make Qt5 applications ran by usermode use Kometa icons +Summary(ru): Хак конфигов PAM, чтобы запущенные через usermode приложения на Qt5 использовали иконки Кометы +Group: System/Base +# %%_qt5_plugindir/platformthemes/libqgtk3.so +Requires: libqt5-gui +Requires: pam +Requires(post): /bin/echo +Requires(post): grep +Requires(post): pam-config +Requires(preun): grep +Requires(preun): sed + +%description pam-env +Hack PAM configs to make Qt5 applications ran by usermode use Kometa icons. +%description -l ru_RU.UTF-8 pam-env +Некоторые приложения, например, acc (alterator-standalone), запускаются из-под +пользовательской сессии от root через usermode и при этом используют basealt +в качестве иконки. В KDE 5 под X11 приложение само после запуска устанавливает иконку +на панели задач. Темы иконок kometa* в качестве иконки basealt устанавливают логотип +Кометы вместо Базальта, чтобы не создавать ошибочное впечатление, что Комета — продукт +Базальта. Но из-под root Qt5 не узнает тему иконок и использует иконку basealt не из +темы Кометы. Этот пакет при установке подключает выставление переменной окружения +QT_QPA_PLATFORMTHEME=gtk3 для root, благодаря чему Qt5 начинает использовать +пользовательскую тему иконок под root. Удаление пакета отключает выставление переменной. + +%files pam-env +/root/.kometa_env + +# echo -e is a bashism +%post pam-env +# This scriptlet sees if pam_env.so <...> exists in PAM configuration and adds it to there if it does not. +# It does not add if if a sysadmin manually commented it out. +# /etc/control.d/facilities/ seemed to be too complex and not easy to use for this task, so inventing a bicycle. +TEXT='auth\t\toptional\tpam_env.so user_envfile=.kometa_env readenv=0 user_readenv=1' +# based on /etc/control.d/facilities/pam_access +CONFIG_COMMON=/etc/pam.d/system-auth-common +CONFIG_SYSTEM=/etc/pam.d/system-auth +if [ -f "$CONFIG_COMMON" ] +then + CONFIG="$CONFIG_COMMON" +else + CONFIG="$(readlink -e "$CONFIG_SYSTEM")" || CONFIG="$CONFIG_SYSTEM" +fi +if ! grep -qE "%regex" "$CONFIG" +then + echo "Adding loading ~/.kometa_env into PAM configs..." + cp "$CONFIG" "$CONFIG".rpmsave + # do not rely that shell-builtin 'echo' is capable of '-e' (not POSIX sh) + /bin/echo -e "$TEXT" >> "$CONFIG" +fi + +%preun pam-env +# Package removal, not upgrade +if [ "$1" -eq 0 ]; then + for file in /etc/pam.d/system-auth-common /etc/pam.d/system-auth + do + if grep -qE "^%regex" "$file"; then + echo "Removing loading ~/.kometa_env from PAM config ${file}..." + sed -i'.rpmsave' -E -e "/^%regex/d" "$file" + fi + done +fi +#-------------------------------------------------------------- + %prep %setup -q cp %SOURCE1 . @@ -81,6 +148,9 @@ install -m0755 scripts/systemd.sh %buildroot%_user_env_gen_dir/10-kometa-xdg.sh mkdir -p %buildroot/etc/xdg/kometa install -m0644 plasma5/* %buildroot/etc/xdg/kometa +mkdir -p %buildroot/root +echo QT_QPA_PLATFORMTHEME=gtk3 > %buildroot/root/.kometa_env + %check cd scripts ./test.sh