How to get my bluetooth keyboard to be recognized before log in?

12,187

I occasionally use the following script to add bluetooth keyboards to my systems, it adds it at a system level, rather than a user level, which seems to make things work right from the boot, and my keyboard(s) are usable from the login prompt.

As written, you'll need bash (v4.0+ hopefully) and the bluez package, which supplies the bluez-simple-agent, bluez-test-device, bluez-test-input programs.

Most of the code below is to implement a list to allow you to choose which device, it really just boils down to the last 6 (non-comment) lines, if you know your BT MAC Address, you can replace all the choice stuff with a static assignment.

#!/bin/bash
#
# L Nix <[email protected]>
# setup-bt-kb : allow choosing & pairing a bluetooth keyboard from the console
#
declare -a addrlist
#
while [ 1 ]; do
    echo -n "Scanning for Bluetooth devices ... "
    readarray -n 10 -O 0 -t addrlist < <(hcitool scan|grep -v "^Scanning"|sed -e "s/^[ \t]//g" -e "s/\t/ /g" | head -n 9)
    echo
    echo
    length=${#addrlist[@]}
    a=1
    while [ ${a} -le ${length} ]; do
        echo "$a) ${addrlist[$a-1]}"
        a=$((a + 1))
    done
    echo
    while [ 1 ]; do
        if [ ${length} -gt 0 ]; then
            echo -n "Choose (1-${length}), or "
        fi
        echo -n "'R' to rescan: "
        read -n 1 REPLY
        echo
        case ${REPLY} in
            Q)
                # just quit
                exit 0
                ;;
            [0rR])
                echo
                REPLY=0
                break
                ;;
            [123456789])
                if [ ${REPLY} -le ${length} ]; then
                    echo "Got ${REPLY}"
                    break
                fi
                ;;
            *)
                ;;
        esac
    done
    if [ ${REPLY} -gt 0 ]; then
        break
    fi
done
#
device=${addrlist[${REPLY}-1]}
#
BTADDR=${device/% *}
BTNAME=${device/#??:??:??:??:??:?? }
#
echo "selecting '${BTNAME}' at ${BTADDR}"
#
echo "Pairing with ${BTNAME} (Generally '0000')"
bluez-simple-agent hci0 ${BTADDR}
#
echo "Setting trust level with ${BTNAME}"
bluez-test-device trusted ${BTADDR} yes
#
echo "Connecting to ${BTNAME}"
bluez-test-input connect ${BTADDR}
#
echo "Completed"
Share:
12,187

Related videos on Youtube

zenbike
Author by

zenbike

I'm a self-teaching geek. teaching because that process is far from over. I don't know a ton, but what I know, I'll share, and I won't answer a question if I'm not confident I'm correct.

Updated on September 18, 2022

Comments

  • zenbike
    zenbike over 1 year

    Because I need to use my keyboard to log in, I would like my keyboard pair automatically, pre-log in.

    I am using Debian squeeze, and am new to linux. All tutorials I have found seem to require the HIDD package, which has been deprecated (I think) on current Debian releases.

    Apt-get install returns a package not found in repo response.

    Does anyone have a method to slove this problem?

    If it matters, I am using Debian Squeeze on a Raspberry Pi, and an Apple Bluetooth Keyboard/Magic Trackpad.

  • zenbike
    zenbike over 11 years
    Thanks for the answer. I'm new to Linux. Can you please breakdown the script and explain what each part does? Especially the last '6 lines' you mentioned?
  • lornix
    lornix over 11 years
    No. That's a lot of work, and not enough room here. It's easy to read, '#' starts a comment, you can read those... the rest are statements, which are generally self-explanatory. I suppose it's the last 10 lines, including the comments, which do all the actual work, the rest is pretty-stuff to make selecting a device easy. they invoke the bluez programs to add, pair and connect a desired device, using the Bluetooth ID (MAC) discovered in the top part of the script. Read the man pages for the programs, read the BASH man page for how scripting with BASH works. Learn to discover and explore.
  • lornix
    lornix over 11 years
    Almost EVERY command accepts the -h or --help options to describe their operation, and most have man pages (man bash, man bluez-test-input... etc) . Try things, explore, learn, discover. Read the BASH man page for help on scripting, the man pages for the various commands, mostly the bluez-... commands.