I built a Linux tray controller for my Dasung Paperlike, serial control + an experimental ghost estimator that cleans areas locally
I have a Dasung Paperlike HD 13.3" (40 Hz, HD-FT with frontlight) and the official tools are Windows-only, so over the last months I wrote a Linux tray app for it, called dasungctl (eink-dasung-control on github).
Serial side (no kernel module, no vendor binary, it speaks the monitor's CH340 protocol):
- display mode, contrast, speed, the ten frontlight levels, frontlight mode and a custom color temperature;
- soft and hard refresh, plus an auto-refresh timer for when you leave a terminal open;
- a Controls… window with sliders and live values; the last configuration is restored at startup;
- dasungctl doctor for serial diagnostics.
The interesting part: an experimental ghost estimate. It captures the image shown on the panel (X11 region; on KDE Wayland through the ScreenCast portal) and keeps a low-resolution model of what the panel is probably still showing:
- it tracks both polarities: dark residue left on light content, and light residue on dark content — the latter also includes dark ink that was just drawn and is not fully saturated yet, so it has to be judged on the panel;
- it lists the ghost areas with the application that was over them, their severity, polarity and age, on a ghost-only preview (not a screenshot of the desktop);
- for the areas it estimates, it can flash them locally white/black through a borderless overlay, so the controller rewrites just those pixels. The confirmed protocol has no regional refresh command, so I didn't invent one; the physical efficacy has to be judged on the panel, and a heavy ghost still needs a global refresh;
- the model is an estimate, not a measurement: the physical C button is invisible to it (there's a "Reset estimate" for after you use it). The model constants are still assumptions to calibrate, which is why it's opt-in.
Tested on Linux Mint (Cinnamon, X11) and Fedora KDE (Wayland). On Wayland the labels come from KWin scripting, and local clearing uses layer-shell, KDE and wlroots work, GNOME doesn't expose layer-shell so there clearing is unavailable (everything else works).
Confirmed only on the Paperlike HD Revolutionary 13.3" (40 Hz, protocol 0x30, HD-FT variant). Other Paperlike models and protocol families need their own calibration profile, all panel-specific tables are in one place, so adding a model means capturing the same evidence and filling them in.
It's alpha and open source (Apache-2.0).
If it's useful to anyone here: search for eink-dasung-control on GitHub (no link in the post to respect the subreddit rules, it's in my profile, and I can drop it in a comment if the mods allow). Feedback from other Dasung owners, especially with other models, would be very welcome.