syscons revision 271958
153813Simp#!/bin/sh - 2118063Simp# 3100213Simp# Copyright (c) 2000 The FreeBSD Project 452506Simp# All rights reserved. 552506Simp# 652506Simp# Redistribution and use in source and binary forms, with or without 752506Simp# modification, are permitted provided that the following conditions 852506Simp# are met: 952506Simp# 1. Redistributions of source code must retain the above copyright 1052506Simp# notice, this list of conditions and the following disclaimer. 1152506Simp# 2. Redistributions in binary form must reproduce the above copyright 1252506Simp# notice, this list of conditions and the following disclaimer in the 1352506Simp# documentation and/or other materials provided with the distribution. 1452506Simp# 1552506Simp# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1652506Simp# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1752506Simp# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1852506Simp# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1952506Simp# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2052506Simp# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2152506Simp# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2252506Simp# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2352506Simp# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2452506Simp# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2552506Simp# SUCH DAMAGE. 2652506Simp# 2752506Simp# $FreeBSD: head/etc/rc.d/syscons 271958 2014-09-22 11:54:13Z se $ 2852506Simp# 2952506Simp 3052506Simp# PROVIDE: syscons 3152506Simp# REQUIRE: LOGIN 3252506Simp# KEYWORD: nojail 3352506Simp 3452506Simp. /etc/rc.subr 3552506Simp 3652506Simpname="syscons" 3752506Simpextra_commands="setkeyboard" 3852506Simpsetkeyboard_cmd="syscons_setkeyboard" 3952506Simpstart_precmd="syscons_precmd" 4052506Simpstart_cmd="syscons_start" 4152506Simpstop_cmd=":" 4286269Simp 4352506Simp# stdin must be redirected because it might be for a serial console 4452506Simp# 4552506Simpkbddev=/dev/ttyv0 46119213Simpviddev=/dev/ttyv0 4758545Simp 4852506Simp_sc_config= 4965039Simp_sc_console= 5065039Simp_sc_initdone= 5152506Simp_sc_keymap_msg= 52118063Simpsc_init() 5352506Simp{ 5452506Simp if [ -z "${_sc_initdone}" ]; then 5552506Simp if [ -z "${_sc_console}" ]; then 5652506Simp if [ x`sysctl -n kern.vty` = x"vt" ]; then 5758545Simp _sc_console="vt" 5852506Simp else 5986455Simp _sc_console="syscons" 6079270Simp fi 61107359Snon _sc_config="${_sc_console}" 6252506Simp fi 6386269Simp echo -n "Configuring ${_sc_config}:" 6486455Simp _sc_initdone=yes 65119225Simp fi 6652506Simp} 6786455Simp 6858545Simp# syscons to vt migration helper 69104854Simplookup_keymap_for_vt() 7086269Simp{ 71104854Simp keymap=`basename $1 .kbd` 7252506Simp case $keymap in 7386455Simphy.armscii-8) echo am;; 7452506Simpbe.iso.acc) echo be.acc;; 7586455Simpbe.iso) echo be;; 7653813Simpbg.bds.ctrlcaps) echo bg.bds;; 77100213Simpbg.phonetic.ctrlcaps) echo bg.phonetic;; 7858545Simpbr275.iso.acc) echo br;; 7989945Simpbr275.*) echo br.noacc;; 8084514Simpby.*) echo by;; 8158545Simpfr_CA.iso.acc) echo ca-fr;; 82119234Simpswissgerman.macbook.acc) echo ch.macbook.acc;; 8369138Speterswissgerman.iso.acc) echo ch.acc;; 84118634Simpswissgerman.*) echo ch;; 8552506Simpswissfrench.iso.acc) echo ch-fr.acc;; 8658545Simpswissfrench.*) echo ch-fr;; 8752506Simpce.iso2) echo centraleuropean.qwerty;; 8853813Simpcolemak.iso15.acc) echo colemak.acc;; 8965039Simpcs.*|cz.*) echo cz;; 9071279Simpgerman.iso.acc) echo de.acc;; 9158545Simpgerman.*) echo de;; 9265039Simpdanish.iso.acc) echo dk.acc;; 9392471Simpdanish.iso.macbook) echo dk.macbook;; 94116207Simpdanish.*) echo dk;; 9584514Simpestonian.*) echo ee;; 9679270Simpspanish.dvorak) echo es.dvorak;; 97119231Simpspanish.iso*.acc) echo es.acc;; 9879270Simpspanish.iso) echo es;; 99117438Simpfinnish.*) echo fi;; 100117602Simpfr.macbook.acc) echo fr.macbook;; 101118895Simpfr.iso.acc) echo fr.acc;; 102119240Simpfr.iso) echo fr;; 103119240Simpel.iso07) echo gr;; 104119240Simpgr.us101.acc) echo gr.101.acc;; 105119240Simphr.iso) echo hr;; 10693620Simphu.iso2.101keys) echo hu.101;; 10786455Simphu.iso2.102keys) echo hu.102;; 108119240Simpiw.iso8) echo il;; 109119240Simpicelandic.iso.acc) echo is.acc;; 110119240Simpicelandic.iso) echo is;; 111119240Simpit.iso) echo it;; 112119240Simpjp.106x) echo jp.capsctrl;; 113119240Simpjp.106) echo jp;; 114119240Simp#?? jp.pc98.iso) echo jp.pc98;; 115119240Simpkk.pt154.io) echo kz.io;; 116119240Simpkk.pt154.kst) echo kz.kst;; 117119240Simplatinamerican.iso.acc) echo latinamerican.acc;; 118119240Simplt.iso4) echo lt;; 119119240Simpnorwegian.iso) echo no;; 120119240Simpnorwegian.dvorak) echo no.dvorak;; 12186455Simpdutch.iso.acc) echo nl;; 122104854Simpeee_nordic) echo nordic.asus-eee;; 12394461Simppl_PL.dvorak) echo pl.dvorak;; 124117614Simppl_PL.ISO8859-2) echo pl;; 12586455Simppt.iso.acc) echo pt.acc;; 12686455Simppt.iso) echo pt;; 12789945Simpru.koi8-r.shift) echo ru.shift;; 12853813Simpru.koi8-r.win) echo ru.win;; 12971279Simpru.*) echo ru;; 13071283Simpswedish.*) echo se;; 131113667Ssanpeisi.iso) echo si;; 13253813Simpsk.iso2) echo sk;; 13352506Simptr.iso9.q) echo tr;; 13452506Simpua.koi8-u.shift.alt) echo ua.shift.alt;; 135107359Snonua.*) echo ua;; 13671283Simpuk.*-ctrl) echo uk.capsctrl;; 13752506Simpuk.dvorak) echo uk.dvorak;; 13852506Simpuk.*) echo uk;; 13986269Simpus.iso.acc) echo us.acc;; 14086269Simpus.pc-ctrl) echo us.ctrl;; 14152506Simpus.iso) echo us;; 14253813Simp esac 14352506Simp} 14465039Simp 14586269Simpkbdcontrol_load_keymap() 14686269Simp{ 14786269Simp errmsg=`kbdcontrol < ${kbddev} -l ${keymap} 2>&1` 14886269Simp if [ -n "${errmsg}" -a "${_sc_console}" = "vt" ]; then 14952506Simp _sc_keymap_msg="${errmsg}" 15052506Simp keymap_vt=`lookup_keymap_for_vt ${keymap}` 15152506Simp if [ -n "${keymap_vt}" ]; then 15293893Simp errmsg=`kbdcontrol < ${kbddev} -l ${keymap_vt} 2>&1` 15386455Simp if [ -z "${errmsg}" ]; then 15484514Simp _sc_keymap_msg="New keymap: In /etc/rc.conf replace 'keymap=${keymap}' by 'keymap=${keymap_vt}'" 15552506Simp fi 156104854Simp else 157104854Simp _sc_keymap_msg="No replacement found for keymap '${keymap}'. 15894461SimpYou may try to convert your keymap file using 'convert-keymap.pl', which is 15986269Simppart of the system sources and located in /usr/src/tools/tools/vt/keymaps/" 16086269Simp fi 16186269Simp fi 16286269Simp} 16386269Simp 16486269Simp# helper 16586269Simpsyscons_configure_keyboard() 16686269Simp{ 16786269Simp # keymap 168117614Simp # 169117614Simp case ${keymap} in 170117614Simp NO | '') 17186269Simp ;; 17286269Simp *) 17386269Simp sc_init 17486455Simp echo -n ' keymap'; kbdcontrol_load_keymap 17586455Simp ;; 17686455Simp esac 177116207Simp 178116207Simp # keyrate 179116207Simp # 180117438Simp case ${keyrate} in 181117445Ssimokawa [Nn][Oo] | '') 182117438Simp ;; 18386269Simp *) 18486269Simp sc_init 18586269Simp echo -n ' keyrate'; kbdcontrol < ${kbddev} -r ${keyrate} 18686269Simp ;; 187104854Simp esac 18886269Simp 18987757Simp # keybell 19087757Simp # 19187757Simp case ${keybell} in 19286455Simp [Nn][Oo] | '') 19386455Simp ;; 19486455Simp *) 195119231Simp sc_init 196119231Simp echo -n ' keybell'; kbdcontrol < ${kbddev} -b ${keybell} 197119231Simp ;; 198119231Simp esac 199119231Simp 20086269Simp # change function keys 201117759Simp # 20286269Simp case ${keychange} in 203109455Sshiba [Nn][Oo] | '') 204104854Simp ;; 20587044Simp *) 20686269Simp sc_init 20765039Simp echo -n ' keychange' 20886269Simp set -- ${keychange} 20965039Simp while [ $# -gt 0 ]; do 21065039Simp kbdcontrol <${kbddev} -f "$1" "$2" 21152506Simp shift; shift 21286455Simp done 21352506Simp ;; 21452506Simp esac 21586269Simp 21686269Simp # set this keyboard mode for all virtual terminals 21786269Simp # 21853813Simp if [ -n "${allscreens_kbdflags}" ]; then 21952506Simp sc_init 22052506Simp echo -n ' allscreens_kbd' 22152506Simp for ttyv in /dev/ttyv*; do 22252506Simp kbdcontrol ${allscreens_kbdflags} < ${ttyv} > ${ttyv} 2>&1 22352506Simp done 22452506Simp fi 22552506Simp} 22679270Simp 22779270Simpsyscons_setkeyboard() 22879270Simp{ 229119225Simp kbd=$1 230119225Simp 231119225Simp if [ -z "${kbd}" ]; then 232119225Simp return 1 23386455Simp fi 23486455Simp 23586455Simp # Check if the kbdmux(4) is the current active keyboard 23689945Simp kbdcontrol -i < ${kbddev} | grep kbdmux > /dev/null 2>&1 23789945Simp if [ $? -ne 0 ]; then 23889945Simp kbdcontrol -k ${kbd} < ${kbddev} > /dev/null 2>&1 23971279Simp fi 24071279Simp 24171279Simp _sc_config="keyboard" 24286269Simp syscons_configure_keyboard 243100213Simp 24471279Simp # Terminate keyboard configuration line and reset global variables. 24586269Simp # 24686269Simp if [ -n "${_sc_initdone}" ]; then 24786269Simp echo '.' 24889945Simp _sc_config="${_sc_console}" 24989945Simp _sc_initdone= 25089945Simp fi 25186269Simp} 25286269Simp 25386269Simpsyscons_precmd() 25452506Simp{ 25552506Simp if [ ! -c $kbddev ] 25686269Simp then 25753813Simp return 1 25853813Simp fi 259100213Simp return 0 260100213Simp} 261100213Simp 26292471Simpsyscons_start() 26392471Simp{ 26492471Simp # keyboard 26552506Simp # 26671279Simp if [ -n "${keyboard}" ]; then 26765039Simp syscons_setkeyboard ${keyboard} 26865039Simp fi 26965039Simp 27065039Simp syscons_configure_keyboard 27187044Simp 27265039Simp # cursor type 27352506Simp # 27465039Simp case ${cursor} in 27589103Simp [Nn][Oo] | '') 27653813Simp ;; 27752506Simp *) 27865039Simp sc_init 27986269Simp echo -n ' cursor'; vidcontrol < ${viddev} -c ${cursor} 28065039Simp ;; 28165039Simp esac 282119213Simp 283119213Simp # screen mapping 284119213Simp # 285119213Simp case ${scrnmap} in 28652506Simp [Nn][Oo] | '') 28753813Simp ;; 28879270Simp *) 289117764Simp sc_init 29052506Simp echo -n ' scrnmap'; vidcontrol < ${viddev} -l ${scrnmap} 29186269Simp ;; 29286269Simp esac 29365039Simp 29486269Simp # font 8x16 29586269Simp # 29686269Simp case ${font8x16} in 29758545Simp [Nn][Oo] | '') 29871279Simp ;; 29958545Simp *) 30052506Simp sc_init 30186269Simp echo -n ' font8x16'; vidcontrol < ${viddev} -f 8x16 ${font8x16} 30258545Simp ;; 30352506Simp esac 30452506Simp 30552506Simp # font 8x14 30686269Simp # 30786269Simp case ${font8x14} in 30886269Simp [Nn][Oo] | '') 30986269Simp ;; 31086269Simp *) 311107359Snon sc_init 31286269Simp echo -n ' font8x14'; vidcontrol < ${viddev} -f 8x14 ${font8x14} 31352506Simp ;; 31486269Simp esac 31552506Simp 31653813Simp # font 8x8 31752506Simp # 31852506Simp case ${font8x8} in 31958545Simp [Nn][Oo] | '') 32058545Simp ;; 321118895Simp *) 32258545Simp sc_init 323118895Simp echo -n ' font8x8'; vidcontrol < ${viddev} -f 8x8 ${font8x8} 324118895Simp ;; 325118895Simp esac 32686269Simp 32786269Simp # blank time 32886269Simp # 32986455Simp case ${blanktime} in 33086269Simp [Nn][Oo] | '') 33186269Simp ;; 33286269Simp *) 33386455Simp sc_init 33486455Simp echo -n ' blanktime'; vidcontrol < ${viddev} -t ${blanktime} 33586455Simp ;; 336104831Simp esac 337106891Simp 338106891Simp # screen saver 33986455Simp # 34086455Simp case ${saver} in 34186269Simp [Nn][Oo] | '') 34286455Simp ;; 343104854Simp *) 34486455Simp sc_init 34593620Simp echo -n ' screensaver' 34686455Simp for i in `kldstat | awk '$5 ~ "_saver\.ko$" { print $5 }'`; do 34779270Simp kldunload ${i} 34879270Simp done 34979270Simp load_kld -e _saver ${saver}_saver 35058545Simp ;; 351100213Simp esac 35258545Simp 35358545Simp # set this mode for all virtual screens 35493620Simp # 35593620Simp if [ -n "${allscreens_flags}" ]; then 35693620Simp sc_init 35793620Simp echo -n ' allscreens' 35865039Simp for ttyv in /dev/ttyv*; do 35965039Simp vidcontrol ${allscreens_flags} < ${ttyv} > ${ttyv} 2>&1 36065039Simp done 361104854Simp fi 362104854Simp 363104854Simp [ -n "${_sc_initdone}" ] && echo '.' 36458545Simp if [ -n "${_sc_keymap_msg}" ]; then 36558545Simp echo 36665039Simp echo "WARNING:" 367107359Snon echo "${_sc_keymap_msg}." 36886269Simp echo 36986455Simp fi 37058545Simp} 371104831Simp 372104854Simpload_rc_config $name 373104831Simprun_rc_command $* 37486455Simp 375120275Simp