We were impressed with [moononournation’s] tiny thin client project. It claims to use an Arduino, but as you might guess it is using the Arduino software along with a network-enabled microcontroller like an ESP32. The impressive part is that it is standards-compliant and implements VNC’s RFB protocol.
The original coding for RFB on Arduino is from [Links2004] and armed with that, the thin client is probably easier to create than you would guess. However, this project wanted to use a larger screen and found that it led to certain problems. In particular, the original code had a 320×240 display. This project was to use an 800×480 display, but with the limits on the ESP32, the frame rate possible would be under 7 frames per second. The answer was to combine a 16-bit parallel interface with better compression back to the VNC server.
The little keyboard is probably not very practical, but it is compact. That would be another easy thing to modify. Currently, the keyboard uses I2C, but it would be straightforward to change things up. This would be a worthy base to build a bigger project on top. A 3D printed enclosure would be nice, too.
We’ve seen a number of projects built around commercial thin clients. Some from defunct businesses are good sources for obscure parts, too.
It would be great if it were possible to virtualize a GUI application to somehow “project” its display directly to a VNC channel. This could be an easy-to-implement thick client app (think GTK, WinForms etc.) that uses this ultra-thin client just for the display and limited interaction: say, a 1.3″ e-Ink or OLED with a couple of buttons (not a real keyboard) would suffice for many uses but if the app itself runs on Windows or Linux or Mac it would be significantly easier to develop, would be less limited by hardware (could even run in the cloud for those who like clouds) etc. Also, in many cases frame rate wouldn’t be an issue, for example I’d want to have the current time, temperature and weather report shown on the screen and have a couple of buttons to change display modes. If seconds are not shown, the display would refresh once per minute or when the user clicks a button.
x11vnc is essentially that https://github.com/LibVNC/x11vnc
There’s a starting point:
https://github.com/BioDepot/GUIdock-VNC
Great stuff, thanks for the suggestions! I completely forgot about X, that one was made to do exactly this kind of thing and reviving it in VNC-compatible form is brilliant.
The Minitel in 2022.
No, it doesn’t try to stuff your phone bill with expensive minute-based slow services :-)
Then it’s Bildschirmtext (BTX) with a “free” Gastzugang (Guest Access)? 😜
Oh man, this would have had me so excited 20 years ago. It was my goal to have one big powerful computer and a terminal in every room. That kind of lost it’s appeal when my phone became the portable, wireless terminal that is always with me. I guess though, an affordable, power sipping solution like this wouldn’t have existed before the same advances that made my phone possible so I guess it just wasn’t to be…
Found Larry Ellison’s account.
You database is good, your apps stink to heaven.
Another possible solution if the GUI application in question is one you’re writting yourself would be something like a lilygo t-display being driven from the host using belay (it was featured on hackaday recently). If you didn’t see it essentially belay allows you to command a board with micropython directly from a python script running on the host machine. I’ve only just started playing with it, so can’t really comment on performance, but I have got my display up and running and given it’s methodology I can imagine it being more responsive than a VNC with a lot lower overheads on both sides.