Update: Greg Priest-Dorman tipped me off about an issue with these instructions. XE12 has a bug that causes keys to repeat if you type quickly. I’m quite slow on my Twiddler, but I was able to reproduce it with this command:
Which yields this
Greg reports that XE8 works well, but downgrading that far is tricky. I’m going to experiment with flashing earlier versions and update this post with my findings.
Voice commands are perfect for commands, but something I’ve always dreamed of doing on Google Glass is taking notes. The Twiddler 3 seems like the perfect input device, and we all know that the best text input software is Vim.
Getting all of these to work together took a little bit of hacking. This blog entry guides you through the process of pairing Glass with the Twiddler 3, and using it to type your first words into VimTouch on Glass.
Here’s a summary of what’s involved:
Warning: This tutorial includes steps that will void your Google Glass warranty. Proceed at your own risk. If you accidentally brick your Glass, don’t complain to me! :)
Current versions of the Glass operating system such as XE22 do not pair with Bluetooth HID devices like the Twiddler. However, older versions that were based on Android 4.0 Ice Cream Sandwich do play well with them. Before we can pair Glass with the Twiddler we need to downgrade to XE12 and disable automatic system updates.
Why are we downgrading to XE12? Because it was the highest version based on Ice Cream Sandwich. It has the most features and bug fixes included. You can also use XE10 or XE11, if you prefer.
All of the boot loaders and system images for Glass are available from the
System and Kernel Downloads page
in the official Glass documentation. Scroll down past the warnings and download
Now the scary part: flash the rooted bootloader and downgrade to XE12. This is the step that voids your warranty and could brick your Glass. It also erases any data on Glass, so download your photos and video before flashing.
The instructions for flashing these images to Glass is on the very same page. Run these
commands using the
fastboot tools included with the
Android SDK. These instructions work best from
Linux, so flash from there if possible.
Note If you’re flashing from a Mac, Glass might crash after each
fastboot flash command.
If this happens, take a deep breath, power cycle Glass, and use
adb reboot bootloader to get back
into fastboot. Proceed to the next image.
Your Glass is now running XE12. You should see the XE12 log in screen.
Don’t log in yet. You need to disable updates first.
Once you log in, Glass automatically updates to the latest version. You don’t want this, so we need to
disable updates. Unfortunately, we need
adb access to disable updates. You can work around this, but
it requires some silly tricks, and an wifi network that you can disable quickly.
GlassUpdate.apkto disable automatic updates, and restart Glass.
Automatic updates are now disabled. You can add your primary wifi network to Glass.
Note: This is a pretty aggressive way to disable updates. I tried other techniques, like
disable com.google.glass.update, but nothing else I tried persisted across restarts. If you
figure out a better option, please
let me know.
The built-in Glass settings software does not know how to pair with Bluetooth HID devices, but HY and PY from the Glass team showed us how to do this in the Hacking Glass session at Google I/O in 2013.
Settings.apk. You can build it from source or download a binary from a trustworthy source.
Settings.apkand fire off an intent to start it up.
adb input keyeventto simulate arrow key movement.
At this point, you may notice that the settings card is broken. You have two apps that respond to the settings intent, but the intent chooser is broken in XE12. To work around this, you can install an alternative launcher like Mike DiGiovanni’s Launchy. Follow these steps to install it.
MainActivity.java, and remove all of the code that refers to any class in the
You can now tap through the Glass main menu to start Launchy, and Launchy can start Glass’ default settings app.
At this point we have a Glass running XE12 with a paired keyboard, but none of the built in software responds to text input from a keyboard. To make your Twiddler useful on Glass, you need a keyboard friendly app. What better app to install than the Android variant of Vim?
Clone VimTouch, build it from source, and install it on your Glass.
It runs great, and you can verify your keyboard input right away. It also shows up in Launchy, so you can start it that way in the future.
Is your Glass still working? Great! You’ve rooted it, downgraded it, disabled automatic updates, and typed characters into the best text editor in the world. Congrats!
But the story isn’t over yet. Launching VimTouch from the touchpad is a little bit clunky, and the Glass home app starts each time Glass wakes up. It’s not a useful note taking device yet. We need a way make a sticky text editor that continues across sleep cycles, and a way to launch apps from the Twiddler.
I’ve worked out solutions for both of these, but they’re a story for another blog post. If you’re interested in a writeup, please tweet at me.
The Raspberry Pi is awesome. One of the reasons that it’s awesome is because it’s so newbie friendly, and has great docs. For example, it has a great guide on creating an SD card image from OS X.
But, that guide does have one problem. The way they tell you to use the
dd tool results in a very
Here’s what happened when I followed the instructions to install Raspbian on a cheap SD 16 GB SD card.
2903 seconds? That’s like 48 minutes. That’s almost an hour! But, but, but I want to be hacking sooner than that.
Luckily there’s another way! OS X provides
r stands for raw and provides a
more direct interface with the SD card. In this case, more direct = more faster.
The same copy took just over 10 minutes. Not too shabby.
Some Stack Overflow answers indicated that using bigger chunks might speed things up even more. I gave it a try.
The result is almost exactly the same. It seems that block size does not matter too much.
dd is a neat tool, it’s hardly verbose. Sometimes it’s hard to tell if it’s working hard, or if
the process is hung (which can happen if your computer goes to sleep).
You can query it for a status update by pressing
CTRL + T.
Thanks to that goes to this superuser answer.
The Twiddler 3 is the most flexible single-handed wireless input device that I have ever used. It has some rough edges, and it requires significant time investment to learn, but it’s worth it.
It’s a handheld chorded keyboard. Instead of pressing down on a single key to make a letter, on a Twiddler you lift multiple keys to make a letter (or sequence of letters).
The Twiddler 3 works as a USB or Bluetooth keyboard. It’s targeted at use for mobile devices and wearables.
The box contains the Twiddler 3 keyboard, a velcro strap, and a MicroUSB cable. I didn’t take any photos, but there are already unboxing videos on YouTube.
After flipping that little switch to power it up, mine started looking for a device to pair with. I was mashing the keys and typing gibberish into my laptop within a minute of opening the box. The unboxing experience is great.
This is where the polish starts to end, and the mildly rough road begins.
The next thing I wanted to do was verify that the Twiddler could pair with all of my tiny computers. You know, the mobile
phone kind. This was when I realized that the box didn’t contain any printed instructions. A quick web search turned up the
official docs. They’re a bit disorganized and hard to read, but after a few
minutes of clicking around I learned that I could clear the paired state with the
It paired easily with my Moto X, 2013 Nexus 7, and iPhone 6+. It did not pair as easily with
Google Glass, but that’s a story for another day. (Literally another day: I’m drafting a follow up blog post about using the Twiddler 3 with Glass right now.)
This may seem like a no-brainer, but my instincts lead me astray here. Initially I grabbed it with my right hand and tightened the velcro band. The docs have detailed guidance about how to hold the Twiddler. The tl;dr: is to hold it with your non-dominant hand, and leave the velcro band pretty loose.
The recommended grip wasn’t very comfortable for me, so I swapped out the velcro for a strip of elastic and gripped it with my thumb.
One of the coolest things about the Twiddler 3 is how configurable it is. The layout is easily programmable with the tuner web app.
Don’t be afraid to experiment with your layout right away. Your layout is a very personal choice. Lots of people like the default one, espiecally those who type with their left hand, but I found it difficult to learn and uncomfortable.
Try these popular layouts.
If none of those work for you, write your own. I did.
Expect to invest a lot of time in being productive. Research indicates that you’ll probably get pretty fast, but expect to practice, a lot.
There’s a tutor web app. It works OK, but I gave up on it for a few reasons.
Instead, I learned from lots of short practice sessions:
After a couple weeks, I got up to about 20 wpm.
I know what you’re really wondering, can it type emoji? Can I use a single chord to (╯°□°）╯︵ ┻━┻?
Well, no. The tuner does not approve of table flipping. It gets all scrambled when you save it.
And it might be moot, because I’ve been told that the Twiddler itself may have trouble flipping tables… something to do with the HID spec. Anyway, if I figure out a way to hack around it, I’ll post a follow up.
Becoming awesome with it is hard, but it’s worth it.
Oh, and if you get lonely, drop by the Google+ Wearable Computing community. It seems to be the best place to talk about general purpose werable computing, and input devices like the Twiddler.