[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#575431: plymouth: Plymouth seems to hang when console-setup is called during boot



On Sat, Mar 27, 2010 at 11:49:34AM +0200, Anton Zinoviev wrote:
> On Sat, Mar 27, 2010 at 08:48:17AM +0100, Daniel Baumann wrote:

> > reassigning, hopefully the initscript can be fixed/updated/changed
> > in keyboard-configuration.

> There is nothing wrong in the script.  It does what it is supposed to do 
> - it sets the console.  Apparently loading a font on the console is 
> incompatible with graphical boot screens.  Console-setup has some checks 
> disabling it when splashy or usplash are active and now plymouth is a 
> third case.

Colin Watson has worked through the console-setup and plymouth
incompatibilites in Ubuntu; the work won't directly apply because the
implementation depends on upstart (splitting the init script into an upstart
job + a udev rule), but perhaps the comments in the udev helper will be
useful to you:

 # We have to do several basic things here, each of which has specific state
 # requirements:
 #
 # 1) Set Unicode/non-Unicode mode on each virtual console.
 #
 #    The terminal line emulation on the virtual console must not be in raw
 #    mode (as in cfmakeraw).
 #
 # 2) Set the font and ACM on each virtual console.
 #
 #    The virtual console must not be in KD_GRAPHICS mode.  If using vgacon,
 #    the *foreground* virtual console must not be in KD_GRAPHICS mode either
 #    as then we'll corrupt video memory.
 #
 # 3) Set the keyboard mode on each virtual console to K_XLATE or K_UNICODE
 #    as appropriate.
 #    
 #    The virtual console must not be in K_RAW or K_MEDIUMRAW mode.
 #
 # We don't have to set the console keymap here.  This only needs to be done
 # once after setting the keyboard mode, so it belongs in an Upstart job
 # instead.

The full udev rule and helper are attached for reference.

(OTOH, I'm not sure we ever saw the described hang in Ubuntu - my
understanding is the fonts would simply fail to be set.  Perhaps this is
actually caused by the version of plymouth in experimental being
significantly out of date.)

Cheers,
-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                    http://www.debian.org/
slangasek@ubuntu.com                                     vorlon@debian.org
#! /bin/sh
set -e
# Based on setupcon, but stripped down for use in a udev rule.

# We have to do several basic things here, each of which has specific state
# requirements:
#
# 1) Set Unicode/non-Unicode mode on each virtual console.
#
#    The terminal line emulation on the virtual console must not be in raw
#    mode (as in cfmakeraw).
#
# 2) Set the font and ACM on each virtual console.
#
#    The virtual console must not be in KD_GRAPHICS mode.  If using vgacon,
#    the *foreground* virtual console must not be in KD_GRAPHICS mode either
#    as then we'll corrupt video memory.
#
# 3) Set the keyboard mode on each virtual console to K_XLATE or K_UNICODE
#    as appropriate.
#    
#    The virtual console must not be in K_RAW or K_MEDIUMRAW mode.
#
# We don't have to set the console keymap here.  This only needs to be done
# once after setting the keyboard mode, so it belongs in an Upstart job
# instead.

export PATH="/bin:/sbin:$PATH"

. /etc/default/console-setup

setup_unicode () {
    # Set up Unicode/non-Unicode mode.
    # TODO: this will probably break something if terminal line emulation is
    # in raw mode.
    if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then
	printf '\033%%G' >"$1"
    else
	printf '\033%%@' >"$1"
    fi
}

setup_font () {
    # Set the font and ACM.  setfont will silently do nothing for a console
    # in graphics mode.
    SETFONT_ARGS=
    if [ "$FONT" ]; then
	FONT="/etc/console-setup/${FONT##*/}"
	FONT="${FONT%.gz}"
    else
	FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf"
    fi
    if [ -f "$FONT" ]; then
	SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }$FONT"
    fi
    if [ "$ACM" ]; then
	ACM="/etc/console-setup/${ACM##*/}"
	ACM="${ACM%.gz}"
    else
	ACM="/etc/console-setup/$CHARMAP.acm"
    fi
    if [ -f "$ACM" ]; then
	SETFONT_ARGS="${SETFONT_ARGS:+$SETFONT_ARGS }-m $ACM"
    fi
    if [ "$SETFONT_ARGS" ]; then
	setfont -C "$1" $SETFONT_ARGS
    fi
}

setup_keyboard_mode () {
    # Set the keyboard mode.
    # TODO: this will probably break something if the console is in K_RAW or
    # K_MEDIUMRAW mode.  There doesn't seem to be a non-racy way to say "set
    # to K_UNICODE only if currently K_XLATE".
    if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then
	kbd_mode -u <"$1"
    else
	kbd_mode -a <"$1"
    fi
}

if [ "$1" = fbcon ]; then
    # Technically we have to wait for /dev/tty[1-6] to appear; but these are
    # created in vty_init, so I think it will always be early enough.  If
    # I'm wrong, then the -w test will fail and we end up with the wrong
    # fonts on some virtual consoles; the user can run setupcon to fix it.
    for console in $ACTIVE_CONSOLES; do
	if [ -w "$console" ]; then
	    setup_font "$console"
	fi
    done
else
    if [ -w "$1" ]; then
	setup_unicode "$1"
	setup_font "$1"
	setup_keyboard_mode "$1"
    fi
fi

exit 0
# Set up a single virtual console.
SUBSYSTEM=="tty", KERNEL=="tty[1-6]", RUN+="console-setup-tty /dev/%k"

# Framebuffer console created.  Set up the font on all virtual consoles
# again.  This races with Plymouth if fbcon is built into the kernel; but
# the worst case should simply be that fonts don't get set up properly.
SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="console-setup-tty fbcon"

Attachment: signature.asc
Description: Digital signature


Reply to: