#!/bin/bash set -e [ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="/usr/libexec" [ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="/usr/share" [ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="/etc/plymouth/" [ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="/usr/share/plymouth/" if [ -z "$PLYMOUTH_PLUGIN_PATH" ]; then if [ -z "$LIB" ]; then PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)" else [ -z "$PLYMOUTH_LIBDIR" ] && PLYMOUTH_LIBDIR="/usr/lib" PLYMOUTH_PLUGIN_PATH=${PLYMOUTH_LIBDIR}/plymouth/ fi fi function usage () { echo "usage: plymouth-set-default-theme { --list | --reset | [ --rebuild-initrd ] | --help }" } function show_help() { cat < 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" > /dev/stderr echo $(usage) > /dev/stderr exit 1 fi if [ $DO_RESET -ne 0 ]; then echo "You can only specify --reset or --list, not both" > /dev/stderr echo $(usage) > /dev/stderr 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" > /dev/stderr echo $(usage) > /dev/stderr exit 1 fi if [ $DO_LIST -ne 0 ]; then echo "You can only specify --reset or --list, not both" > /dev/stderr echo $(usage) > /dev/stderr 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" > /dev/stderr echo $(usage) > /dev/stderr exit 1 fi if [ $DO_RESET -ne 0 ]; then echo "You can only specify --reset or a theme name, not both" > /dev/stderr echo $(usage) > /dev/stderr exit 1 fi if [ $DO_LIST -ne 0 ]; then echo "You can only specify --list or a theme name, not both" > /dev/stderr echo $(usage) > /dev/stderr 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" > /dev/stderr 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" > /dev/stderr 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" > /dev/stderr 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