Remote Endeavors

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 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 , and even (neither of which I can run on my iPad), and I sometimes want to have quick access to it.

Hardware

I have a 27” 2560x1080 monitor that I’ve mostly been using with the to watch the news and the that I recently sent on a was sitting on my desk, so everything seemed to come together neatly.

However, I wasn’t able to get my to work with it (I’ve had numerous tussles with the 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.

Software

I didn’t bother with overly elaborate customization–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 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.

Audio

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.

Performance

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 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 , 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.


  1. Ironically, this was one of the boards I have run on and used as a very similar SSH/VNC terminal before. It even has a cutesy 3D printed case that is half the size of a power brick, so it can be hidden away anywhere. ↩︎

This page is referenced in: