Dell Wyse 3040

Several years ago I acquired a Dell Wyse 3040 Thin Client while I was doing some contract work. The company that I was working for was getting rid of several dozen of them and offered me one if I was interested. Right after that happened, I moved and it ended up in storage, and I only just recently rediscovered that I even had it. This turned out to be quote convenient because I was using a Raspberry Pi as a Pi-hole server on my network, and I needed to repurpose that device for something else, so I decided to use this system to replace it. Even though it is an old system that is end-of-life, it is still useful.

Out of curiosity I checked eBay for prices on these things and they are not expensive. You can probably get one for around $50 with shipping, and I found someone selling a batch of 1000 of them for $2100 ($2 per unit).

I am not exactly sure how it happened, but I seem to be down to my last Raspberry Pi 4. At one point I had three of them, one I was using for Pi-hole, and the other two were for emulating old game systems. I need the one that I am currently using for my Pi-hole server for another project, and I don’t want to cannibalize the other two for this purpose, so I wanted to find something to put Pi-hole on.

The first task I wanted to do was boot it up to see if it worked and to make sure it didn’t have any old admin passwords locking it down. Fortunately, it was restored to factory default before it was given to me, so that made getting it setup considerably easier.

Table Of Contents

Dell Wyse 3040 Thin Client

Hardware Specifications

The hardware for the Dell Wyse 3040 Thin Client platform is basic, but it is more than sufficient for its primary purpose of functioning as a thin client:

Component Hardware
Processor Intel Atom x5-Z8350 (Quad Core) @ 1.44 GHz
Graphics Integrated Graphics (supports dual display up to 2560x1600 @ 60 Hz)
Memory 2 GB DDR3L SDRAM @ 1600 MHz (non-upgradeable)
Storage 8 GB or 16 GB eMMC Flash Storage (non-upgradeable)
Operating System ThinOS, ThinLinux, Windows IoT, Linux
LAN Realtek 10/100/1000 Ethernet (RJ45 port)
WLAN Optional 802.11 a/b/g/n/ac wireless
Bluetooth Optional Bluetooth 4.0
Audio Realtek ALC5670 Audio
Connectors
  • 1 x USB 3.1 Gen 1 (Front)
  • 3 x USB 2.0 (1 Front, 2 Rear)
  • 1 x Audio Combo Jack (Front)
  • 2 x DisplayPort 1.1a (Rear)
  • 1 x RJ45 Port (Rear)
  • 1 x 5.5mm Power Connector Barrel (Rear)
  • 1 x Kensington Lock Slot (Side)
Power External 24 watt power adapter
Dimensions 101.6 mm x 101.6 mm x 27.94 mm / 4" x 4" x 1.1"
Weight 0.24 kg / 0.53 lbs
Colour Black

The Dell Wyse 3040 model that I have is limited to only 8 GB of storage and it is not easily upgradeable. I have read a few tutorials on replacing the soldered-on eMMC with something that has a larger capacity, but I don’t think it is necessary. I have no issues with doing surface mounted soldering (although it is not my favourite thing to do), but since I paid nothing for this system, I didn’t want to spend money replacing the eMMC. For the purposes of what I want to use the Dell Wyse 3040 for, 8 GB is perfectly fine and there are ways around the limited storage in most cases. If I am really struggling with log file storage, I will just attach a USB drive for additional storage or point it to my NAS if the log files are really that important (they probably aren’t).

The Dell Wyse 3040 supports Wifi and Bluetooth with an optional M.2 module that is present on the motherboard, and that is the Azurewave AW-CM389MA card. There are no external interfaces for connecting an antenna, they are internal only. Opening the system is extremely easy, and only requires a flat head screwdriver to remove the bottom of the case. There are only two screws total holding the motherboard to the case.

The Intel Atom x5-Z8350 processor is somewhat interesting for this system. It is technically a mobile processor, and it is somewhat constrained by the fact that it only supports 2 GB of memory, despite being a 64-bit processor. The processor supports several advanced features such as Intel 64, Intel VT-x, and Secure Boot. The virtualization features are not especially useful for this system, but is present, nonetheless.

There are no fans on the Dell Wyse 3040, it uses passive cooling. This isn’t an issue, and after running the system for a few days the average temperature of the CPU is around 52°C, which is well within the

I wanted to run a BIOS update to bring the Dell Wyse 3040 to the latest version, but it ended up not being necessary because the one that I have already has BIOS version 1.2.5. This is the currently the latest version of the BIOS, and it shipped on September 10, 2018. Since the Dell Wyse 3040 is end-of-life as of December 2021, this is the last version of the BIOS to be shipped for it.

Hardware Overview

The Dell Wyse 3040 Thin Client is unremarkable, the most notable feature about it is how small the device is:

Dell Wyse 3040 Thin Client - Front Ports.

Dell Wyse 3040 Thin Client - Rear Ports.

Dell Wyse 3040 Thin Client - Bottom. The slot to open the bottom of the system is in the upper left corner.

Normally I don’t disassemble computers to take photos like this, but since it is so simple to take the Dell Wyse 3040 apart, I decided to take a closer look at it:

Dell Wyse 3040 Thin Client - Motherboard (Top). The heatsink covers the CPU, eMMC and RAM chips.

Dell Wyse 3040 Thin Client - Motherboard (Bottom). The M.2 slot can be seen on the left side of the motherboard.

lscpu

Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         36 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  4
  On-line CPU(s) list:   0-3
Vendor ID:               GenuineIntel
  Model name:            Intel(R) Atom(TM) x5-Z8350  CPU @ 1.44GHz
    CPU family:          6
    Model:               76
    Thread(s) per core:  1
    Core(s) per socket:  4
    Socket(s):           1
    Stepping:            4
    CPU max MHz:         1920.0000
    CPU min MHz:         480.0000
    BogoMIPS:            2880.00
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable no
                         nstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes rdrand lahf_lm 3dnowprefetch epb pti ibrs ibpb stibp t
                         pr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms dtherm ida arat md_clear
Virtualization features:
  Virtualization:        VT-x
Caches (sum of all):
  L1d:                   96 KiB (4 instances)
  L1i:                   128 KiB (4 instances)
  L2:                    2 MiB (2 instances)
NUMA:
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-3
Vulnerabilities:
  Gather data sampling:  Not affected
  Itlb multihit:         Not affected
  L1tf:                  Not affected
  Mds:                   Mitigation; Clear CPU buffers; SMT disabled
  Meltdown:              Mitigation; PTI
  Mmio stale data:       Unknown: No mitigations
  Retbleed:              Not affected
  Spec rstack overflow:  Not affected
  Spec store bypass:     Not affected
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected
  Srbds:                 Not affected
  Tsx async abort:       Not affected

lspci

00:00.0 Host bridge: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SoC Transaction Register (rev 36)
00:02.0 VGA compatible controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller (rev 36)
00:0b.0 Signal processing controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Power Management Controller (rev 36)
00:11.0 SD Host controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SDIO Controller (rev 36)
00:14.0 USB controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series USB xHCI Controller (rev 36)
00:1a.0 Encryption controller: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Trusted Execution Engine (rev 36)
00:1c.0 PCI bridge: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #1 (rev 36)
00:1f.0 ISA bridge: Intel Corporation Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCU (rev 36)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)

lshw

H/W path                 Device            Class          Description
=====================================================================
                                           system         Wyse 3040 Thin Client (07C1)
/0                                         bus            0FRCPP
/0/0                                       memory         64KiB BIOS
/0/b                                       memory         2GiB System Memory
/0/b/0                                     memory         2GiB Row of chips DDR3 1600 MHz (0.6 ns)
/0/12                                      memory         224KiB L1 cache
/0/13                                      memory         2MiB L2 cache
/0/14                                      processor      Intel(R) Atom(TM) x5-Z8350  CPU @ 1.44GHz
/0/100                                     bridge         Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SoC Transaction Register
/0/100/2                 card0             display        Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller
/0/100/b                                   generic        Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Power Management Controller
/0/100/11                mmc1              bus            Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SDIO Controller
/0/100/14                                  bus            Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series USB xHCI Controller
/0/100/14/0              usb1              bus            xHCI Host Controller
/0/100/14/1              usb2              bus            xHCI Host Controller
/0/100/1a                                  generic        Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Trusted Execution Engine
/0/100/1c                                  bridge         Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #1
/0/100/1c/0              enp1s0            network        RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
/0/100/1f                                  bridge         Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCU
/0/100/1f/0                                system         PnP device PNP0c02
/0/100/1f/1                                communication  PnP device PNP0501
/0/100/1f/2                                system         PnP device PNP0c02
/0/100/1f/3                                system         PnP device PNP0c02
/0/100/1f/4                                system         PnP device PNP0b00
/1                       mmc0              bus            MMC Host
/1/1                                       generic        H8G4a
/1/1/1                   /dev/mmcblk0rpmb  generic
/1/1/2                   /dev/mmcblk0      generic
/1/1/2/1                                   volume         537MiB Windows FAT volume
/1/1/2/2                 /dev/mmcblk0p2    volume         512MiB EXT4 volume
/1/1/2/3                 /dev/mmcblk0p3    volume         6404MiB EXT4 volume
/2                       card1             multimedia     rt5672
/3                       input0            input          Power Button
/4                       input1            input          Power Button
/5                       input2            input          Video Bus
/6                       input3            input          Intel HDMI/DP LPE Audio HDMI/DP,pcm=0
/7                       input4            input          Intel HDMI/DP LPE Audio HDMI/DP,pcm=1
/8                       input5            input          Intel HDMI/DP LPE Audio HDMI/DP,pcm=2
/9                       input6            input          chtdc_ti_pwrbtn
/a                       input7            input          Dell WMI hotkeys
/b                       input8            input          sof-bytcht rt5672 Headset

Operating Systems

Windows IoT

I heard that you could install Windows 10 IoT on the Dell Wyes 3040, but since the model that I have only has 8 GB of storage, I wasn’t able to try it. Windows 10 requires a minimum of 16 GB of storage, and I wasn’t interested in trying it out on external storage. I read some information about Windows 10 on this device, and apparently it is so slow that it is practically unusable.

ThinOS

The Dell Wyse 3040 had Dell ThinOS 8.6.710 installed on it when I got it. Normally whenever I used one of these devices, they would be centrally managed and it would automatically connect to RDP or VDI, so I never actually used the desktop component. It is extremely basic, and only allows for a configuring a few options, connecting to remote resources, and managing the configuration:

The default desktop look for ThinOS 8.6.710.

The ThinOS 8.6.710 About dialog.

In the process of testing the Dell Wyse 3040, I also installed the latest version of ThinOS that was available for the system, ThinOS 9.3.1129. From a functional perspective it is very similar to earlier versions, but it does have an improved appearance:

The default desktop look for ThinOS 9.3.1129.

The ThinOS 9.3.1129 About dialog.

Ubuntu Server

I won’t get into the specifics of installing Ubuntu Server on the Dell Wyse 3040, but it is straightforward and can be completed in less than 20 minutes. I installed Ubuntu Server 22.04.4 LTS and chose the option for a minimized installation. The only packages I added after the installation were network related, and eventually Pi-hole which also installed the associated packages that it required.

Since this Dell Wyse 3040 has only 8 GB of storage, there isn’t a whole lot of ways to really partition the storage, I just wanted the maximum available storage:

Mount Point Space Filesystem
/ 6.1 GB ext4
/boot 512 MB ext4
/boot/efi 512 MB fat32

After the installation of Ubuntu has completed, there is around 2 GB of free space available for usage:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           188M  1.5M  187M   1% /run
/dev/mmcblk0p3  6.1G  3.8G  2.0G  66% /
tmpfs           939M  1.5M  937M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/mmcblk0p2  488M  130M  322M  29% /boot
/dev/mmcblk0p1  537M  6.1M  531M   2% /boot/efi
tmpfs           188M  4.0K  188M   1% /run/user/1000

The eMMC storage shows up on the system as /dev/mmcblk0. Since EFI is required, there is no way to use less than 512 MB for the /boot and /boot/efi partitions if you are partitioning the storage using the Ubuntu installer.

As a test I tried a live USB of Xubuntu 22.04.4 to see how well it worked and I didn’t encounter any issues except for the slowness of it:

Default Xfce desktop running on a Xubuntu 22.0.4.4 live USB.

All the hardware on the system appears to work correctly. I had read some reports that audio was an issue with this system, but it appears to work without any issues.

Pi-hole

I won’t get into the specifics of using Pi-hole and what it is, but if you are not familiar with it, it is a DNS Sinkhole solution that is primarily used for blocking ads on a network. By using a device running Pi-hole as a DNS provider, it is capable of blocking ads to users without any actions being required on their part. The easiest way to deploy it is to add it to the DHCP settings for your network so that it is automatically assigned to users.

Pi-hole is very trivial to install, the maintainers of the project make it extremely easy to install with a single command:

sudo curl -sSL https://install.pi-hole.net | bash

Once the script installs all necessary components, the Pi-hole service can be configured.

Pi-hole dashboard on version 5.17.3.

I decided not to bring over my existing configuration from my old Pi-hole server, except for the additional Adlists that I had configured aside from the default ones that are provided by the maintainers.

Issues

I didn’t run into too many issues with the Dell Wyse 3040 Thin Client, but there were two issues that I felt I should talk about should other people encounter them as well.

Power Issues with Linux

With the hardware limitations of the Dell Wyse 3040 aside, I did notice one particularly odd issue while I was testing it. While I had it hooked up to an external monitor and had a keyboard connected to it, there was no way to reliably shutdown or restart the system when it was running Ubuntu Server from the local storage. I noticed this issue the first time that I powered it down so that I could move it, and the system would just hang with the power LED still on, but it wasn’t fully powered off. The issue also occurred whenever I restarted the system and it never actually restarted, it would just hang. The only way to fix the issue was to disconnect the power to turn the system completely off.

This is a major issue for me since the ability to reliably restart the system remotely is something that I would need to do, since I don’t want to have to physically disconnect the power every time I run updates.

The workaround that I found was that if the DisplayPort cable was disconnected the system would always shutdown or restart correctly. I tested this by restarting and shutting down the system around a dozen times and it always worked without the DisplayPort cable connected.

This isn’t an issue since the device will never have a monitor connected to it, but it is something to be aware of. I am sure that I could mess around and find out what the actual issue is, but since I never intend to use the system with a monitor attached, the fix is perfectly fine for my needs.

Dell Wyse USB Imaging Tool

In the processing of testing various versions of ThinOS, I had to create a few USB drives to install the software. I ran into an odd issue when using the Dell Wyse USB Imaging Tool. For some reason when I was using the latest version of the software (version 3.5.0), the tool would always throw an error that it couldn’t write to the USB drive. I tried multiple USB drives, and I kept encountering the exact same issue. To resolve the issue, I ended up downgrading to the previous version (3.4.0) and it resolved the issue.

This site uses cookies. By continuing to use this website you agree to their use. To find out more about how this site uses cookies, including how to control cookies used for this website, please review the Privacy Policy and Cookie Policy.