How do I make Ubuntu appear as a bluetooth keyboard?

I have an iPad 2 and would like that my Ubuntu system appear as a bluetooth keyboard for it, so that what I type on my computer appears on my iPad.

Is there a specific way to do that?


Solution 1:

You can make your computer act as a Bluetooth keyboard for other devices, provided that:

  • It has Bluetooth, and runs Bluez. (This is true of Ubuntu systems with Bluetooth.)
  • It's running a Linux-based operating system. (That includes Ubuntu!)
  • You have administrative abilities in your Linux-based OS (for example, you can sudo to root).

There is a FOSS program that does this, called hidclient:

The hidclient program makes a Bluetooth® technology equipped computer appear as a Bluetooth® keyboard and mouse device to other machines. Input events (like keystrokes and mouse movements) of the locally attached input devices will be forwarded to another machine via the Bluetooth® link.

For the counterpart (which might be a Linux PC, a Win PC, a PDA...) there is no technical difference to "real" Bluetooth® input devices.

Source: hidclient's official site (main page).

That totally rocks: you don't have to do anything special to your iPad (or any other mobile device that works with Bluetooth keyboards) to get this to work. You don't have to jailbreak it. You don't have to install any special apps. Just install and run hidclient, then tell your mobile device (the iPad) you want to use your Bluetooth keyboard!

Everything you need to get the software and learn how to use it is right here.
After reading the whole page (so you understand how it works), make sure to use the instructions at the end (for Ubuntu).

Here's a compact version (essentially the same procedure – this worked better for me):

  1. Install libbluetooth-dev Install libbluetooth-dev.
  2. Download hidclient source code for Ubuntu. (Check the official page to make sure that's not out of date.) Put it in a folder by itself and extract its contents.
  3. Type make and press Enter to compile the source.
  4. Back up and edit your Bluetooth configuration:
    sudo cp /etc/bluetooth/main.conf /etc/bluetooth/main.conf.old
    sudo -H gedit /etc/bluetooth/main.conf
    • Under #DisablePlugins = network,input add the line DisablePlugins = input (no #).
    • Add a # to the beginning of Class = 0x000100; under it, write Class=0x000540 (no #).
    • Save the file and quit the text editor.
  5. If you want to be able to run hidclient like a normal command:
    • Run sudo cp hidclient /usr/local/bin.
    • Check if /usr/local/bin is in your path with echo $PATH.
    • If it's not, add it with any of these methods.
    If you skip this step, you can run hidclient by making sure you're in the directory where you compiled it, and running ./hidclient instead of hidclient.

Running hidclient

Run hidclient --help (or see the bottom of the web page) to see how to use it.

Except when run with the --help flag, hidclient must be run as root. So use sudo hidclient (followed by whatever options you're specifying, as explained in the help).

Basically, there's two steps:

  1. Run sudo hidclient -l for a numbered list of devices.
  2. Run sudo hidclient -eN -x, replacing N with the number of the device you want to "forward" over Bluetooth. In your case, this will be the keyboard.

You're all set. Tell your mobile device (iPad) to use a Bluetooth keyboard.

Terminating hidclient

The last thing you need to be able to do is to stop using the keyboard for Bluetooth input. See, when hidclient is running, the device you select is no longer giving input to your Ubuntu system. If it were anything but the keyboard (say, the mouse), you could quit hidclient by pressing Ctrl+C in the Terminal.

But you cannot do that, because keyboard input won't go to the Terminal or any other Ubuntu program. The keyboard is acting as a Bluetooth device!

So, when "forwarding" the keyboard, quit hidclient by closing the Terminal window (or tab) in which it's running, with the mouse (or trackpad).

  • Of course, if your Ubuntu machine has multiple keyboards, you could "forward" one as a Bluetooth device and continue to use the other on your computer.

References/Acknowledgements

  • hidclient program and project page, by Anselm Martin Hoffmeister
  • This Server Fault answer by Capt.Nemo, which pointed me in the right direction.