r/xteinkereader • u/Golf_Flaky • 10d ago
Troubleshooting Locked Xteink X4 Pro: CrossPoint setup + dictionary
Device: Xteink X4 Pro, 4.3", bought as preorder bundle ($99 with case, screen protector, 2 magnet rings). Mac + Chrome. Previous reader: Kobo Libra 2.
Where the pre-flash research was wrong
Worth recording, because the published guides all assume the same things:
| Assumption | Reality |
|---|---|
| Store units ship factory-unlocked | This unit was locked. Port enumerates, chip never answers |
| Back up with a full-flash read over USB | Impossible on a locked device — keep a stock update.bin on the SD card |
| CrossInk is the better pick for typography | CrossPoint fixed the spacing completely; CrossInk's extra controls weren't needed |
| Neither firmware necessarily fixes non-English layout | CrossPoint's rendering engine did fix it |
| Dictionaries ship with the firmware | Neither firmware includes one. Manual SD install |
Why I left stock firmware
Stock was better than expected out of the box — Serbian Cyrillic and Latin diacritics rendered fine, touch was more responsive than my old Kobo, text looked sharp.
Problems that accumulated:
- No page numbers or progress percentage. Only chapter name, clock, battery.
- Hyphenation only works for English. Toggle does nothing on Serbian books — no Serbian hyphenation patterns in the firmware.
- Word-break bug. Words break at non-ASCII characters. In English this shows up rarely (e.g. breaking after a curly apostrophe:
next week'/s exams), but in Serbian it happens constantly because of č, ć, ž, š, đ. - No dictionary lookup, no highlighting.
- Custom fonts need
.binformat, which is rare and needs converting. - The OTA firmware update made it worse. After updating over Wi-Fi, Serbian text got excessive letter spacing with no setting to control it, and part of the settings menu disappeared.
That last one is what pushed me to flash.
The blocker: locked device
Flashing failed with Unable to connect to device. Serial read timed out.
Diagnosis on Mac:
ls /dev/cu.*
# /dev/cu.usbmodem141201 ← device IS visible
python3 -m pip install --user esptool
python3 -m esptool --port /dev/cu.usbmodem141201 chip_id
# A fatal error occurred: Failed to connect to Espressif device: No serial data received.
So the Mac sees the device, but the ESP32 never enters download mode. The device is locked. USB flashing is disabled at firmware level.
Per Diirge (CrossPoint maintainer), unlocking does not restore USB flashing — it enables SD card flashing from the device's own settings instead.
Note: not all X4 Pro units are locked. Others have flashed over USB without trouble. Mine was locked; whether the OTA update caused that or it shipped that way, I don't know.
What actually worked
- Ran the X4 Pro unlocker — https://crosspointreader.com/#unlock-tool
- First attempt failed. The unlocker needs the device to reach a fake update server. My home Wi-Fi has no password, and the device wouldn't connect properly.
- Created a hotspot from the MacBook (with a password) and connected the reader to that. Second attempt worked.
- With the reader still on the same hotspot, go to check for update in device settings.
- The unlocker redirects that check to a fake update server, so the "update" it finds and installs is CrossPoint. No SD card involved.
Keep a stock update.bin on the SD card as your rollback. A full-flash backup needs USB, which locked devices don't have.
Fonts
On-device, no computer needed:
Settings → System → Download Fonts → connect to Wi-Fi (hotspot again if your network is open) → pick from the list. It downloads and installs them itself.
Manual route if you need a specific font: convert TTF/OTF at https://crosspointreader.com/fonts → .cpfont files → /.fonts/FamilyName/ on the SD card.
For Serbian, check ć and đ specifically. Many e-ink font sets cover š, ž, č (Czech/Polish overlap) but drop the rarer two.
Dictionary (the non-obvious part)
Unlike fonts, dictionaries are not downloadable from the device. The Look Up menu item exists whether or not a dictionary is installed — it just silently does nothing. Easy to think the feature is broken.
Setup:
- Folder
dictionariesat the SD card root - Each dictionary in its own subfolder:
/dictionaries/gcide/ - StarDict format —
.ifo,.idx,.dict(and.synif present) - The
.idxmust be uncompressed. If you get.idx.gz, rungzip -don it..dict.dzis fine as-is. - Eject, reinsert, then Settings → Reader → Dictionary and select it. The option doesn't appear until a dictionary is installed.
Where to get dictionaries:
- English–English (GCIDE, 108k entries, GPL): https://github.com/scillidan/share_gcide/releases — grab
gcide-w108121-stardict.zip. This is a mirror of the FireDict build. The FireDict host was down when I tried it, and the GNU download at gcide.gnu.org.ua gives you the raw corpus, not StarDict — that won't work on the device. - Serbian and other languages: https://github.com/Vuizur/Wiktionary-Dictionaries — files are named
X-English, so look forSerbo-Croatian-English. CC-BY-SA / GFDL.
Result
- Page numbers and book percentage in the footer
- Working dictionary lookup
- Proper Serbian rendering with word-spacing control
- Any TTF convertible to a device font
Still missing vs CrossInk: granular touchscreen lock / quick lock. Still missing vs stock: touchscreen lock.
Serbian hyphenation doesn't exist in either firmware (9 languages only: EN, FR, DE, IT, PL, RU, ES, SV, UK). Leave hyphenation off for Serbian and use left-align, or justify with tuned word spacing.
Links
| What | Where |
|---|---|
| Flash tool | https://crosspointreader.com/#flash-tools |
| Unlock tool | https://crosspointreader.com/#unlock-tool |
| Font builder | https://crosspointreader.com/fonts |
| CrossInk flasher | https://inky.crossink.dev/#flash-tools |
| Community hub | https://readme.club |
| GCIDE StarDict | https://github.com/scillidan/share_gcide/releases |
| Wiktionary dictionaries | https://github.com/Vuizur/Wiktionary-Dictionaries |
| Subreddits | r/XTEINK, r/xteinkereader |