← Back to Homelab KB

Intel NUC D54250WYK — Ubuntu 24.04 LTS Fixes

Category: server Difficulty: Advanced Published:

This guide documents fixes for common issues on the Intel NUC D54250WYK running Ubuntu 24.04 LTS Desktop with LUKS full-disk encryption.

Scope: These notes are hardware-specific. Validate each change before applying it to other Intel NUC models or newer Ubuntu/GNOME releases.

Hardware Profile

ComponentDetail
ModelIntel NUC D54250WYK
CPUIntel Core i5-4250U — Haswell-ULT, 2C/4T, 1.30 GHz
GPUIntel Haswell-ULT Integrated Graphics — device 0a26
RAM8 GB DDR3 — 2x 4 GB SODIMM 1600 MHz
Disk64 GB mSATA SSD — Transcend TS64GMSA370
Super I/ONuvoton NCT6776F — temperature, voltage, and fan sensors
VT-dEnabled — DMAR/IOMMU active

OS Configuration

  • Ubuntu 24.04 LTS — Noble Numbat
  • GNOME 46 desktop
  • LUKS encrypted root on LVM:
    • /dev/sda3
    • dm_crypt-0
    • ubuntu-vg/ubuntu-lv

Fix 1: Blank Screen at LUKS Password Prompt

Problem

At boot, the LUKS disk encryption password prompt appears as a black screen, so the password must be typed blind.

The likely cause is that the i915 GPU driver loads as a kernel module after the LUKS prompt. During initramfs, the EFI framebuffer / simpledrm console does not properly hand off to the display.

Solution

Two changes are required:

  1. Load i915 early in initramfs.
  2. Disable the EFI framebuffer from GRUB so it does not claim the display first.

Step 1: Add i915 to initramfs

This forces the Intel GPU driver to load before the LUKS prompt appears.

echo "i915" >> /etc/initramfs-tools/modules
update-initramfs -u

Step 2: Disable EFI framebuffer in GRUB

Edit /etc/default/grub and set:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=efifb:off"

Step 3: Optional text-mode GRUB terminal

This improves visibility at the GRUB menu itself.

GRUB_TERMINAL=console

Step 4: Apply GRUB changes

update-grub

Revert

If the system fails to boot correctly or the display regresses, revert the GRUB and initramfs changes:

# Restore original GRUB parameters
sed -i 's|GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=efifb:off"|GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"|' /etc/default/grub
sed -i 's|^GRUB_TERMINAL=console|#GRUB_TERMINAL=console|' /etc/default/grub
update-grub

# Remove i915 from initramfs module list
sed -i '/^i915$/d' /etc/initramfs-tools/modules
update-initramfs -u

At the GRUB boot screen, you can also press e, remove video=efifb:off from the kernel line, then press Ctrl+X to boot.

What Not to Use

Do not use these kernel parameters for this issue:

  • nomodeset
    • Makes the LUKS prompt visible, but disables the i915 driver.
    • The desktop may boot to a black screen with no GPU acceleration.
    • Recovery may require blind login or SSH.
  • i915.modeset=0
    • Has the same practical issue as nomodeset for desktop use.

Expected Boot Time Improvement

PhaseBeforeAfterSaved
Kernel68.5s36.9s31.6s
Total1m 56s1m 18s38s

Fix 2: SYSTIN Temperature Sensor Shows 123°C

Problem

The Nuvoton NCT6776F Super I/O chip reports SYSTIN / temp1 at +123°C with an alarm flag.

On this Intel NUC board, that sensor appears to be a floating or unconnected pin. The reading is garbage and can cause false alerts in monitoring tools.

Verify

sensors | grep SYSTIN

Example bad output:

SYSTIN: +123.0°C (high = +0.0°C, hyst = +0.0°C) ALARM sensor = CPU diode

Solution

Create a sensors override file:

cat > /etc/sensors.d/nuc.conf << 'EOF'
chip "nct6776-isa-0a00"
 ignore temp1
EOF

Apply immediately:

sensors -s

The temp1 feature name maps to the displayed SYSTIN label. Use the internal feature name, not the display label, for the ignore directive.

Verify

sensors | grep -i systin

Expected result: no output.

This applies to both the sensors CLI and GNOME extensions such as Freon.


Fix 3: Hardware Monitoring and Freon Setup

Install lm-sensors and Detect Chips

apt install -y lm-sensors gir1.2-gtop-2.0
yes '' | sensors-detect
modprobe coretemp nct6775

Persist Kernel Modules on Boot

printf "coretemp\nnct6775\n" >> /etc/modules

Verify Sensor Readings

sensors

Expected readings should look broadly like this:

coretemp-isa-0000: Package id 0 ~43°C, Core 0, Core 1
nct6776-isa-0a00: CPUTIN ~42°C, AUXTIN ~44°C, fan2 ~3300 RPM
acpitz-acpi-0: temp1 ~28°C, temp2 ~30°C

Install Freon GNOME Extension

Install Freon from GitHub. The GNOME Extensions site blocks direct CLI downloads.

apt install -y git
git clone --depth 1 https://github.com/UshakovVasilii/gnome-shell-extension-freon.git /tmp/freon-src
cp -r /tmp/freon-src/freon@UshakovVasilii_Github.yahoo.com /usr/share/gnome-shell/extensions/
cd /usr/share/gnome-shell/extensions/freon@UshakovVasilii_Github.yahoo.com
glib-compile-schemas schemas/

Enable it after login from an active GNOME session:

# Run as the desktop user, not root
gnome-extensions enable freon@UshakovVasilii_Github.yahoo.com

Alternatively, use the Extension Manager GUI app.

Show SSD Temperature in Freon

Freon reads drive temperatures via UDisks2. No extra service configuration is needed.

In Freon preferences, enable:

Read drive sensors from Udisks2

The Transcend TS64GMSA370 mSATA SSD reports temperature through SMART attribute 194.

Check manually:

smartctl -a /dev/sda | grep Temperature

Example:

194 Temperature_Celsius ... 26

Fix 4: VT-d DMAR Warnings

Problem

Kernel logs may show repeated DMAR DMA faults from the GPU:

DMAR: [DMA Read NO_PASID] Request device [00:02.0] fault addr 0x... [fault reason 0x06]

Device 00:02.0 is the Intel Haswell integrated GPU. VT-d / IOMMU is active and intercepting GPU DMA transactions.

Impact

  • Non-fatal.
  • The i915 driver works around it with messages such as DMAR active, disabling use of stolen memory.
  • It causes noisy kernel logs.
  • Do not disable VT-d if Docker, device pass-through, or container isolation matters.

Recommendation

No action recommended.

Disabling VT-d with intel_iommu=off would silence the warnings, but removes IOMMU functionality and may break pass-through-oriented workflows.


Quick Reference: Current Working Configuration

/etc/default/grub

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=efifb:off"
GRUB_CMDLINE_LINUX=""
GRUB_TERMINAL=console

/etc/initramfs-tools/modules

Append:

i915

/etc/modules

Append:

coretemp
nct6775

/etc/sensors.d/nuc.conf

chip "nct6776-isa-0a00"
 ignore temp1

Boot Time After Fixes

Startup finished in 5.7s (firmware) + 5.3s (loader) + 36.9s (kernel) + 30.2s (userspace) = 1m 18s

Fix 5: Nautilus Shows Missing or Broken Icons

Problem

Nautilus may display placeholder icons instead of proper folder and file icons.

Solution: Set Icon Theme to Adwaita

# Run as the desktop user, not root
gsettings set org.gnome.desktop.interface icon-theme "Adwaita"

# Restart Nautilus
pkill nautilus

The next Nautilus window should use correct icons.

Note: The MacTahoe theme is primarily for GTK widgets and window decorations. For file manager icons, use Ubuntu’s default Adwaita icon theme.


Fix 6: Desktop Shortcuts and Icons

Problem

GNOME 46 removed native desktop icons support. To show desktop shortcuts such as Home, Computer, Network, Files, and Notepad, an extension is required.

Solution: Install Desktop Icons NG Extension

apt install -y gnome-shell-extension-desktop-icons-ng

Log out and back in so the extension loads.

Then enable and configure DING:

# Run as the desktop user, not root
gnome-extensions enable [email protected]

gsettings set org.gnome.shell.extensions.ding show-home true
gsettings set org.gnome.shell.extensions.ding show-volumes true
gsettings set org.gnome.shell.extensions.ding show-network-volumes true
gsettings set org.gnome.shell.extensions.ding show-trash false

Custom Desktop Launchers

Create launchers in the user’s Desktop directory.

Files / Nautilus Launcher

/home/mike/Desktop/nautilus.desktop:

[Desktop Entry]
Name=Files
Comment=Access and organize files
Exec=nautilus --new-window %U
Icon=org.gnome.Nautilus
Terminal=false
Type=Application

Notepad / Text Editor Launcher

/home/mike/Desktop/text-editor.desktop:

[Desktop Entry]
Name=Notepad
Comment=Edit text files
Exec=gnome-text-editor %U
Icon=org.gnome.TextEditor
Terminal=false
Type=Application
MimeType=text/plain;

Mark both files as trusted executables from GNOME Files if prompted.

Result

Desktop icons available after configuration:

  • Home — DING
  • Computer — DING
  • Network — DING
  • Files — custom launcher
  • Notepad — custom launcher

Session Restore: Application Recovery After Logout or Reboot

Problem

GNOME does not automatically restore open applications after logout or reboot. Unlike Windows, GNOME requires manual session management.

Option 1: Manual Session Save

Save the current session before logging out:

gnome-session-save --gui

Or use D-Bus directly:

dbus-send --session --type=method_call \
  --dest=org.gnome.SessionManager \
  /org/gnome/SessionManager \
  org.gnome.SessionManager.SaveSession

Limitation: this only saves apps that support XSMP. Many modern apps, such as Chrome and VS Code, do not.

Create .desktop files in ~/.config/autostart/ for apps that should start at login.

Example: autostart Nautilus.

mkdir -p ~/.config/autostart
cat > ~/.config/autostart/nautilus.desktop << 'EOF'
[Desktop Entry]
Type=Application
Name=Files
Exec=nautilus
X-GNOME-Autostart-enabled=true
EOF

Repeat this pattern for tools such as VS Code or Terminal.

Session Manager-style extensions exist, but are often unmaintained and can break with GNOME updates. Prefer explicit autostart files.

Best Practice

For critical DevOps or monitoring workflows:

  1. Create autostart entries for essential apps.
  2. Use tmux or screen in terminals to preserve shell sessions across reboots.
  3. Enable VS Code’s restore behavior:
    • File → Preferences → Settings
    • Window: Restore Windows
    • Set to all

Installed Software Summary

PackageVersionPurpose
VS Code1.120.0Code editor
lm-sensorsLatestHardware monitoring
gir1.2-gtop-2.0LatestCPU/memory metrics for Freon extension
smartmontoolsLatestSSD SMART monitoring
gnome-tweaksLatestDesktop customization
gitLatestVersion control
Nautilus46.4File manager — GNOME Files
xrdpLatestRDP server for remote desktop access
Desktop Icons NG47.0.9Desktop icons and shortcuts support

GNOME Extensions

  • Freon — system monitoring with SSD temperature
  • User Theme — shell theming support
  • Dash to Dock — macOS-style bottom dock
  • Desktop Icons NG / DING — desktop shortcuts for Home, Computer, and Network

Themes and Wallpaper

  • GTK theme: MacTahoe-Dark/usr/share/themes/MacTahoe-Dark/
  • Icon theme: Adwaita — default Ubuntu
  • Wallpaper: MacTahoe-day.jpeg/usr/share/backgrounds/MacTahoe-day.jpeg

Fix 7: PipeWire Audio Does Not Persist After Reboot — Dummy Output

Problem

After reboot, audio reverts to Dummy Output even though the Intel HD Audio hardware is detected.

The audio card profile resets to off instead of restoring the saved profile.

Root Cause

  • WirePlumber has api.acp.auto-profile = false in its default configuration.
  • The saved profile output:analog-stereo shows as not available when no headphones are plugged in.
  • WirePlumber will not restore an unavailable profile, so it defaults to off.
  • PipeWire then falls back to Dummy Output.

Verify Dummy Output

sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 wpctl status | head -20

Look for Dummy Output under Sinks.

Check Current Audio Card Profile

sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 pactl list cards | grep "Active Profile"

If it shows off, this is the issue.

Solution

Enable auto-profile in WirePlumber and use the pro-audio profile, which is available regardless of whether headphones are plugged in.

Step 1: Enable Auto-Profile

# Back up original config
cp /usr/share/wireplumber/main.lua.d/50-alsa-config.lua \
  /usr/share/wireplumber/main.lua.d/50-alsa-config.lua.backup

# Enable auto-profile
sed -i 's/\["api.acp.auto-profile"\] = false/["api.acp.auto-profile"] = true/' \
  /usr/share/wireplumber/main.lua.d/50-alsa-config.lua

# Verify the change
grep "api.acp.auto-profile" /usr/share/wireplumber/main.lua.d/50-alsa-config.lua

Expected:

["api.acp.auto-profile"] = true,

Step 2: Set and Save the pro-audio Profile

# Set the profile
sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 \
  pactl set-card-profile alsa_card.pci-0000_00_1b.0 pro-audio

# Update saved profile state
cat > /home/mike/.local/state/wireplumber/default-profile << 'EOF'
[default-profile]
alsa_card.pci-0000_00_1b.0=pro-audio
EOF

chown mike:mike /home/mike/.local/state/wireplumber/default-profile

# Set as default sink
sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 \
  wpctl set-default $(sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 wpctl status | \
  grep -m1 "Built-in Audio Pro" | awk '{print $1}')

Step 3: Restart WirePlumber

sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 \
  DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
  systemctl --user restart wireplumber.service

Step 4: Verify

sleep 3
sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 wpctl status | head -20

Expected: Built-in Audio Pro appears with an asterisk *, indicating the default sink.

Revert

cp /usr/share/wireplumber/main.lua.d/50-alsa-config.lua.backup \
  /usr/share/wireplumber/main.lua.d/50-alsa-config.lua

sudo -u mike XDG_RUNTIME_DIR=/run/user/1000 \
  DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
  systemctl --user restart wireplumber.service

Result

  • Active sink: Built-in Audio Pro — default
  • Active source: Built-in Audio Pro — microphone
  • Profile persists through reboots and WirePlumber restarts
  • No more Dummy Output