btkbdd man page

This tool starts a Bluetooth HID Keyboard service, serving keystrokes obtained via Linux Input subsystem's event device (evdev). In practical terms, it turns your Linux box with a physical keyboard into a Bluetooth keyboard, which can be used by various Bluetooth HID capable devices, including desktop or tablet computers, smart phones, game consoles and so on.

It implements most of the important HID protocol features, including robust connection restores (virtual cabling) and report protocol (as required by Apple's Darwin-based devices). It is possible and encouraged to use the tool from udev, starting it when event devices appear after a keyboard is plugged in.

Become a daemon. Give up controlling terminal, open file descriptors and double-fork to escape parent process control.

While breaking process hierarchy has certain disadvantages and is deprecated with modern service control daemons such as systemd(8)), it is necessary to do so with udevd(8), otherwise btkbdd would block the whole worker process.

Use with udev(7) and systemd(1) is recommended. Look into 90-btkbdd.rules and btkbdd@.service files distributed with btkbdd for examples.

btkbdd /dev/input/event8

Most basic usage -- just open a keyboard device and listen for incoming connections. When in doubt about which physical device corresponds to an event device node, use "udevadm info --attribute-walk --name=file" to identify the device and its connection details.

Bluez bluetoothd(8) daemon is likely to listen for HID events. For btkbdd to accept connection you need to disable the Bluez input plugin by setting "DisablePlugins = input" in /etc/bluetooth/main.conf.

Nothing but errors is logged and when in daemon mode even the error output is lost. Attach strace(1) or launch btkbdd manually to troubleshoot errors.

Only a common 101-key keyboard is supported.

To estabilish pairing with iPad, iPod Touch or iPhone, connection must be initiated and authenticated via bluetooth-applet(1) before starting btkbdd. Otherwise the device will initiate a PIN-based authentication that is not supported. Once trust is estabilished, connections will work without a need for any other hassle.