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