1139969Simp#!/bin/sh - 22862Swollman# 32862Swollman# Copyright (c) 2000 The FreeBSD Project 42862Swollman# All rights reserved. 52862Swollman# 62862Swollman# Redistribution and use in source and binary forms, with or without 72862Swollman# modification, are permitted provided that the following conditions 82862Swollman# are met: 92862Swollman# 1. Redistributions of source code must retain the above copyright 102862Swollman# notice, this list of conditions and the following disclaimer. 112862Swollman# 2. Redistributions in binary form must reproduce the above copyright 122862Swollman# notice, this list of conditions and the following disclaimer in the 132862Swollman# documentation and/or other materials provided with the distribution. 142862Swollman# 152862Swollman# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 162862Swollman# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 172862Swollman# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 182862Swollman# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 192862Swollman# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 202862Swollman# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 212862Swollman# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 222862Swollman# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 232862Swollman# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 242862Swollman# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 252862Swollman# SUCH DAMAGE. 262862Swollman# 272862Swollman# $FreeBSD$ 282862Swollman# 292862Swollman 30114433Sobrien# PROVIDE: syscons 312862Swollman# REQUIRE: LOGIN 3220420Ssteve# KEYWORD: nojail 332862Swollman 342862Swollman. /etc/rc.subr 352862Swollman 362862Swollmanname="syscons" 372862Swollmanextra_commands="setkeyboard" 3820420Sstevesetkeyboard_cmd="syscons_setkeyboard" 39114433Sobrienstart_precmd="syscons_precmd" 4036009Scharnierstart_cmd="syscons_start" 4199109Sobrienstop_cmd=":" 4299109Sobrien 432862Swollman# stdin must be redirected because it might be for a serial console 442862Swollman# 452862Swollmankbddev=/dev/ttyv0 462862Swollmanviddev=/dev/ttyv0 472862Swollman 482862Swollman_sc_config="syscons" 492862Swollman_sc_initdone= 502862Swollmansc_init() 512862Swollman{ 5290108Simp if [ -z "${_sc_initdone}" ]; then 5326402Scharnier echo -n "Configuring ${_sc_config}:" 542862Swollman _sc_initdone=yes 5590108Simp fi 562862Swollman} 5726402Scharnier 587165Sjoerg# helper 592862Swollmansyscons_configure_keyboard() 6026402Scharnier{ 6126402Scharnier # keymap 6291080Smarkm # 6391080Smarkm case ${keymap} in 6426402Scharnier [Nn][Oo] | '') 6526402Scharnier ;; 6626402Scharnier *) 6726402Scharnier sc_init 6826402Scharnier echo -n ' keymap'; kbdcontrol < ${kbddev} -l ${keymap} 692862Swollman ;; 7026402Scharnier esac 7126402Scharnier 7226402Scharnier # keyrate 732862Swollman # 7476874Skris case ${keyrate} in 752862Swollman [Nn][Oo] | '') 762862Swollman ;; 7776874Skris *) 782862Swollman sc_init 792862Swollman echo -n ' keyrate'; kbdcontrol < ${kbddev} -r ${keyrate} 802862Swollman ;; 812862Swollman esac 822862Swollman 8326402Scharnier # keybell 8490108Simp # 8590108Simp case ${keybell} in 8626402Scharnier [Nn][Oo] | '') 8726434Scharnier ;; 8826402Scharnier *) 8926402Scharnier sc_init 90 echo -n ' keybell'; kbdcontrol < ${kbddev} -b ${keybell} 91 ;; 92 esac 93 94 # change function keys 95 # 96 case ${keychange} in 97 [Nn][Oo] | '') 98 ;; 99 *) 100 sc_init 101 echo -n ' keychange' 102 set - ${keychange} 103 while [ $# -gt 0 ]; do 104 kbdcontrol <${kbddev} -f "$1" "$2" 105 shift; shift 106 done 107 ;; 108 esac 109 110 # set this keyboard mode for all virtual terminals 111 # 112 if [ -n "${allscreens_kbdflags}" ]; then 113 sc_init 114 echo -n ' allscreens_kbd' 115 for ttyv in /dev/ttyv*; do 116 kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1 117 done 118 fi 119} 120 121syscons_setkeyboard() 122{ 123 kbd=$1 124 125 if [ -z "${kbd}" ]; then 126 return 1 127 fi 128 129 # Check if the kbdmux(4) is the current active keyboard 130 kbdcontrol -i < ${kbddev} | grep kbdmux > /dev/null 2>&1 131 if [ $? -ne 0 ]; then 132 kbdcontrol -k ${kbd} < ${kbddev} > /dev/null 2>&1 133 fi 134 135 _sc_config="keyboard" 136 syscons_configure_keyboard 137 138 # Terminate keyboard configuration line and reset global variables. 139 # 140 if [ -n "${_sc_initdone}" ]; then 141 echo '.' 142 _sc_config="syscons" 143 _sc_initdone= 144 fi 145 146} 147 148syscons_precmd() 149{ 150 if [ ! -c $kbddev ] 151 then 152 return 1 153 fi 154 return 0 155} 156 157syscons_start() 158{ 159 # keyboard 160 # 161 if [ -n "${keyboard}" ]; then 162 syscons_setkeyboard ${keyboard} 163 fi 164 165 syscons_configure_keyboard 166 167 # cursor type 168 # 169 case ${cursor} in 170 [Nn][Oo] | '') 171 ;; 172 *) 173 sc_init 174 echo -n ' cursor'; vidcontrol < ${viddev} -c ${cursor} 175 ;; 176 esac 177 178 # screen mapping 179 # 180 case ${scrnmap} in 181 [Nn][Oo] | '') 182 ;; 183 *) 184 sc_init 185 echo -n ' scrnmap'; vidcontrol < ${viddev} -l ${scrnmap} 186 ;; 187 esac 188 189 # font 8x16 190 # 191 case ${font8x16} in 192 [Nn][Oo] | '') 193 ;; 194 *) 195 sc_init 196 echo -n ' font8x16'; vidcontrol < ${viddev} -f 8x16 ${font8x16} 197 ;; 198 esac 199 200 # font 8x14 201 # 202 case ${font8x14} in 203 [Nn][Oo] | '') 204 ;; 205 *) 206 sc_init 207 echo -n ' font8x14'; vidcontrol < ${viddev} -f 8x14 ${font8x14} 208 ;; 209 esac 210 211 # font 8x8 212 # 213 case ${font8x8} in 214 [Nn][Oo] | '') 215 ;; 216 *) 217 sc_init 218 echo -n ' font8x8'; vidcontrol < ${viddev} -f 8x8 ${font8x8} 219 ;; 220 esac 221 222 # blank time 223 # 224 case ${blanktime} in 225 [Nn][Oo] | '') 226 ;; 227 *) 228 sc_init 229 echo -n ' blanktime'; vidcontrol < ${viddev} -t ${blanktime} 230 ;; 231 esac 232 233 # screen saver 234 # 235 case ${saver} in 236 [Nn][Oo] | '') 237 ;; 238 *) 239 sc_init 240 echo -n ' screensaver' 241 for i in `kldstat | awk '$5 ~ "_saver\.ko$" { print $5 }'`; do 242 kldunload ${i} 243 done 244 load_kld -e _saver ${saver}_saver 245 ;; 246 esac 247 248 # set this mode for all virtual screens 249 # 250 if [ -n "${allscreens_flags}" ]; then 251 sc_init 252 echo -n ' allscreens' 253 for ttyv in /dev/ttyv*; do 254 vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1 255 done 256 fi 257 258 [ -n "${_sc_initdone}" ] && echo '.' 259} 260 261load_rc_config $name 262run_rc_command $* 263 264