syscons revision 158687
1#!/bin/sh - 2# 3# Copyright (c) 2000 The FreeBSD Project 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# $FreeBSD: head/etc/rc.d/syscons 158687 2006-05-17 09:33:15Z phk $ 28# 29 30# PROVIDE: syscons 31# REQUIRE: LOGIN 32# KEYWORD: nojail 33 34. /etc/rc.subr 35 36name="syscons" 37extra_commands="setkeyboard" 38setkeyboard_cmd="syscons_setkeyboard" 39start_precmd="syscons_precmd" 40start_cmd="syscons_start" 41 42# stdin must be redirected because it might be for a serial console 43# 44kbddev=/dev/ttyv0 45viddev=/dev/ttyv0 46 47# helper 48syscons_configure_keyboard() 49{ 50 # keymap 51 # 52 case ${keymap} in 53 [Nn][Oo] | '') 54 ;; 55 *) 56 echo -n ' keymap'; kbdcontrol < ${kbddev} -l ${keymap} 57 ;; 58 esac 59 60 # keyrate 61 # 62 case ${keyrate} in 63 [Nn][Oo] | '') 64 ;; 65 *) 66 echo -n ' keyrate'; kbdcontrol < ${kbddev} -r ${keyrate} 67 ;; 68 esac 69 70 # keybell 71 # 72 case ${keybell} in 73 [Nn][Oo] | '') 74 ;; 75 *) 76 echo -n ' keybell'; kbdcontrol < ${kbddev} -b ${keybell} 77 ;; 78 esac 79 80 # change function keys 81 # 82 case ${keychange} in 83 [Nn][Oo] | '') 84 ;; 85 *) 86 echo -n ' keychange' 87 set - ${keychange} 88 while [ $# -gt 0 ]; do 89 kbdcontrol <${kbddev} -f "$1" "$2" 90 shift; shift 91 done 92 ;; 93 esac 94 95 # set this keyboard mode for all virtual terminals 96 # 97 if [ -n "${allscreens_kbdflags}" ]; then 98 echo -n ' allscreens_kbd' 99 for ttyv in /dev/ttyv*; do 100 kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1 101 done 102 fi 103} 104 105syscons_setkeyboard() 106{ 107 kbd=$1 108 109 if [ -z "${kbd}" ]; then 110 return 1 111 fi 112 113 # Check if the kbdmux(4) is the current active keyboard 114 kbdcontrol -i < ${kbddev} | grep kbdmux > /dev/null 2>&1 115 if [ $? != 0 ]; then 116 kbdcontrol -k ${kbd} < ${kbddev} > /dev/null 2>&1 117 fi 118 119 echo -n 'Configuring keyboard:' 120 syscons_configure_keyboard 121 echo '.' 122} 123 124syscons_precmd() 125{ 126 if [ ! -c $kbddev ] 127 then 128 return 1 129 fi 130 return 0 131} 132 133syscons_start() 134{ 135 echo -n 'Configuring syscons:' 136 137 # keyboard 138 # 139 if [ -n "${keyboard}" ]; then 140 echo -n ' keyboard'; syscons_setkeyboard ${keyboard} 141 fi 142 143 syscons_configure_keyboard 144 145 # cursor type 146 # 147 case ${cursor} in 148 [Nn][Oo] | '') 149 ;; 150 *) 151 echo -n ' cursor'; vidcontrol < ${viddev} -c ${cursor} 152 ;; 153 esac 154 155 # screen mapping 156 # 157 case ${scrnmap} in 158 [Nn][Oo] | '') 159 ;; 160 *) 161 echo -n ' scrnmap'; vidcontrol < ${viddev} -l ${scrnmap} 162 ;; 163 esac 164 165 # font 8x16 166 # 167 case ${font8x16} in 168 [Nn][Oo] | '') 169 ;; 170 *) 171 echo -n ' font8x16'; vidcontrol < ${viddev} -f 8x16 ${font8x16} 172 ;; 173 esac 174 175 # font 8x14 176 # 177 case ${font8x14} in 178 [Nn][Oo] | '') 179 ;; 180 *) 181 echo -n ' font8x14'; vidcontrol < ${viddev} -f 8x14 ${font8x14} 182 ;; 183 esac 184 185 # font 8x8 186 # 187 case ${font8x8} in 188 [Nn][Oo] | '') 189 ;; 190 *) 191 echo -n ' font8x8'; vidcontrol < ${viddev} -f 8x8 ${font8x8} 192 ;; 193 esac 194 195 # blank time 196 # 197 case ${blanktime} in 198 [Nn][Oo] | '') 199 ;; 200 *) 201 echo -n ' blanktime'; vidcontrol < ${viddev} -t ${blanktime} 202 ;; 203 esac 204 205 # screen saver 206 # 207 case ${saver} in 208 [Nn][Oo] | '') 209 ;; 210 *) 211 echo -n ' screensaver' 212 for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do 213 kldunload ${i} 214 done 215 kldstat -v | grep -q _saver || kldload ${saver}_saver 216 ;; 217 esac 218 219 # set this mode for all virtual screens 220 # 221 if [ -n "${allscreens_flags}" ]; then 222 echo -n ' allscreens' 223 for ttyv in /dev/ttyv*; do 224 vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1 225 done 226 fi 227 228 echo '.' 229} 230 231load_rc_config $name 232run_rc_command $* 233 234