syscons revision 136224
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 136224 2004-10-07 13:55:26Z mtm $
2870856Sjhb#
2970856Sjhb
30100280Sgordon# PROVIDE: syscons
31100280Sgordon# REQUIRE: LOGIN usbd
32136224Smtm# KEYWORD: nojail
33100280Sgordon
34100280Sgordon. /etc/rc.subr
35100280Sgordon
36100280Sgordonname="syscons"
37102993Sfennerstart_precmd="syscons_precmd"
38102993Sfennerstart_cmd="syscons_start"
39100280Sgordon
4070856Sjhb# stdin must be redirected because it might be for a serial console
4170856Sjhb#
4270856Sjhbkbddev=/dev/ttyv0
4370856Sjhbviddev=/dev/ttyv0
4470856Sjhb
45102993Sfennersyscons_precmd()
46102993Sfenner{
47123390Speter	if [ ! -c $kbddev ]
48102993Sfenner	then
49123390Speter		return 1
50102993Sfenner	fi
51123390Speter	if [ -x /usr/sbin/ispcvt ] && /usr/sbin/ispcvt
52123390Speter	then
53123390Speter		return 1
54123390Speter	fi
55123390Speter	return 0
56102993Sfenner}
5770856Sjhb
58102993Sfennersyscons_start()
59102993Sfenner{
60102993Sfenner	echo -n 'Configuring syscons:'
6170856Sjhb
62130699Sgreen	# keyboard
63130699Sgreen	#
64130699Sgreen	if [ -n "${keyboard}" ]; then
65130699Sgreen		echo -n ' keyboard';	kbdcontrol < ${kbddev} \
66130699Sgreen		    -k "${keyboard}" >/dev/null
67130699Sgreen	fi
68130699Sgreen
69102993Sfenner	# keymap
70102993Sfenner	#
71102993Sfenner	case ${keymap} in
72102993Sfenner	[Nn][Oo] | '')
73102993Sfenner		;;
74102993Sfenner	*)
75102993Sfenner		echo -n ' keymap';	kbdcontrol < ${kbddev} -l ${keymap}
76102993Sfenner		;;
77102993Sfenner	esac
7870856Sjhb
79102993Sfenner	# keyrate
80102993Sfenner	#
81102993Sfenner	case ${keyrate} in
82102993Sfenner	[Nn][Oo] | '')
83102993Sfenner		;;
84102993Sfenner	*)
85102993Sfenner		echo -n ' keyrate';	kbdcontrol < ${kbddev} -r ${keyrate}
86102993Sfenner		;;
87102993Sfenner	esac
8870856Sjhb
89102993Sfenner	# keybell
90102993Sfenner	#
91102993Sfenner	case ${keybell} in
92102993Sfenner	[Nn][Oo] | '')
93102993Sfenner		;;
94102993Sfenner	*)
95102993Sfenner		echo -n ' keybell';	kbdcontrol < ${kbddev} -b ${keybell}
96102993Sfenner		;;
97102993Sfenner	esac
9870856Sjhb
99102993Sfenner	# change function keys
100102993Sfenner	#
101102993Sfenner	case ${keychange} in
102102993Sfenner	[Nn][Oo] | '')
103102993Sfenner		;;
104102993Sfenner	*)
105102993Sfenner		echo -n ' keychange'
106102993Sfenner		set - ${keychange}
107102993Sfenner		while [ $# -gt 0 ]; do
108102993Sfenner			kbdcontrol <${kbddev} -f "$1" "$2"
109102993Sfenner			shift; shift
110102993Sfenner		done
111102993Sfenner		;;
112102993Sfenner	esac
11370856Sjhb
114102993Sfenner	# cursor type
115102993Sfenner	#
116102993Sfenner	case ${cursor} in
117102993Sfenner	[Nn][Oo] | '')
118102993Sfenner		;;
119102993Sfenner	*)
120102993Sfenner		echo -n ' cursor';	vidcontrol < ${viddev} -c ${cursor}
121102993Sfenner		;;
122102993Sfenner	esac
12370856Sjhb
124102993Sfenner	# screen mapping
125102993Sfenner	#
126102993Sfenner	case ${scrnmap} in
127102993Sfenner	[Nn][Oo] | '')
128102993Sfenner		;;
129102993Sfenner	*)
130102993Sfenner		echo -n ' scrnmap';	vidcontrol < ${viddev} -l ${scrnmap}
131102993Sfenner		;;
132102993Sfenner	esac
13370856Sjhb
134102993Sfenner	# font 8x16
135102993Sfenner	#
136102993Sfenner	case ${font8x16} in
137102993Sfenner	[Nn][Oo] | '')
138102993Sfenner		;;
139102993Sfenner	*)
140102993Sfenner		echo -n ' font8x16';	vidcontrol < ${viddev} -f 8x16 ${font8x16}
141102993Sfenner		;;
142102993Sfenner	esac
14370856Sjhb
144102993Sfenner	# font 8x14
145102993Sfenner	#
146102993Sfenner	case ${font8x14} in
147102993Sfenner	[Nn][Oo] | '')
148102993Sfenner		;;
149102993Sfenner	*)
150102993Sfenner		echo -n ' font8x14';	vidcontrol < ${viddev} -f 8x14 ${font8x14}
151102993Sfenner		;;
152102993Sfenner	esac
15370856Sjhb
154102993Sfenner	# font 8x8
155102993Sfenner	#
156102993Sfenner	case ${font8x8} in
157102993Sfenner	[Nn][Oo] | '')
158102993Sfenner		;;
159102993Sfenner	*)
160102993Sfenner		echo -n ' font8x8';	vidcontrol < ${viddev} -f 8x8 ${font8x8}
161102993Sfenner		;;
162102993Sfenner	esac
16370856Sjhb
164102993Sfenner	# blank time
165102993Sfenner	#
166102993Sfenner	case ${blanktime} in
167102993Sfenner	[Nn][Oo] | '')
168102993Sfenner		;;
169102993Sfenner	*)
170102993Sfenner		echo -n ' blanktime';	vidcontrol < ${viddev} -t ${blanktime}
171102993Sfenner		;;
172102993Sfenner	esac
17370856Sjhb
174102993Sfenner	# screen saver
175102993Sfenner	#
176102993Sfenner	case ${saver} in
177102993Sfenner	[Nn][Oo] | '')
178102993Sfenner		;;
179102993Sfenner	*)
180102993Sfenner		echo -n ' screensaver'
181102993Sfenner		for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do
182102993Sfenner			kldunload ${i}
183102993Sfenner		done
184102993Sfenner		kldstat -v | grep -q _saver || kldload ${saver}_saver
185102993Sfenner		;;
186102993Sfenner	esac
18770856Sjhb
188102993Sfenner	# set this mode for all virtual screens
189102993Sfenner	#
190102993Sfenner	if [ -n "${allscreens_flags}" ]; then
191102993Sfenner		echo -n ' allscreens'
192102993Sfenner		for ttyv in /dev/ttyv*; do
193102993Sfenner			vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1
194102993Sfenner		done
195102993Sfenner	fi
196100284Sdougb
197102993Sfenner	# set this keyboard mode for all virtual terminals
198102993Sfenner	#
199102993Sfenner	if [ -n "${allscreens_kbdflags}" ]; then
200102993Sfenner		echo -n ' allscreens_kbd'
201102993Sfenner		for ttyv in /dev/ttyv*; do
202102993Sfenner			kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1
203102993Sfenner		done
204102993Sfenner	fi
205102993Sfenner
206102993Sfenner	echo '.'
207102993Sfenner}
208103161Sgordon
209103161Sgordonload_rc_config $name
210103161Sgordonrun_rc_command "$1"
211