Skip to content

CNuhlar/kindle-rdp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kindle-rdp

RDP client for jailbroken Kindle e-ink devices. Connects to Windows/Linux desktops via Remote Desktop Protocol and renders the session on the Kindle's e-ink display with touch input support.

Features

  • FreeRDP 3.x based RDP client
  • E-ink optimized rendering via FBInk (A2 fast updates + periodic GC16 cleanup)
  • Touch-to-mouse input mapping with dead zone for accurate taps
  • On-screen QWERTY keyboard for credential entry
  • KUAL extension for easy launching
  • Single statically linked ARM binary — no dependencies on device

Requirements

  • Jailbroken Kindle (tested on Kindle Paperwhite, FW 5.16.3+)
  • KUAL installed
  • WiFi connectivity to an RDP-enabled host

Building

Requires the koxtoolchain kindlehf cross-compiler:

# Build the toolchain first (one-time)
./gen-tc.sh kindlehf

# Build all dependencies and kindle-rdp
./scripts/build.sh

This builds zlib, OpenSSL 3.x, FreeRDP 3.x, and FBInk as static libraries, then links them into the final binary.

Output: build/kindle-rdp/kindle-rdp and build/kindle-rdp/input-ui

Installation

# Package the KUAL extension
./package/package.sh

# Copy to Kindle (mounted as USB storage)
unzip -o build/kindle-rdp.zip -d /mnt/kindle/extensions/

Or manually copy:

  • build/kindle-rdp/kindle-rdpextensions/kindle-rdp/bin/
  • build/kindle-rdp/input-uiextensions/kindle-rdp/bin/
  • kual/ contents → extensions/kindle-rdp/

Usage

  1. Open KUAL on the Kindle
  2. Select Kindle RDPSetup & Connect
  3. Enter host IP, username, password, and optional domain via on-screen keyboard
  4. The RDP session renders on the e-ink display

Subsequent connections can use Quick Connect which reuses saved credentials.

Architecture

RDP Server → FreeRDP → GDI buffer (XRGB32) → grayscale conversion → FBInk → e-ink
Touchscreen → evdev → coordinate scaling → RDP mouse events → RDP Server
  • Single-threaded event loop multiplexing FreeRDP network events and evdev touch input
  • XRGB32 → 8-bit grayscale via fixed-point luminance: (77*R + 150*G + 29*B) >> 8
  • A2 waveform for fast partial updates, GC16 full refresh every 3 seconds to clear ghosting
  • Touch dead zone (15px) prevents accidental drag/select on tap

Project Structure

├── CMakeLists.txt              # Build system
├── cmake/kindlehf-toolchain.cmake  # Cross-compile toolchain
├── src/
│   ├── main.c                  # Entry point, arg parsing
│   ├── rdp_client.c/h          # FreeRDP client (callbacks, event loop)
│   ├── eink_display.c/h        # FBInk wrapper, refresh strategy
│   ├── touch_input.c/h         # evdev touch → mouse mapping
│   ├── pixel_convert.c/h       # XRGB32 → grayscale conversion
│   ├── input_ui.c              # On-screen keyboard
│   └── config.h                # Compile-time constants
├── scripts/                    # Dependency build scripts
├── kual/                       # KUAL extension files
└── package/                    # Packaging script

License

MIT

About

A poor attempt to port freerdp to kindle, just for fun

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors