The Dell Wyse 3040 thin client offers an attractive platform to host my Twingate connector - it's affordable, fanless, power-efficient, and compact. However, installing Kali Linux on this Intel Atom-powered device presents several challenges that require specific workarounds.
This guide covers the complete installation process and solutions to the problems you'll encounter.
Hardware Specifications
- CPU: Intel Atom x5-Z8350 (quad-core, 64-bit)
- RAM: 2GB or 4GB DDR3L
- Storage: 8GB or 16GB eMMC flash storage
- Network: Realtek Gigabit Ethernet
- Boot: UEFI only (no Legacy BIOS support)
- Power: 12W TDP, fanless operation
Step 1: Download and Prepare Installation Media
Download Kali Linux
Visit https://www.kali.org/get-kali/ and download the Installer ISO:
- File: kali-linux-2025.2-installer-amd64.iso (~3.5GB)
- Important: Use the Installer version, NOT the Live image
- The installer contains offline packages essential for installation
Create Bootable USB with Rufus
Download Rufus from https://rufus.ie/ and follow these specific settings:
Insert USB drive (8GB minimum - will be completely erased)
Run Rufus as Administrator
Configure Rufus settings:
- Device: Select your USB drive
- Boot selection: Click "SELECT" and choose your Kali ISO
- Partition scheme: GPT (critical for UEFI)
- Target system: UEFI (non CSM) (essential for Wyse 3040)
- File system: FAT32 (default)
- Cluster size: Default allocation size
Advanced options:
- Check "Quick format"
- Check "Create extended label and icon files"
Click Start
Select "Write in ISO Image mode" when prompted
Confirm data destruction warning
Wait for completion (5-15 minutes)
Step 2: Configure Dell Wyse 3040 BIOS
Access BIOS
- Power on the Wyse 3040
- Press F2 immediately when Dell logo appears
- Default BIOS password: "Fireport"
- Remember to update the default password
Configure BIOS Settings
Navigate through the BIOS and configure:
Security Tab:
- Secure Boot: DISABLED (critical for Linux installation)
Boot Tab:
- Boot List Option: UEFI
- USB Boot Support: ENABLED
- PXE Boot to LAN: DISABLED (avoid conflicts)
Save BIOS Changes
- Press F10 to save changes
- Confirm "Yes" to save and exit
- Insert your Kali USB drive
Step 3: Install Kali Linux
Boot from USB
- System should automatically boot from USB
- At Kali boot menu, select "Install" (text mode)
- Do NOT select "Graphical install" or "Live"
Installation Configuration
Work through the installation screens:
- Language: English
- Location: United Kingdom
- Keyboard: British
- Network:
- If network cable connected: Configure automatically
- If no cable: Choose "Configure network manually" → "Do not configure at this time"
- Hostname: Twingate
- Domain: bear.local
- User Account: Mooney
Disk Partitioning
- Partitioning method: "Guided - use entire disk"
- Select disk: Choose eMMC drive (usually /dev/mmcblk0)
- Partition scheme: "All files in one partition"
- Write changes: Yes
Package Selection - Critical Step
When you reach "Software selection" screen, this is where most installations fail. The solution is counterintuitive:
Leave everything completely unchecked - we fix this later on....
□ Kali desktop environment - GNOME [UNCHECK]
□ Kali desktop environment - Xfce [UNCHECK]
□ Kali desktop environment - KDE [UNCHECK]
□ ... collection of tools - top10 [UNCHECK]
□ ... collection of tools - default [UNCHECK]
□ SSH server [UNCHECK]
□ standard system utilities [UNCHECK]
Click Continue with all options blank. This avoids the installer's package management bugs that cause failures on limited storage systems.
Complete Installation
- GRUB bootloader:
- Install GRUB: Yes
- Device: /dev/mmcblk0 (entire eMMC drive)
- Remove USB when prompted
- Click Continue to reboot
Step 4: Fix Boot Issues
Expected Problem
After reboot, you'll see: "No bootable device found"
This happens because the Wyse 3040 UEFI firmware requires the bootloader at a specific fallback location.
Solution: Rescue Mode Boot Fix
- Boot from Kali USB again
- Select "Advanced options"
- Choose "Rescue mode"
- Follow prompts until you reach rescue shell
- Execute these commands:
# Mount the installed system
mkdir -p /mnt/target
mount /dev/mmcblk0p2 /mnt/target
mount /dev/mmcblk0p1 /mnt/target/boot/efi
# Navigate to EFI directory
cd /mnt/target/boot/efi/EFI/
# Check what's in the kali directory
ls -la kali/
# Copy working GRUB file to fallback location
mkdir -p BOOT
cp kali/grubx64.efi BOOT/BOOTX64.EFI
# Also try copying shimx64.efi if it exists
cp kali/shimx64.efi BOOT/BOOTX64.EFI 2>/dev/null || echo "No shim found"
# Verify copy successful
ls -la BOOT/BOOTX64.EFI
# Clean up and reboot
cd /
umount -R /mnt/target
reboot
Remove USB drive. The system should now boot to Kali Linux console.
Step 5: Configure Network Connectivity
Initial Network Diagnosis
After first successful boot, check network status:
# Check interface status
ip link show eth0
# Should show: <BROADCAST,MULTICAST,UP,LOWER_UP> if cable connected
# Check for IP address (will be empty)
ip -4 addr show eth0
# Attempt DHCP (will fail)
dhclient eth0
# Returns: command not found
Configure Static IP Address
Since DHCP tools aren't installed, configure static IP manually:
# Bring interface up
sudo ip link set eth0 up
# Assign static IP (adjust for your network)
sudo ip addr add 192.168.86.251/24 dev eth0
# Add default route
sudo ip route add default via 192.168.86.1
# Configure DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
# Test connectivity
ping -c 3 8.8.8.8
For corporate proxy environments:
export http_proxy=http://squid.bear.local:3129
export https_proxy=http://squid.bear.local:3129
Step 6: Install Essential System Components
Install Core Network Tools
# Update package repositories
sudo -E apt update
# Install DHCP client and network utilities
sudo -E apt install -y isc-dhcp-client net-tools openssh-server
# Enable SSH for remote access
sudo systemctl enable ssh --now
Switch to DHCP
Now that DHCP client is installed:
# Remove static IP configuration
sudo ip addr flush dev eth0
sudo ip link set eth0 up
# Get IP via DHCP
sudo dhclient eth0
# Verify IP assignment
ip -4 addr show eth0
# Note IP address for remote SSH access
ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d'/' -f1
# Edit network interfaces file
sudo nano /etc/network/interfaces
# Add these lines:
auto eth0
iface eth0 inet dhcp
# Restart networking service
sudo systemctl restart networking
Install Kali Security Tools
Choose your tool installation level:
# Option 1: Minimal core tools (recommended for 8GB storage)
sudo apt install -y kali-linux-core
# Option 2: Headless tools (no GUI, comprehensive)
sudo apt install -y kali-linux-headless
# Option 3: Default tools (may strain limited storage)
sudo apt install -y kali-linux-default
Install Docker Support
# Install Docker
sudo apt install -y docker.io
# Enable Docker service
sudo systemctl enable docker --now
# Add user to docker group
sudo usermod -aG docker $USER
Storage Optimization for Small eMMC Drives
# Clean package cache
sudo apt clean
sudo apt autoclean
sudo apt autoremove
# Check disk usage
df -h
du -sh /var/cache/apt/archives/
Configure Docker for Limited Storage
# Create Docker configuration
sudo nano /etc/docker/daemon.json
# Add resource limits:
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
# Restart Docker
sudo systemctl restart docker
Hardware-Specific Optimizations
Fix Intel Atom Shutdown Issues
# Create modprobe configuration
sudo nano /etc/modprobe.d/blacklist-intel-cstate.conf
# Add:
blacklist intel_idle
# Update initramfs
sudo update-initramfs -u
Permanently Fix Atom Shutdown Issues
# Edit GRUB configuration
sudo nano /etc/default/grub
# Find the line starting with GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_idle.max_cstate=0 intel_pstate=disable"
# Update GRUB
sudo update-grub
# Reboot to test
sudo reboot
Disable IPv6 (Optional)
# Create sysctl configuration
sudo nano /etc/sysctl.d/99-disable-ipv6.conf
# Add:
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
# Apply changes
sudo sysctl --system
Results and Performance
After following this complete process, you'll have:
- Functional headless Kali Linux system
- SSH remote access capability
- Docker containerization support
- Essential penetration testing tools
- Optimized for low-power operation
This concludes the setup and automation process, we can now move on to installing the Twingate connector (that will be a different post)