I recently was browsing eBay for used computer parts (as one does) and I found how cheap some used thin clients are. These are mini desktops with minimal IO which are designed to act as a modern terminal for modern VDI setups, something like Citrix or Microsoft Remote Desktop based enterprise systems. The thin client itself just has to deal with the local displays, keyboard, mouse, and local USB ports, the actual computation is done on a server somewhere else. This is all well and good, but a lot of these thin clients run Linux themselves, and we can repurpose them to run our own Linux environment for whatever we want. They’re also dirt cheap, presumably since the specs are pretty terrible if you want to use it as an actual desktop, but thankfully that’s not what I want to run at all

The Specs

The model I ended up with is A Dell Wyse 5060, which features an AMD Puma based quad core APU, 4GB of RAM, and a 16GB SATA SSD. It also includes a power supply, a somewhat rare find for it’s $35 shipped price. It’s very important to look at the specs of what you’re getting, since I found a ton of them with 2G of RAM and no SSD or an even smaller SSD. Expect none of the parts to be upgradeable, and 2G is a bit low these days. Many also have dual-core Atom CPUs, which use less power than the AMD Puma, but the Puma is functional as a desktop CPU in Linux.

Basically, this is a step up from a Raspberry Pi, but it costs less and you can buy it today. Consider it as an alterative for Raspberry Pi projects that don’t need IO or can benefit from gigabit, dual DisplayPort, or USB 3.

How to Install your own Software

By default, the BIOS is configured for legacy (non-UEFI) boot, and USB boot is disabled, so we need to fix both of those things. To enter the BIOS, press the DEL key while booting, and enter the BIOS password Fireport (capital F). From there, go to the Advanced tab and enable boot from USB and also set boot mode to Both. Then, go to the boot order tab and make the USB HDD higher than SATA 0 (by moving SATA down or USB up, using the +- keys). Save and exit. This should allow you to boot into a bootable USB drive and install whatever you want

Teardown Video

I made a video showing the hardware inside my thin client, if you’re interested in seeing a teardown, or watching the BIOS configuration. Click the thumbnail below to watch it. Video Thumbnail

My Plans

I bought this to use in my new studio space as a screen recorder. Basically, I’d have a USB HDMI capture device connected, so I can record directly to a network drive. I was able to set this up really easily by installing Xubuntu and OBS Studio, and the Puma CPU’s integrated graphics enabled transcoding seemed to work well enough to handle 1080p30 without a major sweat from the thin client. The CPU also has enough power to handle x264 software encoding, but it uses almost all of the CPU to do so.

Hardware Info for the curious

All of this was taken via an Xubuntu 20.04 Live CD, so your kernel may be configured slightly differently

lscpu

Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   40 bits physical, 48 bits virtual
CPU(s):                          4
On-line CPU(s) list:             0-3
Thread(s) per core:              1
Core(s) per socket:              4
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       AuthenticAMD
CPU family:                      22
Model:                           48
Model name:                      AMD GX-424CC SOC with Radeon(TM) R5E Graphics
Stepping:                        1
CPU MHz:                         1000.000
CPU max MHz:                     2400.0000
CPU min MHz:                     1000.0000
BogoMIPS:                        4791.14
Virtualization:                  AMD-V
L1d cache:                       128 KiB
L1i cache:                       128 KiB
L2 cache:                        2 MiB
NUMA node0 CPU(s):               0-3
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled v
                                 ia prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user
                                  pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full AMD retpoline, STIBP disabled,
                                  RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtr
                                 r pge mca cmov pat pse36 clflush mmx fxsr sse s
                                 se2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtsc
                                 p lm constant_tsc rep_good acc_power nopl nonst
                                 op_tsc cpuid extd_apicid aperfmperf pni pclmulq
                                 dq monitor ssse3 cx16 sse4_1 sse4_2 movbe popcn
                                 t aes xsave avx f16c lahf_lm cmp_legacy svm ext
                                 apic cr8_legacy abm sse4a misalignsse 3dnowpref
                                 etch osvw ibs skinit wdt topoext perfctr_nb bpe
                                 xt ptsc perfctr_llc hw_pstate ssbd vmmcall bmi1
                                  xsaveopt arat npt lbrv svm_lock nrip_save tsc_
                                 scale flushbyasid decodeassists pausefilter pft
                                 hreshold overflow_recov

Of note, it does support AMD-V if you want to do virtualization, and AES-NI if you want to do anything involving crypto offload (VPN, HTTPS, …)

lspci

00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Root Complex
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Mullins [Radeon R4/R5 Graphics] (rev 01)
00:01.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Kabini HDMI/DP Audio
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Host Bridge
00:02.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 16h Processor Functions 5:1
00:02.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 16h Processor Functions 5:1
00:02.3 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 16h Processor Functions 5:1
00:02.4 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 16h Processor Functions 5:1
00:02.5 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 16h Processor Functions 5:1
00:08.0 Encryption controller: Advanced Micro Devices, Inc. [AMD] Kabini/Mullins PSP-Platform Security Processor
00:10.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB XHCI Controller (rev 11)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 39)
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 39)
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 39)
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 42)
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD] FCH Azalia Controller (rev 02)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 11)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 16h (Models 30h-3fh) Processor Function 5
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

As you can see, it uses a Realtek Ethernet Controller

vainfo

error: XDG_RUNTIME_DIR not set in the environment.
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Mesa Gallium driver 21.0.3 for AMD KABINI (DRM 2.50.0, 5.11.0-27-generic, LLVM 12.0.0)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileNone                   :	VAEntrypointVideoProc

Hardware encode/decode is certainly usable for H264