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
| Component | Detail |
|---|---|
| Model | Intel NUC D54250WYK |
| CPU | Intel Core i5-4250U — Haswell-ULT, 2C/4T, 1.30 GHz |
| GPU | Intel Haswell-ULT Integrated Graphics — device 0a26 |
| RAM | 8 GB DDR3 — 2x 4 GB SODIMM 1600 MHz |
| Disk | 64 GB mSATA SSD — Transcend TS64GMSA370 |
| Super I/O | Nuvoton NCT6776F — temperature, voltage, and fan sensors |
| VT-d | Enabled — DMAR/IOMMU active |
OS Configuration
- Ubuntu 24.04 LTS — Noble Numbat
- GNOME 46 desktop
- LUKS encrypted root on LVM:
/dev/sda3dm_crypt-0ubuntu-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:
- Load
i915early in initramfs. - 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
i915driver. - The desktop may boot to a black screen with no GPU acceleration.
- Recovery may require blind login or SSH.
- Makes the LUKS prompt visible, but disables the
i915.modeset=0- Has the same practical issue as
nomodesetfor desktop use.
- Has the same practical issue as
Expected Boot Time Improvement
| Phase | Before | After | Saved |
|---|---|---|---|
| Kernel | 68.5s | 36.9s | 31.6s |
| Total | 1m 56s | 1m 18s | 38s |
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
i915driver works around it with messages such asDMAR 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.
Option 2: Autostart Applications — Recommended
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.
Option 3: Third-Party Session Extensions — Not Recommended
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:
- Create autostart entries for essential apps.
- Use
tmuxorscreenin terminals to preserve shell sessions across reboots. - Enable VS Code’s restore behavior:
- File → Preferences → Settings
Window: Restore Windows- Set to
all
Installed Software Summary
| Package | Version | Purpose |
|---|---|---|
| VS Code | 1.120.0 | Code editor |
| lm-sensors | Latest | Hardware monitoring |
| gir1.2-gtop-2.0 | Latest | CPU/memory metrics for Freon extension |
| smartmontools | Latest | SSD SMART monitoring |
| gnome-tweaks | Latest | Desktop customization |
| git | Latest | Version control |
| Nautilus | 46.4 | File manager — GNOME Files |
| xrdp | Latest | RDP server for remote desktop access |
| Desktop Icons NG | 47.0.9 | Desktop 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 = falsein its default configuration. - The saved profile
output:analog-stereoshows 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