]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/syscons
This commit was generated by cvs2svn to compensate for changes in r163799,
[FreeBSD/FreeBSD.git] / etc / rc.d / syscons
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$
28 #
29
30 # PROVIDE: syscons
31 # REQUIRE: LOGIN
32 # KEYWORD: nojail
33
34 . /etc/rc.subr
35
36 name="syscons"
37 extra_commands="setkeyboard"
38 setkeyboard_cmd="syscons_setkeyboard"
39 start_precmd="syscons_precmd"
40 start_cmd="syscons_start"
41
42 # stdin must be redirected because it might be for a serial console
43 #
44 kbddev=/dev/ttyv0
45 viddev=/dev/ttyv0
46
47 # helper
48 syscons_configure_keyboard()
49 {
50         # keymap
51         #
52         case ${keymap} in
53         [Nn][Oo] | '')
54                 ;;
55         *)
56                 echo -n ' keymap';      kbdcontrol < ${kbddev} -l ${keymap}
57                 ;;
58         esac
59
60         # keyrate
61         #
62         case ${keyrate} in
63         [Nn][Oo] | '')
64                 ;;
65         *)
66                 echo -n ' keyrate';     kbdcontrol < ${kbddev} -r ${keyrate}
67                 ;;
68         esac
69
70         # keybell
71         #
72         case ${keybell} in
73         [Nn][Oo] | '')
74                 ;;
75         *)
76                 echo -n ' keybell';     kbdcontrol < ${kbddev} -b ${keybell}
77                 ;;
78         esac
79
80         # change function keys
81         #
82         case ${keychange} in
83         [Nn][Oo] | '')
84                 ;;
85         *)
86                 echo -n ' keychange'
87                 set - ${keychange}
88                 while [ $# -gt 0 ]; do
89                         kbdcontrol <${kbddev} -f "$1" "$2"
90                         shift; shift
91                 done
92                 ;;
93         esac
94
95         # set this keyboard mode for all virtual terminals
96         #
97         if [ -n "${allscreens_kbdflags}" ]; then
98                 echo -n ' allscreens_kbd'
99                 for ttyv in /dev/ttyv*; do
100                         kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1
101                 done
102         fi
103 }
104
105 syscons_setkeyboard()
106 {
107         kbd=$1
108                 
109         if [ -z "${kbd}" ]; then
110                 return 1
111         fi
112
113         # Check if the kbdmux(4) is the current active keyboard
114         kbdcontrol -i < ${kbddev} | grep kbdmux > /dev/null 2>&1
115         if [ $? != 0 ]; then
116                 kbdcontrol -k ${kbd} < ${kbddev} > /dev/null 2>&1
117         fi
118
119         echo -n 'Configuring keyboard:'
120         syscons_configure_keyboard
121         echo '.'
122 }
123
124 syscons_precmd()
125 {
126         if [ ! -c $kbddev ]
127         then
128                 return 1
129         fi
130         return 0
131 }
132
133 syscons_start()
134 {
135         echo -n 'Configuring syscons:'
136
137         # keyboard
138         #
139         if [ -n "${keyboard}" ]; then
140                 echo -n ' keyboard';    syscons_setkeyboard ${keyboard}
141         fi
142
143         syscons_configure_keyboard
144
145         # cursor type
146         #
147         case ${cursor} in
148         [Nn][Oo] | '')
149                 ;;
150         *)
151                 echo -n ' cursor';      vidcontrol < ${viddev} -c ${cursor}
152                 ;;
153         esac
154
155         # screen mapping
156         #
157         case ${scrnmap} in
158         [Nn][Oo] | '')
159                 ;;
160         *)
161                 echo -n ' scrnmap';     vidcontrol < ${viddev} -l ${scrnmap}
162                 ;;
163         esac
164
165         # font 8x16
166         #
167         case ${font8x16} in
168         [Nn][Oo] | '')
169                 ;;
170         *)
171                 echo -n ' font8x16';    vidcontrol < ${viddev} -f 8x16 ${font8x16}
172                 ;;
173         esac
174
175         # font 8x14
176         #
177         case ${font8x14} in
178         [Nn][Oo] | '')
179                 ;;
180         *)
181                 echo -n ' font8x14';    vidcontrol < ${viddev} -f 8x14 ${font8x14}
182                 ;;
183         esac
184
185         # font 8x8
186         #
187         case ${font8x8} in
188         [Nn][Oo] | '')
189                 ;;
190         *)
191                 echo -n ' font8x8';     vidcontrol < ${viddev} -f 8x8 ${font8x8}
192                 ;;
193         esac
194
195         # blank time
196         #
197         case ${blanktime} in
198         [Nn][Oo] | '')
199                 ;;
200         *)
201                 echo -n ' blanktime';   vidcontrol < ${viddev} -t ${blanktime}
202                 ;;
203         esac
204
205         # screen saver
206         #
207         case ${saver} in
208         [Nn][Oo] | '')
209                 ;;
210         *)
211                 echo -n ' screensaver'
212                 for i in `kldstat | awk '$5 ~ "^splash_.*$" { print $5 }'`; do
213                         kldunload ${i}
214                 done
215                 kldstat -v | grep -q _saver || kldload ${saver}_saver
216                 ;;
217         esac
218
219         # set this mode for all virtual screens
220         #
221         if [ -n "${allscreens_flags}" ]; then
222                 echo -n ' allscreens'
223                 for ttyv in /dev/ttyv*; do
224                         vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1
225                 done
226         fi
227
228         echo '.'
229 }
230
231 load_rc_config $name
232 run_rc_command $*
233