+ Kazutaka YOKOTA wrote:

> We can improve our current behavior of syscons and keyboard drivers
> in the following approaches.

> a) Remove the FAIL_IF_NO_KBD flag from /boot/device.hints.
>    Leave the AUTO_DETECT_KBD as it is now for syscons, so that
>    syscons searches for a keyboard periodically while it isn't using
>    one. Add a script to /etc/usbd.conf to switch to the USB keyboard.

I use the following scripts.  This /etc/usb_kbd was an improvement
version and became a topic with "-tech-jp ML" in Japan before a
little.  When you use it, please do "chmod +x".  And you can use
below four variables with rc.conf.

 keymap_<keyboard>
 keyrate_<keyboard>
 keybell_<keyboard>
 keychange_<keyboard>

<keyboard> is device name of an USB keyboard.

For example, when you use a "jp.106x" keymap with ukbd0, you add
keymap_ukbd0="jp.106x" line to /etc/rc.conf.  And other variable are
similar, too.

However, a case to use several USB keyboards is a testing shortage.
And keyboard device will not accord with variable name of rc.conf by
order to connect an USB keyboard to.

> I always liked the idea b), but haven't designed it yet.

I like b) plan, too.

--
Toshihiko ARAI


-----/etc/usbd.conf-----
# This entry changes a console keyboard to an USB keyboard when connected it.
# And switch back to keyboard just before that when disconnected.
#
device "USB keyboard"
        devname "ukbd[0-9]+"
        attach  "/etc/usb_kbd ${DEVNAME} start"
        detach  "/etc/usb_kbd ${DEVNAME} stop"

-----/etc/usb_kbd-----
#!/bin/sh -
#
# $FreeBSD$
#
# usb_kbd devname [start|stop]
#
# example: usb_kbd ukbd0 start
#

# Suck in the configuration variables
#
if [ -r /etc/defaults/rc.conf ]; then
        . /etc/defaults/rc.conf
        source_rc_confs
elif [ -r /etc/rc.conf ]; then
        . /etc/rc.conf
fi

kbdhist=/var/run/usb_kbd.hist
kbddev=
ttydev=/dev/ttyv0
devname=$1
shift
startstop=$1
shift

case ${startstop} in
[Ss][Tt][Aa][Rr][Tt] | '')
        # To change system console by insertion of USB keyboard.
        #
        # Acquire a keyboard device name from a message of
        # "kbd1 at ukbd0" of dmesg command.
        #
        kbddev=`dmesg | sed -n -e "/at ${devname}\\$/h" \
                               -e '${ g
                                      s///p
                                    }'`
        [ -z ${kbddev} ] && kbddev=kbd1 # XXX
        kbdcontrol -k /dev/${kbddev} < ${ttydev} || exit

        # Append pair of device name into history file.
        echo "${kbddev} ${devname}" >> ${kbdhist}

        # You can use following four variables.
        # For example,
        #   keymap_ukbd0="jp.106x"
        # and rc.conf(5) may be helpful for you.
        #
        eval keymap=\$keymap_${devname}
        eval keyrate=\$keyrate_${devname}
        eval keybell=\$keybell_${devname}
        eval keychange=\$keychange_${devname}

        # Reference from src/etc/rc.syscons
        # keymap
        #
        case ${keymap} in
        [Nn][Oo] | '')
                ;;
        *)
                kbdcontrol < ${ttydev} -l ${keymap}
                ;;
        esac

        # keyrate
        #
        case ${keyrate} in
        [Nn][Oo] | '')
                ;;
        *)
                kbdcontrol < ${ttydev} -r ${keyrate}
                ;;
        esac

        # keybell
        #
        case ${keybell} in
        [Nn][Oo] | '')
                ;;
        *)
                kbdcontrol < ${ttydev} -b ${keybell}
                ;;
        esac

        # change function keys
        #
        case ${keychange} in
        [Nn][Oo] | '')
                ;;
        *)
                set - ${keychange}
                while [ $# -gt 0 ]; do
                        kbdcontrol <${ttydev} -f "$1" "$2"
                        shift; shift
                done
                ;;
        esac
        ;;
*)
        # To switch back to keyboard before one by removal of
        # USB keyboard.
        #
        if [ -s ${kbdhist} ]; then
                #
                # Delete a current keyboard from history file
                # and get a last keyboard device name.
                #
                kbddev=`sed -e "/ ${devname}\\$/d" -e "w ${kbdhist}.tmp" \
                                ${kbdhist} | sed -n '$s/ .*$//p'`
                mv ${kbdhist}.tmp ${kbdhist}
        fi
        [ -z ${kbddev} ] && kbddev=kbd0
        kbdcontrol -k /dev/${kbddev} < ${ttydev}
        ;;
esac

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to