syscons revision 103161
15480Swollman#!/bin/sh -
250476Speter#
35480Swollman# Copyright (c) 2000  The FreeBSD Project
4106146Sru# All rights reserved.
5106146Sru#
6106146Sru# Redistribution and use in source and binary forms, with or without
7106146Sru# modification, are permitted provided that the following conditions
8136910Sru# are met:
9136910Sru# 1. Redistributions of source code must retain the above copyright
105480Swollman#    notice, this list of conditions and the following disclaimer.
115480Swollman# 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 103161 2002-09-09 22:40:34Z gordon $
28#
29
30# PROVIDE: syscons
31# REQUIRE: LOGIN usbd
32# KEYWORD: FreeBSD
33
34. /etc/rc.subr
35
36name="syscons"
37start_precmd="syscons_precmd"
38start_cmd="syscons_start"
39
40# stdin must be redirected because it might be for a serial console
41#
42kbddev=/dev/ttyv0
43viddev=/dev/ttyv0
44
45syscons_precmd()
46{
47	if [ -c $kbddev ] && \
48	   [ -x /usr/sbin/ispcvt ] && \
49	   ! /usr/sbin/ispcvt
50	then
51		return 0
52	fi
53	return 1
54}
55
56syscons_start()
57{
58	echo -n 'Configuring syscons:'
59
60	# keymap
61	#
62	case ${keymap} in
63	[Nn][Oo] | '')
64		;;
65	*)
66		echo -n ' keymap';	kbdcontrol < ${kbddev} -l ${keymap}
67		;;
68	esac
69
70	# keyrate
71	#
72	case ${keyrate} in
73	[Nn][Oo] | '')
74		;;
75	*)
76		echo -n ' keyrate';	kbdcontrol < ${kbddev} -r ${keyrate}
77		;;
78	esac
79
80	# keybell
81	#
82	case ${keybell} in
83	[Nn][Oo] | '')
84		;;
85	*)
86		echo -n ' keybell';	kbdcontrol < ${kbddev} -b ${keybell}
87		;;
88	esac
89
90	# change function keys
91	#
92	case ${keychange} in
93	[Nn][Oo] | '')
94		;;
95	*)
96		echo -n ' keychange'
97		set - ${keychange}
98		while [ $# -gt 0 ]; do
99			kbdcontrol <${kbddev} -f "$1" "$2"
100			shift; shift
101		done
102		;;
103	esac
104
105	# cursor type
106	#
107	case ${cursor} in
108	[Nn][Oo] | '')
109		;;
110	*)
111		echo -n ' cursor';	vidcontrol < ${viddev} -c ${cursor}
112		;;
113	esac
114
115	# screen mapping
116	#
117	case ${scrnmap} in
118	[Nn][Oo] | '')
119		;;
120	*)
121		echo -n ' scrnmap';	vidcontrol < ${viddev} -l ${scrnmap}
122		;;
123	esac
124
125	# font 8x16
126	#
127	case ${font8x16} in
128	[Nn][Oo] | '')
129		;;
130	*)
131		echo -n ' font8x16';	vidcontrol < ${viddev} -f 8x16 ${font8x16}
132		;;
133	esac
134
135	# font 8x14
136	#
137	case ${font8x14} in
138	[Nn][Oo] | '')
139		;;
140	*)
141		echo -n ' font8x14';	vidcontrol < ${viddev} -f 8x14 ${font8x14}
142		;;
143	esac
144
145	# font 8x8
146	#
147	case ${font8x8} in
148	[Nn][Oo] | '')
149		;;
150	*)
151		echo -n ' font8x8';	vidcontrol < ${viddev} -f 8x8 ${font8x8}
152		;;
153	esac
154
155	# blank time
156	#
157	case ${blanktime} in
158	[Nn][Oo] | '')
159		;;
160	*)
161		echo -n ' blanktime';	vidcontrol < ${viddev} -t ${blanktime}
162		;;
163	esac
164
165	# screen saver
166	#
167	case ${saver} in
168	[Nn][Oo] | '')
169		;;
170	*)
171		echo -n ' screensaver'
172		for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do
173			kldunload ${i}
174		done
175		kldstat -v | grep -q _saver || kldload ${saver}_saver
176		;;
177	esac
178
179	# set this mode for all virtual screens
180	#
181	if [ -n "${allscreens_flags}" ]; then
182		echo -n ' allscreens'
183		for ttyv in /dev/ttyv*; do
184			vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1
185		done
186	fi
187
188	# set this keyboard mode for all virtual terminals
189	#
190	if [ -n "${allscreens_kbdflags}" ]; then
191		echo -n ' allscreens_kbd'
192		for ttyv in /dev/ttyv*; do
193			kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1
194		done
195	fi
196
197	echo '.'
198}
199
200load_rc_config $name
201run_rc_command "$1"
202