A FreeOTP token receiver for Linux
Switch branches/tags
Nothing to show
Clone or download
Latest commit 3661895 Feb 27, 2018
Failed to load latest commit information.
.gitignore Initial commit Jul 9, 2015
COPYING Initial commit Jul 9, 2015
README.md Update README.md Feb 27, 2018
jelling.c Change flag to secure-write Feb 27, 2018
jelling.conf Initial commit Jul 9, 2015
jelling.service.in Initial commit Jul 9, 2015
meson.build Add Bluez versioned dependency Feb 27, 2018


Jelling is a simple daemon for Linux which receives OTP tokens from FreeOTP.


* systemd >= 221
* bluez >= 5.42

How to Build and Install

# meson build
# ninja -C build
# ninja -C build install

How to Run

  1. Start and enable Jelling:

    systemctl enable --now jelling.service

Test Results

Device OS Adv. Connect Discovery Pair GATT
iPhone 6+ iOS 11.2
Nexus 5x LineageOS 14.1
Pixel Android 8.1 beta

How to Test

  1. Make sure your phone and computer are NOT paired.

  2. Start Jelling on your computer.

  3. Install and open LightBlue on your phone.

  4. Does LightBlue see your computer within a few seconds (<30)? If so, advertisement is working.

  5. Click on your computer in LightBlue. Does it successfully connect? Do you see Jelling among the list of services? The Jelling Service UUID is: B670003C-0079-465C-9BA7-6C0539CCD67F. If so, connection and service discovery are working. If not, you'll have to get Bluetooth packet logs to see whether connection or service discovery is failing.

  6. Click on the service. Do you see the Jelling characteristic? The Jelling Characteristic UUID is: B670003C-0079-465C-9BA7-6C0539CCD67F. Is it listed as write-only? If so, discovery is working.

  7. Attempt to perform a write operation in LightBlue against the characteristic. A good test value is 30 (which is hex for 0 in ASCII). Does the device attempt to pair? Does it succeed? If so, pairing is working.

  8. If pairing succeeds, perform the previous step again. This time, instead of pairing it should perform the actual GATT write. Does your computer type 0? If so, the GATT write is working.

  9. Submit a pull request which updates the above table with your test results.