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