Package: console-setup Version: 1.15 Severity: wishlist Tags: patch I have found it useful to have a --save-only option to setupcon, which acts like 'setupcon --save' except that it does *not* attempt to set the keyboard or font immediately. This is useful so that you can run 'setupcon --save-only' while in X to get the keymap and font onto the root filesystem, e.g. on upgrade, and avoid triggering problems caused by some kernel console drivers (at least vgacon) being fundamentally unable to change the font only on some virtual consoles and corrupting video memory if you try.
The attached patch implements this option. Thanks, -- Colin Watson [EMAIL PROTECTED]
--- console-setup.orig/setupcon 2006-09-28 08:00:10.000000000 +0100 +++ console-setup/setupcon 2007-01-15 17:27:38.000000000 +0000 @@ -48,6 +48,11 @@ --save) save=yes ;; + --save-only) + force=yes + save=yes + save_only=yes + ;; -h|--help) cat >&2 <<EOF Usage: setupcon [OPTION] [VARIANT] @@ -59,6 +64,7 @@ -v, --verbose explain what is being doing, try it if s.t. goes wrong --save copy the font and the ACM in /etc/console-setup, update /etc/console-setup/boottime.kmap.gz + --save-only only save; don't setup keyboard/font immediately -h, --help display this help and exit If VARIANT is not specified setupcon looks for the configuration files @@ -140,10 +146,12 @@ for console in $ACTIVE_CONSOLES; do [ -w $console ] || continue # Setup unicode/non-unicode mode - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - /bin/echo -n -e '\033%G' >$console - else - /bin/echo -n -e '\033%@' >$console + if [ "$save_only" != yes ]; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + /bin/echo -n -e '\033%G' >$console + else + /bin/echo -n -e '\033%@' >$console + fi fi # Load the font @@ -194,13 +202,15 @@ ;; esac fi - if which consolechars >/dev/null; then - if [ "$bigfont" = yes ]; then - echo "setupcon: The console-chars utility from the console-setup font can load only fonts witn 8 pixel width matrix. Please install the setfont utility from the kbd package." >&2 - fi - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif which setfont >/dev/null; then - eval setfont -v -C $console "$FONT" $verbose + if [ "$save_only" != yes ]; then + if which consolechars >/dev/null; then + if [ "$bigfont" = yes ]; then + echo "setupcon: The console-chars utility from the console-setup font can load only fonts witn 8 pixel width matrix. Please install the setfont utility from the kbd package." >&2 + fi + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif which setfont >/dev/null; then + eval setfont -v -C $console "$FONT" $verbose + fi fi # Load the ACM @@ -226,7 +236,7 @@ else ACM="$CHARMAP.acm.gz" fi - if [ "$CHARMAP" != UTF-8 ]; then + if [ "$save_only" != yes ] && [ "$CHARMAP" != UTF-8 ]; then if which consolechars >/dev/null; then eval consolechars -v --tty=$console --acm "$ACM" $verbose elif which setfont >/dev/null; then @@ -247,7 +257,8 @@ # This code was borrowed from the keymap.sh script of console-common # Copyright © 2001 Yann Dirson # Copyright © 2001 Alcove http://www.alcove.fr/ - if [ -x /sbin/sysctl ] && [ -r /etc/sysctl.conf ]; then + if [ "$save_only" != yes ] && \ + [ -x /sbin/sysctl ] && [ -r /etc/sysctl.conf ]; then if grep -v '^\#' /etc/sysctl.conf | grep -q keycodes ; then grep keycodes /etc/sysctl.conf | grep -v "^#" \ | while read d ; do @@ -256,12 +267,14 @@ fi fi - if which kbd_mode >/dev/null; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u - else - kbd_mode -a - fi + if [ "$save_only" != yes ]; then + if which kbd_mode >/dev/null; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u + else + kbd_mode -a + fi + fi fi if which loadkeys >/dev/null; then @@ -271,15 +284,18 @@ else acm_option='' fi - ckbcomp $acm_option -model "$XKBMODEL" \ - "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \ - | eval loadkeys $verbose + if [ "$save_only" != yes ]; then + ckbcomp $acm_option -model "$XKBMODEL" \ + "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \ + | eval loadkeys $verbose + fi if which gzip >/dev/null && [ "$save" = yes ]; then ckbcomp $acm_option -model "$XKBMODEL" \ "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \ | gzip -9 >/etc/console-setup/boottime.kmap.gz fi - elif [ -f /etc/console-setup/boottime.kmap.gz ]; then + elif [ "$save_only" != yes ] && \ + [ -f /etc/console-setup/boottime.kmap.gz ]; then eval loadkeys /etc/console-setup/boottime.kmap.gz $verbose fi fi