syscons revision 156331
170856Sjhb#!/bin/sh - 270856Sjhb# 370856Sjhb# Copyright (c) 2000 The FreeBSD Project 470856Sjhb# All rights reserved. 570856Sjhb# 670856Sjhb# Redistribution and use in source and binary forms, with or without 770856Sjhb# modification, are permitted provided that the following conditions 870856Sjhb# are met: 970856Sjhb# 1. Redistributions of source code must retain the above copyright 1070856Sjhb# notice, this list of conditions and the following disclaimer. 1170856Sjhb# 2. Redistributions in binary form must reproduce the above copyright 1270856Sjhb# notice, this list of conditions and the following disclaimer in the 1370856Sjhb# documentation and/or other materials provided with the distribution. 1470856Sjhb# 1570856Sjhb# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1670856Sjhb# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1770856Sjhb# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1870856Sjhb# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1970856Sjhb# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2070856Sjhb# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2170856Sjhb# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2270856Sjhb# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2370856Sjhb# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2470856Sjhb# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2570856Sjhb# SUCH DAMAGE. 2670856Sjhb# 2770856Sjhb# $FreeBSD: head/etc/rc.d/syscons 156331 2006-03-06 06:38:34Z emax $ 2870856Sjhb# 2970856Sjhb 30100280Sgordon# PROVIDE: syscons 31153430Siedowse# REQUIRE: LOGIN 32136224Smtm# KEYWORD: nojail 33100280Sgordon 34100280Sgordon. /etc/rc.subr 35100280Sgordon 36100280Sgordonname="syscons" 37156331Semaxextra_commands="setkeyboard" 38156331Semaxsetkeyboard_cmd="syscons_setkeyboard" 39102993Sfennerstart_precmd="syscons_precmd" 40102993Sfennerstart_cmd="syscons_start" 41100280Sgordon 4270856Sjhb# stdin must be redirected because it might be for a serial console 4370856Sjhb# 4470856Sjhbkbddev=/dev/ttyv0 4570856Sjhbviddev=/dev/ttyv0 4670856Sjhb 47156331Semaxsyscons_setkeyboard() 48156331Semax{ 49156331Semax kbd=$1 50156331Semax 51156331Semax if [ -z "${kbd}" ]; then 52156331Semax return 1 53156331Semax fi 54156331Semax 55156331Semax # Check if the kbdmux(4) is the current active keyboard 56156331Semax kbdcontrol -i < ${kbddev} | grep kbdmux > /dev/null 2>&1 57156331Semax if [ $? != 0 ]; then 58156331Semax kbdcontrol -k ${kbd} < ${kbddev} > /dev/null 2>&1 59156331Semax fi 60156331Semax} 61156331Semax 62102993Sfennersyscons_precmd() 63102993Sfenner{ 64123390Speter if [ ! -c $kbddev ] 65102993Sfenner then 66123390Speter return 1 67102993Sfenner fi 68123390Speter if [ -x /usr/sbin/ispcvt ] && /usr/sbin/ispcvt 69123390Speter then 70123390Speter return 1 71123390Speter fi 72123390Speter return 0 73102993Sfenner} 7470856Sjhb 75102993Sfennersyscons_start() 76102993Sfenner{ 77102993Sfenner echo -n 'Configuring syscons:' 7870856Sjhb 79130699Sgreen # keyboard 80130699Sgreen # 81130699Sgreen if [ -n "${keyboard}" ]; then 82156331Semax echo -n ' keyboard'; syscons_setkeyboard ${keyboard} 83130699Sgreen fi 84130699Sgreen 85102993Sfenner # keymap 86102993Sfenner # 87102993Sfenner case ${keymap} in 88102993Sfenner [Nn][Oo] | '') 89102993Sfenner ;; 90102993Sfenner *) 91102993Sfenner echo -n ' keymap'; kbdcontrol < ${kbddev} -l ${keymap} 92102993Sfenner ;; 93102993Sfenner esac 9470856Sjhb 95102993Sfenner # keyrate 96102993Sfenner # 97102993Sfenner case ${keyrate} in 98102993Sfenner [Nn][Oo] | '') 99102993Sfenner ;; 100102993Sfenner *) 101102993Sfenner echo -n ' keyrate'; kbdcontrol < ${kbddev} -r ${keyrate} 102102993Sfenner ;; 103102993Sfenner esac 10470856Sjhb 105102993Sfenner # keybell 106102993Sfenner # 107102993Sfenner case ${keybell} in 108102993Sfenner [Nn][Oo] | '') 109102993Sfenner ;; 110102993Sfenner *) 111102993Sfenner echo -n ' keybell'; kbdcontrol < ${kbddev} -b ${keybell} 112102993Sfenner ;; 113102993Sfenner esac 11470856Sjhb 115102993Sfenner # change function keys 116102993Sfenner # 117102993Sfenner case ${keychange} in 118102993Sfenner [Nn][Oo] | '') 119102993Sfenner ;; 120102993Sfenner *) 121102993Sfenner echo -n ' keychange' 122102993Sfenner set - ${keychange} 123102993Sfenner while [ $# -gt 0 ]; do 124102993Sfenner kbdcontrol <${kbddev} -f "$1" "$2" 125102993Sfenner shift; shift 126102993Sfenner done 127102993Sfenner ;; 128102993Sfenner esac 12970856Sjhb 130102993Sfenner # cursor type 131102993Sfenner # 132102993Sfenner case ${cursor} in 133102993Sfenner [Nn][Oo] | '') 134102993Sfenner ;; 135102993Sfenner *) 136102993Sfenner echo -n ' cursor'; vidcontrol < ${viddev} -c ${cursor} 137102993Sfenner ;; 138102993Sfenner esac 13970856Sjhb 140102993Sfenner # screen mapping 141102993Sfenner # 142102993Sfenner case ${scrnmap} in 143102993Sfenner [Nn][Oo] | '') 144102993Sfenner ;; 145102993Sfenner *) 146102993Sfenner echo -n ' scrnmap'; vidcontrol < ${viddev} -l ${scrnmap} 147102993Sfenner ;; 148102993Sfenner esac 14970856Sjhb 150102993Sfenner # font 8x16 151102993Sfenner # 152102993Sfenner case ${font8x16} in 153102993Sfenner [Nn][Oo] | '') 154102993Sfenner ;; 155102993Sfenner *) 156102993Sfenner echo -n ' font8x16'; vidcontrol < ${viddev} -f 8x16 ${font8x16} 157102993Sfenner ;; 158102993Sfenner esac 15970856Sjhb 160102993Sfenner # font 8x14 161102993Sfenner # 162102993Sfenner case ${font8x14} in 163102993Sfenner [Nn][Oo] | '') 164102993Sfenner ;; 165102993Sfenner *) 166102993Sfenner echo -n ' font8x14'; vidcontrol < ${viddev} -f 8x14 ${font8x14} 167102993Sfenner ;; 168102993Sfenner esac 16970856Sjhb 170102993Sfenner # font 8x8 171102993Sfenner # 172102993Sfenner case ${font8x8} in 173102993Sfenner [Nn][Oo] | '') 174102993Sfenner ;; 175102993Sfenner *) 176102993Sfenner echo -n ' font8x8'; vidcontrol < ${viddev} -f 8x8 ${font8x8} 177102993Sfenner ;; 178102993Sfenner esac 17970856Sjhb 180102993Sfenner # blank time 181102993Sfenner # 182102993Sfenner case ${blanktime} in 183102993Sfenner [Nn][Oo] | '') 184102993Sfenner ;; 185102993Sfenner *) 186102993Sfenner echo -n ' blanktime'; vidcontrol < ${viddev} -t ${blanktime} 187102993Sfenner ;; 188102993Sfenner esac 18970856Sjhb 190102993Sfenner # screen saver 191102993Sfenner # 192102993Sfenner case ${saver} in 193102993Sfenner [Nn][Oo] | '') 194102993Sfenner ;; 195102993Sfenner *) 196102993Sfenner echo -n ' screensaver' 197102993Sfenner for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do 198102993Sfenner kldunload ${i} 199102993Sfenner done 200102993Sfenner kldstat -v | grep -q _saver || kldload ${saver}_saver 201102993Sfenner ;; 202102993Sfenner esac 20370856Sjhb 204102993Sfenner # set this mode for all virtual screens 205102993Sfenner # 206102993Sfenner if [ -n "${allscreens_flags}" ]; then 207102993Sfenner echo -n ' allscreens' 208102993Sfenner for ttyv in /dev/ttyv*; do 209102993Sfenner vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1 210102993Sfenner done 211102993Sfenner fi 212100284Sdougb 213102993Sfenner # set this keyboard mode for all virtual terminals 214102993Sfenner # 215102993Sfenner if [ -n "${allscreens_kbdflags}" ]; then 216102993Sfenner echo -n ' allscreens_kbd' 217102993Sfenner for ttyv in /dev/ttyv*; do 218102993Sfenner kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1 219102993Sfenner done 220102993Sfenner fi 221102993Sfenner 222102993Sfenner echo '.' 223102993Sfenner} 224103161Sgordon 225103161Sgordonload_rc_config $name 226156331Semaxrun_rc_command $* 227156331Semax 228