syscons revision 126744
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 126744 2004-03-08 12:25:05Z pjd $
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	# keymap
63	#
64	case ${keymap} in
65	[Nn][Oo] | '')
66		;;
67	*)
68		echo -n ' keymap';	kbdcontrol < ${kbddev} -l ${keymap}
69		;;
70	esac
71
72	# keyrate
73	#
74	case ${keyrate} in
75	[Nn][Oo] | '')
76		;;
77	*)
78		echo -n ' keyrate';	kbdcontrol < ${kbddev} -r ${keyrate}
79		;;
80	esac
81
82	# keybell
83	#
84	case ${keybell} in
85	[Nn][Oo] | '')
86		;;
87	*)
88		echo -n ' keybell';	kbdcontrol < ${kbddev} -b ${keybell}
89		;;
90	esac
91
92	# change function keys
93	#
94	case ${keychange} in
95	[Nn][Oo] | '')
96		;;
97	*)
98		echo -n ' keychange'
99		set - ${keychange}
100		while [ $# -gt 0 ]; do
101			kbdcontrol <${kbddev} -f "$1" "$2"
102			shift; shift
103		done
104		;;
105	esac
106
107	# cursor type
108	#
109	case ${cursor} in
110	[Nn][Oo] | '')
111		;;
112	*)
113		echo -n ' cursor';	vidcontrol < ${viddev} -c ${cursor}
114		;;
115	esac
116
117	# screen mapping
118	#
119	case ${scrnmap} in
120	[Nn][Oo] | '')
121		;;
122	*)
123		echo -n ' scrnmap';	vidcontrol < ${viddev} -l ${scrnmap}
124		;;
125	esac
126
127	# font 8x16
128	#
129	case ${font8x16} in
130	[Nn][Oo] | '')
131		;;
132	*)
133		echo -n ' font8x16';	vidcontrol < ${viddev} -f 8x16 ${font8x16}
134		;;
135	esac
136
137	# font 8x14
138	#
139	case ${font8x14} in
140	[Nn][Oo] | '')
141		;;
142	*)
143		echo -n ' font8x14';	vidcontrol < ${viddev} -f 8x14 ${font8x14}
144		;;
145	esac
146
147	# font 8x8
148	#
149	case ${font8x8} in
150	[Nn][Oo] | '')
151		;;
152	*)
153		echo -n ' font8x8';	vidcontrol < ${viddev} -f 8x8 ${font8x8}
154		;;
155	esac
156
157	# blank time
158	#
159	case ${blanktime} in
160	[Nn][Oo] | '')
161		;;
162	*)
163		echo -n ' blanktime';	vidcontrol < ${viddev} -t ${blanktime}
164		;;
165	esac
166
167	# screen saver
168	#
169	case ${saver} in
170	[Nn][Oo] | '')
171		;;
172	*)
173		echo -n ' screensaver'
174		for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do
175			kldunload ${i}
176		done
177		kldstat -v | grep -q _saver || kldload ${saver}_saver
178		;;
179	esac
180
181	# set this mode for all virtual screens
182	#
183	if [ -n "${allscreens_flags}" ]; then
184		echo -n ' allscreens'
185		for ttyv in /dev/ttyv*; do
186			vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1
187		done
188	fi
189
190	# set this keyboard mode for all virtual terminals
191	#
192	if [ -n "${allscreens_kbdflags}" ]; then
193		echo -n ' allscreens_kbd'
194		for ttyv in /dev/ttyv*; do
195			kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1
196		done
197	fi
198
199	echo '.'
200}
201
202load_rc_config $name
203run_rc_command "$1"
204