i’ve used thin clients at home for quite a while - both for their intended use (remotely accessing a desktop of another system); and in the sense of “modern thin clients are x86 boxes that are wildly overpowered for what they run, so they make good mini servers.”
recently, i saw a bulk lot of Sun Ray thin clients pop up on Trade Me (NZ’s eBay-like auction site) - and with very little idea of how many clients were actually included in this lot, i jumped on it. after a 9 hour round-trip drive (on some of the worst roads i’ve seen!), i returned home with the back of my car completely packed with Sun Rays. time for some interesting shenanigans!
sections
cataloguing the haul
when picking all of these up from the seller, i had guesstimated there was maybe 30 clients in total. turns out i was off by quite a bit.
i ended up bringing home:
- 12x Sun Ray 2
- 12x Sun Ray 2FS
- 11x Sun Ray 3
- 4x Sun Ray 3+
- 3x Sun Ray 270 - 17” (1280x1024) LCD screens with integrated Sun Ray clients
- 4x Incarta Uvo - 24” 1080p LCD screens with integrated clients
- i can’t find any info about these other than the linked page on the Wayback Machine - if you know more about these, please send me an email!
- about 40 smart cards, for authentication/hotdesking
- a small pile of Sun Type 7 USB keyboards, and some Sun-branded optical mice
so that’s 46 clients all up!
a few days prior to picking all this up, i rented a storage unit in a local facility, and put some garage shelving units in there - and boy howdy i’m glad i did!
setting up the Sun Ray Server Software
looking at the Oracle (eugh.) documentation for the Sun Ray Server Software, it appeared there were two options: run it on ancient Linux, or run it on ancient Solaris. Oracle dropped support for the Sun Rays in 2014, as part of extinguishing everything Sun Microsystems stood for after the 2010 acquisition. i didn’t really want to have a RHEL 6 box kicking around, nor did i want to deal with trying to make Solaris 10 work in a VM on my home Proxmox cluster, so i did some digging.
enter illumos - well, in my case, OpenIndiana. illumos is, essentially, a fork of the pre-Oracle-acquisition OpenSolaris codebase. OpenIndiana is one of many illumos distributions (in a very similar sense to Linux distributions), and OpenIndiana is more suited for desktop use than most other illumos distributions. the OpenIndiana documentation has a section on setting up the Sun Ray Server Software on OpenIndiana, but even with that in hand there was a lot of pieces to figure out on my own!
this is mostly a copy of the docs from the OpenIndiana handbook, with some adjustments to fix things i ran into. i did this on top of a text-only install - OpenIndiana Hipster 2025.04 Text Install DVD (64-bit x86) was the install media i used (from https://www.openindiana.org/downloads/).
to get the desktop environment installed:
unlocking the dependencies for SRSS:
setting up the package source, and installing the SRSS dependencies:
after unpacking the Sun Ray Server Software installers (both the Solaris and Linux versions) into /root, i ran the update_dhcp_dependency script from the OI Handbook, then tried to install SRSS, which bombed out spectacularly with package manager rejections of the This version is excluded by installed incorporation consolidation/userland/userland-incorporation@... sort. so here’s the correct (read: “worked for me!”) steps:
to make SRSS happy with isc-dhcp:
then apply the needed patch to /opt/SUNWut/sbin/utadm:
now, get the ancient JRE in place:
and, since i wanted the web administration tools to work too:
i then configured the Sun Ray server:
and…
it fuckin’ worked!
getting the Sun Ray firmware in place
since i was using version 5.4.x of the Sun Ray Server Software, the client firmware wasn’t part of the install - from version 5.3 onwards, you had to have an Oracle support contract to get firmware updates. sigh.
thankfully, getting a 5.2.x release (with the firmware included!) wasn’t hard. i grabbed a 5.2.x release for Linux, found the RPM with the firmware in it (SUNWutfw04.3-50.i386.rpm), and extracted that with rpm2cpio.
the Solaris version of SRSS wants to find the firmware in a different place than the Linux version it seems - the Linux versions put it in /opt/SUNWut/lib/firmware, but on Solaris/OpenIndiana, it needs to be in /opt/SUNWutdfw/lib/firmware. easy enough.
once in place, this was all it took to set up the TFTP server, and make SRSS populate the right places with the firmware:
kiosk sessions
i wanted to use some of the integrated-into-screens Sun Rays to replace some of the Raspberry Pis (and old iMacs) around the house showing Home Assistant dashboards. i also wanted to set up the Sun Ray server so that when i inserted a particular smart card into a client, it would bring up an RDP session to my existing “desktop” (a Fedora VM running Xrdp).
these both turned out to be… interesting to get working.
RDP
the Sun Ray Server Software has a built-in method for connecting to Microsoft RDP servers - the Sun Ray Windows Connector, also known as uttsc. as you might have guessed, it’s broken as fuck on OpenIndiana, even putting aside the fact that the newest RDP server it knows how to handle would be in the Windows Server 2003 era.
so, let’s hack something together with XFreeRDP!
i wanted to be able to specify what RDP server each token would connect to. this was a fairly common use case back in the day, and some people wrote helpers to allow things like that - one of which being Daniel Cifuentes’ meta-kiosk, which i borrowed some ideas from.
after much trial and error, i got something working!
after throwing those in place, install the dependencies and configure the session:
then it’s just a matter of adding the needed data to each token, and assigning the tokens to the FreeRDP session:
upon inserting that token into a client…
success!
browser sessions
with much the same setup as the RDP sessions, it’s pretty easy to start a kiosk-mode Firefox, pulling the URL to open from the token data:
i needed to hide the mouse cursor, and unclutter simply does not work in Sun Ray sessions, so i went with an invisible cursor theme - https://github.com/l-theanine/invisible-cursor-theme works well.
a problem, though. Firefox would show its first-run “Welcome to Firefox” popup… every time. Sun Ray kiosk sessions run as a random user named utkuXX (where XX is a number), and after the kiosk session ends the home directory of the kiosk user gets fully deleted, so the user can be recycled for other sessions. given i wanted to use this with some always-on Sun Rays, with no input devices attached…
thankfully, Firefox policies allow turning that off! throwing this hunk of JSON into /etc/firefox/policies/policies.json fixed that:
and with that, i could create a token for an individual client (the tokens for this are pseudo.<MAC>, where the MAC is all lower-case), set that token’s “Other Info” field to the URL to show, and assign the kiosk session to that pseudo-token the same way as with smart card tokens.
where to from here?
this was a lot of fun to get working. i need to take a break from reading the Sun Ray Administration Guide though, so here’s my thinking for a potential part 2:
- i want to see how well the multi-head stuff works in SRSS - which joins multiple physical clients together into one desktop session, using the peripherals connected to the “primary” client. unfortunately the Xinerama support is weird (Xinerama and xrandr are mutually exclusive…), but if i can make it play ball it could be a neat thing to use.
- i want to try and find a newer firmware package too, but that might be a little bit of a lost cause, given i refuse to give Oracle a bunch of money.
- maybe i’ll set up another OpenIndiana VM and configure the HA failover in SRSS?
for now, though… that’s all.