syscons revision 167889
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 167889 2007-03-25 23:58:46Z brooks $ 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" 41stop_cmd=":" 42 43# stdin must be redirected because it might be for a serial console 44# 45kbddev=/dev/ttyv0 46viddev=/dev/ttyv0 47 48# helper 49syscons_configure_keyboard() 50{ 51 # keymap 52 # 53 case ${keymap} in 54 [Nn][Oo] | '') 55 ;; 56 *) 57 echo -n ' keymap'; kbdcontrol < ${kbddev} -l ${keymap} 58 ;; 59 esac 60 61 # keyrate 62 # 63 case ${keyrate} in 64 [Nn][Oo] | '') 65 ;; 66 *) 67 echo -n ' keyrate'; kbdcontrol < ${kbddev} -r ${keyrate} 68 ;; 69 esac 70 71 # keybell 72 # 73 case ${keybell} in 74 [Nn][Oo] | '') 75 ;; 76 *) 77 echo -n ' keybell'; kbdcontrol < ${kbddev} -b ${keybell} 78 ;; 79 esac 80 81 # change function keys 82 # 83 case ${keychange} in 84 [Nn][Oo] | '') 85 ;; 86 *) 87 echo -n ' keychange' 88 set - ${keychange} 89 while [ $# -gt 0 ]; do 90 kbdcontrol <${kbddev} -f "$1" "$2" 91 shift; shift 92 done 93 ;; 94 esac 95 96 # set this keyboard mode for all virtual terminals 97 # 98 if [ -n "${allscreens_kbdflags}" ]; then 99 echo -n ' allscreens_kbd' 100 for ttyv in /dev/ttyv*; do 101 kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1 102 done 103 fi 104} 105 106syscons_setkeyboard() 107{ 108 kbd=$1 109 110 if [ -z "${kbd}" ]; then 111 return 1 112 fi 113 114 # Check if the kbdmux(4) is the current active keyboard 115 kbdcontrol -i < ${kbddev} | grep kbdmux > /dev/null 2>&1 116 if [ $? -ne 0 ]; then 117 kbdcontrol -k ${kbd} < ${kbddev} > /dev/null 2>&1 118 fi 119 120 echo -n 'Configuring keyboard:' 121 syscons_configure_keyboard 122 echo '.' 123} 124 125syscons_precmd() 126{ 127 if [ ! -c $kbddev ] 128 then 129 return 1 130 fi 131 return 0 132} 133 134syscons_start() 135{ 136 echo -n 'Configuring syscons:' 137 138 # keyboard 139 # 140 if [ -n "${keyboard}" ]; then 141 echo -n ' keyboard'; syscons_setkeyboard ${keyboard} 142 fi 143 144 syscons_configure_keyboard 145 146 # cursor type 147 # 148 case ${cursor} in 149 [Nn][Oo] | '') 150 ;; 151 *) 152 echo -n ' cursor'; vidcontrol < ${viddev} -c ${cursor} 153 ;; 154 esac 155 156 # screen mapping 157 # 158 case ${scrnmap} in 159 [Nn][Oo] | '') 160 ;; 161 *) 162 echo -n ' scrnmap'; vidcontrol < ${viddev} -l ${scrnmap} 163 ;; 164 esac 165 166 # font 8x16 167 # 168 case ${font8x16} in 169 [Nn][Oo] | '') 170 ;; 171 *) 172 echo -n ' font8x16'; vidcontrol < ${viddev} -f 8x16 ${font8x16} 173 ;; 174 esac 175 176 # font 8x14 177 # 178 case ${font8x14} in 179 [Nn][Oo] | '') 180 ;; 181 *) 182 echo -n ' font8x14'; vidcontrol < ${viddev} -f 8x14 ${font8x14} 183 ;; 184 esac 185 186 # font 8x8 187 # 188 case ${font8x8} in 189 [Nn][Oo] | '') 190 ;; 191 *) 192 echo -n ' font8x8'; vidcontrol < ${viddev} -f 8x8 ${font8x8} 193 ;; 194 esac 195 196 # blank time 197 # 198 case ${blanktime} in 199 [Nn][Oo] | '') 200 ;; 201 *) 202 echo -n ' blanktime'; vidcontrol < ${viddev} -t ${blanktime} 203 ;; 204 esac 205 206 # screen saver 207 # 208 case ${saver} in 209 [Nn][Oo] | '') 210 ;; 211 *) 212 echo -n ' screensaver' 213 for i in `kldstat | awk '$5 ~ "_saver\.ko$" { print $5 }'`; do 214 kldunload ${i} 215 done 216 load_kld -e _saver ${saver}_saver 217 ;; 218 esac 219 220 # set this mode for all virtual screens 221 # 222 if [ -n "${allscreens_flags}" ]; then 223 echo -n ' allscreens' 224 for ttyv in /dev/ttyv*; do 225 vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1 226 done 227 fi 228 229 echo '.' 230} 231 232load_rc_config $name 233run_rc_command $* 234 235