It seems that I have picked mid-Summer to catch a cold (at least I’m not testing postitive for COVID yet), so yesterday I decided to complete some low-impact TODOs I had been postponing for a while.
The Fedora container I set up on a lark a few months ago sort of became my personal desktop environment that I use from literally everywhere to run OpenSCAD, SuperSlicer and even Blender (neither of which I can run on my iPad), and I sometimes want to have quick access to it.
I have a 27” 2560x1080 monitor that I’ve mostly been using with the Xiaomi Mi Stick to watch the news and the Z83ii that I recently sent on a solar panel debugging expedition was sitting on my desk, so everything seemed to come together neatly.
However, I wasn’t able to get my rewardingly noisy and cheap Bluetooth keyboard to work with it (I’ve had numerous tussles with the Z83ii hardware before around wireless), so I dug out a Raspberry Pi 3A+ I had set up as a Lakka box a couple of years back and had fallen in disuse1.
It (or a Zero 2 W) are more than enough to drive a 2560x1080 ultrawide display and render remote applications very snappily over a Wi-Fi connection, and this is one of the few use cases where its 512MB of RAM are plenty.
This time I didn’t bother with overly elaborate customization or going down to the framebuffer–flashing the 32-bit Raspbian image onto an SD card and disabling the new OpenGL driver so I could tune the resolution by hand did 99% of what I needed:
# snippet from my /boot/config.txt disable_overscan=1 hdmi_force_hotplug=1 hdmi_drive=2 hdmi_group=2 hdmi_mode=87 hdmi_aspect_21_9=7 # This is an LG 29WL700 (older revision), so it can do 60Hz # but the Pi 3A+ has trouble with this kind of clock tweaking, so I've set it to 59Hz hdmi_cvt=2560 1080 59 7 0 0 1 # ...and it needed some careful clock timings (clock ≃ width * height * framerate) hdmi_pixel_freq_limit=220000000 # Boost the signal a little config_hdmi_boost=4 max_framebuffer_width=2560 max_framebuffer_height=1080 framebuffer_width=2560 framebuffer_height=1080 dtparam=audio=on # disable new driver #dtoverlay=vc4-kms-v3d
The rest was mostly replacing Chromium with Epiphany (which is enough for accessing Jupyter notebooks, router status pages and the like), installing Remmina and taking all of 30 seconds to set up my keyboard and my M720, because Raspbian Bluetooth support is just excellent.
For good measure, I also added Tailscale since I also want to access some of my Azure boxes, but were it not for force of habit and my particular needs, 100% of this could be done via the GUI and would “just work” out of the box.
I had a few issues with audio, because Remmina at first apparently refused to play audio from my remote server. That turned out to be due to a pending update and was fixed with a restart, but it was a bit annoying.
In the process of debugging it, however, I realized you can now switch your audio output to and from HDMI by just right-clicking on the speaker icon in the tray, which is a nice touch in Raspbian.
For a completely silent, essentially throwaway setup, this has a lot of bang for the buck.
It bears noting that the Pi 3A+, even over Wi-Fi, is more than fast enough to give me very low input latency, tolerable full window dragging at 32-bit color depth and even the ability to watch (and listen to) YouTube videos in a pretty smooth way on both Linux and Windows remote servers–that is because Remmina is now capable of negotiating GFX acceleration, and it shows when I play video or rotate OpenSCAD objects in the editor (it’s not buttery smooth, but it works fast enough to not break my flow).
This makes using a thin client all the more appealing, and given the time I spend using RDP on my iPad alone I should probably spend some time investigating an upgrade to my six-year-old closet server, especially since I know
xrdp now has some support for GPU acceleration.
But I’m not made of money, and there is plenty more to do in the meantime…
Update, Sep. 2022: I needed to re-purpose the 3A+ for a small hardware project, so I just popped the SD card into a “normal” Pi 3B and plugged it in via Ethernet. The added RAM and throughput made things noticeably faster when remotely playing audio and video, and I can also run Epiphany quite well if I need to access a web site directly. I also took some time to try a Raspberry Pi 2, with an equal amount of success. However, since the 2 does not have Bluetooth, I am sticking with the 3 for the moment – but if you happen to have another computer alongside, using its keyboard and mouse over Barrier works fine as well.
So if you have a slightly older Raspberry Pi around that hasn’t been press-ganged into service, consider setting up something like this.
Update, Oct. 2022: I needed to build a 64-bit version of this so I could plug in a USB device, so I flashed 64-bit Raspbian into an SSD, plugged it into a Raspberry Pi 4, and there was no practical difference in rendering speed even when plugged in via Gigabit Ethernet, so I’d say the Pi 3 is more than enough for this resolution and the i7 server I’m using. A point of note, though, is that the 64-bit display driver did not require any tweaking for my ultrawide.