It's not done often, as not many people must run 30 individual desktop sessions on a single server box at the end of the day.
Procedures are more or less same for every Unix or GNU/Linux systems. You somehow get dozens of display outputs, give Xorg with necessary config as to where to output and what input to watch, and run it. Unix and Linux are a multi-user operating systems so there's no inherent problem with it. Windows can do the same using the feature called Terminal Service. macOS Server had the same kind of feature years ago.
On GNU/Linux, DisplayLink(not to be confused with DisplayPort) USB graphics adapters should work for this, or virtual framebuffers using Xvfb can be used to connect over VNC or RDP. Or some sort of PCIe hub can be used to connect grapevine full of Quadros. Whatever.
The practicality problem of it is user experience tends to be rather suboptimal due to collectively massive issues, from network overheads, hardware acceleration issues or lack of support for it, workloads of sysadmin to constantly fighting outages, cost of client console hardware that aren't supposed to be full standalone computers but virtually it, etc.