Fun with Nano Server
virtuallyfun.com
virtuallyfun.com
The windows console host (conhost) provides the “UI” for nano server. Even on desktop Windows, it’s built with support for running without a window manager. The rendering engine is named “wddmcon” and it lives in our repository at [1]; it’s pretty much the most barebones console renderer we have. Reverse video and most color support were obviously[2] never implemented… even though I would have liked to spend engineering effort on it. The decision predates me, but I suspect it’s because they weren’t necessary for local validation.
Wddmcon eventually evolved into the rendering engine used in Windows Terminal[3]; it’s still not very good[4], but it works in conhost as well. Eventually, we can bring those changes or whatever future rendering engine we write back to wddmcon.
It has a sister renderer, “bgfxcon”. Bgfxcon renders text to the blue screen/boot graphics driver in the event that WDDM is unavailable.
If you manage to open multiple (full-screen) console sessions, you can flip between them using Alt-Tab. This service is provided by the “console I/O server”, a CSRSS component available only on Nano Server that mimics some of the user32 things conhost needs, such as keyboard input. It also handles brokering us a WDDM or BGFX handle on startup. Unfortunately, that one’s closed-source… not because it should be, but because disentangling the build process for a component that lives in CSRSS wasn’t on our critical path.
[1]: https://github.com/microsoft/terminal/tree/main/src/renderer...
[2]: which the article has already called out!
[3]: https://github.com/microsoft/terminal/tree/main/src/renderer...
Nano Server uses bgfxcon exclusively, as well as some magic in a "console keyboard driver" that I didn't know we had.
[1]: https://docs.microsoft.com/en-us/windows-server/get-started/...
[0]: https://docs.microsoft.com/en-us/windows-server/administrati...
https://docs.microsoft.com/en-us/virtualization/windowsconta...
Naturally on Azure, how the server looks like is meaningless when using AppService, AKS or Azure Functions.
A good thing too, because the driver installation tools from Dell for instance depend on these.
…on task manager, or on the wallpaper API? With how eccentric Dell drivers can be I feel like I have to ask.
Why is that? Isn't IoT Core free to use for hobbyists?
To be honest the whole experience was sub-par and I went back to using a GUI-less Raspbian install.
But that's "Best Practice" will all Windows systems ;)
>To be honest the whole experience was sub-par
Yeah, it's really nothing special..
Reminds me of back in 1999 or so, when me and a colleague was installing some additional workstations for a small company, about 20-30 employees. While there, the local IT guy asked us to take a look at the domain controller as it had been a bit sluggish and acting up lately. As customary for small shops, the domain controller also handled e-mail and was a print server.
The domain controller ran NT4, and as one usually does we started by firing up Task Manager to see what was running. There we noticed the CPU graph, which showed the uptime: 849 days...
We were so amazed the thing ran at all we almost didn't want to reboot it.
It's not really text mode though; you get a floating PowerShell window on a plain wallpaper after login. From there it's all PowerShell commands to configure and manage the server (or you do it remotely via the Server Manager GUI). Some limited built in tools work locally with their GUIs, but not many due to missing .NET framework components and Shell (aka desktop) hooks.
As it stands Linux desktops have too many issues and Windows is loaded with crap, so I am stuck on Mac as the best option.