Retour aux articles
📚

Jailbreaking a Kobo Aura 2 e-reader

5 min de lecture

A few years ago (back in 2016), I got an e-reader as a gift. I was a casual reader, a big nerd, and this device could store hundreds of books in under 200g so it seemed like a good deal at the time. I recently found it again and, since I wasn't using it anymore, decided to do something with it.

A few searches later, I found out I was far from the first. There are whole communities on modding forums dedicated to this kind of thing. People take it seriously!

So the plan: jailbreak the Kobo and turn it into a small weather station. Directly inspired by the work of KevinShort and Matthew Petroff:

Kevin Short's Kobo Wifi Weather Forecast
Kevin Short's Kobo Wifi Weather Forecast
Matthew Petroff's Kindle weather display
Matthew Petroff's Kindle weather display

Both have a bit too much going on for my taste. When I check the weather I want today's info, and maybe the temperatures for the next few days. So: something simpler, with room for a personal touch at the bottom (you'll see!).

1. Installing YAWK

When I started this project I had no idea what I was doing. I didn't know how a Kobo worked under the hood, what was inside, whether it ran a proprietary OS or some stripped-down Linux.

After a bit of searching, I found YAWK, a project very close to what I had in mind and much more recent than the others.

First thing to do: install it and check if it works on my model. Fortunately for me, the docs are pretty clear. Here's the process.

1. Factory reset the e-reader

Optional, but good for starting clean and making sure there's enough storage. If you have e-books you want to keep, back them up first.

2. Install NiLuJe's Stuff on the device

NiLuJe is a well-known name in the e-reader modding world and is very active on MobileRead. He developed FbInk, a tool for drawing shapes and text on e-ink screens, and published several jailbreak tutorials for Kobo and Kindle devices.

I'm using a package he made called "Kobo-stuff" to mod the device without too much hassle.

Up-to-date download links are in this thread:

Aura H2O Yet another telnet/sshd & misc tools package... - MobileRead Forums

Aura H2O Yet another telnet/sshd & misc tools package... Kobo Developer

www.mobileread.com
Installing it is stupidly simple. Kobo e-readers have a slightly dumb boot behavior: if a compressed archive named KoboRoot.tgz is at the root of the device at startup, it triggers an update process automatically.

If it goes smoothly, the device reboots normally and nothing looks different. But something changed.

3. Installing YAWK

For this step you'll need an FTP client like Filezilla and a Telnet client.

I connect the e-reader to the same Wi-Fi as my PC, then grab the IP address under Settings > Device information > IP address.

If step 2 worked, we can connect to the device remotely. In Filezilla, I create a .apps/yawk directory and copy the whole YAWK repo into it.
Heads up! If you're on Windows, your files probably have CRLF line endings. Linux only handles LF. Convert them with dos2unix before copying.

Then I open a Telnet session and run:

  • tmux new -s kobo update-kobostuff Python (install Python 3)
  • cd /mnt/onboard/.apps/yawk (go to the YAWK directory)
  • sh install.sh (run the install script)
The script asks for an OpenWeatherMap API key and the city ID you want to track.

OpenWeather APIs for Weather, Energy, and Environment

OpenWeather provides global APIs for weather, environmental, and energy data, including current conditions, forecasts, historical weather, air pollution, solar radiation, road risk, and solar energy insights. Built for developers and businesses, our platform offers reliable data access, broad product coverage, and flexible self-service tools to support apps, analytics, operations, and decision-making.

openweathermap.org

At the end of the script, the device reboots and…

First successful test: the interface displays correctly on the e-reader.
First successful test: the interface displays correctly on the e-reader.

It works!

2. Customizing the interface

With arbitrary content now displayable on the screen, I start tweaking. First I trim down the amount of info shown. I edit weather.py and yawk.py a bit and get to something I like pretty quickly:
Instead of showing a 5-day forecast, I now display detailed info for today and just the temperature + weather icon for the next 3 days.
Instead of showing a 5-day forecast, I now display detailed info for today and just the temperature + weather icon for the next 3 days.

There's a big empty space at the bottom of the screen. Enough room for a widget showing pretty much anything. Some ideas:

  • Smart home status: which lights are on or off, battery levels for headphones/phone/laptop, electricity consumption
  • Missed notifications
  • Random photos from my favorites (even in black and white)
  • To-do list
  • Upcoming calendar events
  • …

My girlfriend suggested adding a small message box she could update. Good idea, and not much work, so I went ahead.

The plan: a small API the e-reader polls, and a simple page to write the message.

Project architecture: a Next.js API acts as the glue between the management interface and the e-reader.
Project architecture: a Next.js API acts as the glue between the management interface and the e-reader.

I went with my usual stack: Next.js and Vercel. It covers both the frontend and the API, deploys in one click, and it's free. Vercel's KV Storage means no database to manage.

I also set up a simple webhook to a Discord channel to keep a message history.

Result:

Mini-site for writing a custom message
Mini-site for writing a custom message

Then I built the interface on the e-reader. I prototyped the layout in Photoshop, exported the static parts as a PNG, and measured where the text should go. I wrote a small function for automatic line breaks so nothing overflows.

Transferred everything, got caught by line endings again (of course), and after a bit of wrangling, the final result:

Final result: the e-reader now displays the weather and personalized messages.
Final result: the e-reader now displays the weather and personalized messages.

Pretty happy with how it turned out :)