You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-plymouth/scripts/plymouth-set-default-theme.in

197 lines
6.1 KiB

#!/bin/bash
set -e
[ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@"
[ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@"
[ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@"
[ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@"
if [ -z "$PLYMOUTH_PLUGIN_PATH" ]; then
if [ -z "$LIB" ]; then
PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)"
else
[ -z "$PLYMOUTH_LIBDIR" ] && PLYMOUTH_LIBDIR="@PLYMOUTH_LIBDIR@"
PLYMOUTH_PLUGIN_PATH=${PLYMOUTH_LIBDIR}/plymouth/
fi
fi
function usage ()
{
echo "usage: plymouth-set-default-theme { --list | --reset | <theme-name> [ --rebuild-initrd ] | --help }"
}
function show_help() {
cat <<EOF
Plymouth theme chooser
$(usage)
-h, --help Show this help message
-l, --list Show available themes
-r. --reset Reset to default theme
-R, --rebuild-initrd Rebuild initrd (necessary after changing theme)
<theme-name> Name of new theme to use (see --list for available themes)
EOF
}
function list_themes ()
{
for theme in ${PLYMOUTH_DATADIR}/plymouth/themes/*/*.plymouth; do
[ -f $theme ] || continue;
echo "$(basename "$theme" .plymouth)"
done
}
function read_theme_name_from_file ()
{
echo $(grep -v '^#' $1 2> /dev/null |
awk '
BEGIN {
RS="[[][[:blank:]]*[^[:space:]]+[:blank:]*[]\n]";
FS="[=[:space:]]+";
OFS="";
ORS=""
}
$1 ~/Theme/ { print $2 }
')
}
function get_default_theme ()
{
THEME_NAME=$(read_theme_name_from_file ${PLYMOUTH_CONFDIR}/plymouthd.conf)
if [ -z "$THEME_NAME" -o ! -r "${PLYMOUTH_DATADIR}/plymouth/themes/$THEME_NAME/$THEME_NAME.plymouth" ]; then
THEME_NAME=$(read_theme_name_from_file ${PLYMOUTH_POLICYDIR}/plymouthd.defaults)
fi
if [ -z "$THEME_NAME" -o ! -r "${PLYMOUTH_DATADIR}/plymouth/themes/$THEME_NAME/$THEME_NAME.plymouth" \
-a -L "${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth" ]; then
THEME_NAME=$(basename "$(readlink ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth)" .plymouth)
fi
if [ -z "$THEME_NAME" -o ! -r "${PLYMOUTH_DATADIR}/plymouth/themes/$THEME_NAME/$THEME_NAME.plymouth" ]; then
THEME_NAME="text"
fi
echo $THEME_NAME
}
DO_RESET=0
DO_INITRD_REBUILD=0
DO_LIST=0
DO_HELP=0
THEME_NAME=""
while [ $# -gt 0 ]; do
case "$1" in
-l|--list)
if [ -n "$THEME_NAME" ]; then
echo "You can only specify --list or a theme name, not both" >&2
echo $(usage) >&2
exit 1
fi
if [ $DO_RESET -ne 0 ]; then
echo "You can only specify --reset or --list, not both" >&2
echo $(usage) >&2
exit 1
fi
DO_LIST=1
;;
-R|--rebuild-initrd)
DO_INITRD_REBUILD=1
;;
-r|--reset|default)
if [ -n "$THEME_NAME" ]; then
echo "You can only specify --reset or a theme name, not both" >&2
echo $(usage) >&2
exit 1
fi
if [ $DO_LIST -ne 0 ]; then
echo "You can only specify --reset or --list, not both" >&2
echo $(usage) >&2
exit 1
fi
DO_RESET=1
;;
-h|--help)
DO_HELP=1
;;
*)
if [ -n "$THEME_NAME" ]; then
echo "You can only specify one theme at a time" >&2
echo $(usage) >&2
exit 1
fi
if [ $DO_RESET -ne 0 ]; then
echo "You can only specify --reset or a theme name, not both" >&2
echo $(usage) >&2
exit 1
fi
if [ $DO_LIST -ne 0 ]; then
echo "You can only specify --list or a theme name, not both" >&2
echo $(usage) >&2
exit 1
fi
THEME_NAME="$1"
;;
esac
shift
done
if [ $DO_HELP -eq 1 ]; then
show_help
exit $?
fi
if [ $DO_LIST -ne 0 ]; then
list_themes
exit $?
fi
if [ $DO_RESET -eq 0 ] && [ $DO_INITRD_REBUILD -eq 0 ] && [ -z $THEME_NAME ]; then
get_default_theme
exit $?
fi
if [ `id -u` -ne 0 ]; then
echo "This program must be run as root" >&2
exit 1
fi
if [ $DO_RESET -ne 0 ]; then
[ -f ${PLYMOUTH_CONFDIR}/plymouthd.conf ] || exit 0
sed -i -e '/^Theme[[:blank:]]*=.*/d' ${PLYMOUTH_CONFDIR}/plymouthd.conf
exit $?
fi
if [ ! -e ${PLYMOUTH_DATADIR}/plymouth/themes/${THEME_NAME}/${THEME_NAME}.plymouth ]; then
echo "${PLYMOUTH_DATADIR}/plymouth/themes/${THEME_NAME}/${THEME_NAME}.plymouth does not exist" >&2
exit 1
fi
MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_DATADIR}/plymouth/themes/${THEME_NAME}/${THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
if [ ! -e ${PLYMOUTH_PLUGIN_PATH}${MODULE_NAME}.so ]; then
echo "${PLYMOUTH_PLUGIN_PATH}${MODULE_NAME}.so does not exist" >&2
exit 1
fi
[ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ] && rm -f ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth
[ -d ${PLYMOUTH_CONFDIR} ] || mkdir -p ${PLYMOUTH_CONFDIR}
grep -q '^[[]Daemon[]]' ${PLYMOUTH_CONFDIR}/plymouthd.conf 2> /dev/null || echo '[Daemon]' >> ${PLYMOUTH_CONFDIR}/plymouthd.conf
sed -i -e '/^Theme[[:blank:]]*=.*/d' ${PLYMOUTH_CONFDIR}/plymouthd.conf
sed -i -e "s/^\([[]Daemon[]]\)\n*/\1\nTheme=${THEME_NAME}/" ${PLYMOUTH_CONFDIR}/plymouthd.conf
[ $DO_INITRD_REBUILD -ne 0 ] && (${PLYMOUTH_LIBEXECDIR}/plymouth/plymouth-update-initrd)
exit 0