syscons revision 156782
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 156782 2006-03-16 17:42:28Z emax $ 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 if [ -x /usr/sbin/ispcvt ] && /usr/sbin/ispcvt 131 then 132 return 1 133 fi 134 return 0 135} 136 137syscons_start() 138{ 139 echo -n 'Configuring syscons:' 140 141 # keyboard 142 # 143 if [ -n "${keyboard}" ]; then 144 echo -n ' keyboard'; syscons_setkeyboard ${keyboard} 145 fi 146 147 syscons_configure_keyboard 148 149 # cursor type 150 # 151 case ${cursor} in 152 [Nn][Oo] | '') 153 ;; 154 *) 155 echo -n ' cursor'; vidcontrol < ${viddev} -c ${cursor} 156 ;; 157 esac 158 159 # screen mapping 160 # 161 case ${scrnmap} in 162 [Nn][Oo] | '') 163 ;; 164 *) 165 echo -n ' scrnmap'; vidcontrol < ${viddev} -l ${scrnmap} 166 ;; 167 esac 168 169 # font 8x16 170 # 171 case ${font8x16} in 172 [Nn][Oo] | '') 173 ;; 174 *) 175 echo -n ' font8x16'; vidcontrol < ${viddev} -f 8x16 ${font8x16} 176 ;; 177 esac 178 179 # font 8x14 180 # 181 case ${font8x14} in 182 [Nn][Oo] | '') 183 ;; 184 *) 185 echo -n ' font8x14'; vidcontrol < ${viddev} -f 8x14 ${font8x14} 186 ;; 187 esac 188 189 # font 8x8 190 # 191 case ${font8x8} in 192 [Nn][Oo] | '') 193 ;; 194 *) 195 echo -n ' font8x8'; vidcontrol < ${viddev} -f 8x8 ${font8x8} 196 ;; 197 esac 198 199 # blank time 200 # 201 case ${blanktime} in 202 [Nn][Oo] | '') 203 ;; 204 *) 205 echo -n ' blanktime'; vidcontrol < ${viddev} -t ${blanktime} 206 ;; 207 esac 208 209 # screen saver 210 # 211 case ${saver} in 212 [Nn][Oo] | '') 213 ;; 214 *) 215 echo -n ' screensaver' 216 for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do 217 kldunload ${i} 218 done 219 kldstat -v | grep -q _saver || kldload ${saver}_saver 220 ;; 221 esac 222 223 # set this mode for all virtual screens 224 # 225 if [ -n "${allscreens_flags}" ]; then 226 echo -n ' allscreens' 227 for ttyv in /dev/ttyv*; do 228 vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1 229 done 230 fi 231 232 echo '.' 233} 234 235load_rc_config $name 236run_rc_command $* 237 238