Linux MLOps Hardware Battle-tested March 2026 ~25 min read

Ubuntu 24.04 on the ASUS ROG G14
(RTX 5060 Blackwell)

A complete, battle-tested walkthrough — from fresh install to a fully functional ML workstation with CUDA 13.0, PyTorch 2.10, asusctl from source, and display brightness fixed.

March 2026 · Hemanth Sai
ASUS ROG Zephyrus G14 (GA403UM)
Driver 580 · CUDA 13.0 · PyTorch 2.10
Laptop ASUS ROG Zephyrus G14 (GA403UM)
GPU NVIDIA GeForce RTX 5060 — Blackwell, 8GB GDDR7
OS Ubuntu 24.04.4 LTS (Noble Numbat)
NVIDIA Driver 580.126.09 (open kernel module)
CUDA 13.0 (PyTorch built with cu128)
PyTorch 2.10.0+cu128
Phase 00

Creating a Bootable USB

Before anything else, you need a bootable Ubuntu USB. You'll need at least an 8GB USB drive — everything on it will be erased, so back it up first.

Step 1 — Download the ISO

Exact version used in this guide

Download Ubuntu 24.04.4 LTS (Noble Numbat) — the .4 point release is important, it ships with a newer kernel that has better Blackwell support out of the box.

Download link
https://ubuntu.com/download/desktop
# Click "Download 24.04.4 LTS"
# File: ubuntu-24.04.4-desktop-amd64.iso (~5.7 GB)
# Verify checksum after download (optional but recommended)
sha256sum ubuntu-24.04.4-desktop-amd64.iso

Let it finish downloading completely before flashing — a partial ISO will silently produce a broken USB that fails mid-install.

Step 2a — Flash with balenaEtcher (macOS)

balenaEtcher is the easiest option on Mac — it handles permissions automatically and validates the write afterwards.

Download balenaEtcher

Get it from etcher.balena.io — download the macOS .dmg, open it, drag Etcher to Applications. No brew, no CLI needed.

macOS may show a disk error popup

After flashing, macOS might pop up "The disk you inserted was not readable by this computer". This is normal — the drive is now formatted as Linux. Click Ignore, not Eject or Initialize.

Step 2b — Flash with Rufus (Windows)

Rufus is the standard tool on Windows — faster than most alternatives and gives you full control over partition scheme and target system.

Download Rufus

Get it from rufus.ie — the portable (.exe) version requires no install, just run it directly.

Write mode dialog

Rufus will ask: "Write in ISO Image mode or DD Image mode?" — choose Write in ISO Image mode (Recommended). Then confirm that all data on the USB will be destroyed.

Step 3 — Verify the USB works

Before you start partitioning your actual machine, test that the USB boots correctly.

USB is ready

If you see the Ubuntu desktop or installer, your USB is good. You can now proceed to the pre-installation checklist below.

Phase 01

Pre-Installation Checklist

Run through these on Windows before rebooting into the USB installer.

Bash — note partition layout
# Shows all block devices with mount points and sizes
lsblk

Required BIOS settings: Secure Boot Disabled · Boot mode UEFI · Laptop plugged in · Bootable USB ready

Phase 02

Booting from USB

G14-specific — not F12

The G14 uses ESC or F8 for the boot device menu. F2 enters BIOS — if that happens: Save & Exit → Boot Override → select USB.

If the installer freezes

Press E at the grub menu and add nomodeset to the kernel line to bypass the NVIDIA init hang.

Phase 03

Partitioning Strategy

Use "Something else" (manual partitioning). Only reformat the Ubuntu root partition — leave everything else untouched.

Critical

Never touch Windows NTFS partitions or the EFI partition. Only reformat nvme0n1p10 (Ubuntu root).

Partition Size Type / Mount Action
nvme0n1p1 260 MB vfat / /boot/efi KEEP — shared EFI
nvme0n1p3 192 GB NTFS (Windows) KEEP — do not touch
nvme0n1p8 22.4 GB swap area KEEP as swap
nvme0n1p9 558.8 GB ext4 / /home KEEP — DO NOT FORMAT
nvme0n1p10 150.8 GB ext4 / / FORMAT — Ubuntu root only
The /home advantage

The separate /home partition means all files, conda envs, SSH keys, and projects survive the reinstall completely intact — no backup needed.

Phase 04

Post-Install Verification

Bash
ping -c 3 google.com   # verify internet
lsblk                  # check partition mounts
lsb_release -a         # confirm Ubuntu version
Phase 05

NVIDIA Driver Installation

The RTX 5060 is Blackwell architecture and requires driver 570 or higher. Older drivers will not detect the GPU at all.

Do not apt upgrade yet

Do NOT run sudo apt upgrade before confirming NVIDIA drivers are correctly installed. A prior automatic update caused the original system failure on this machine.

Bash
# Step 1 — update package list only (no upgrade yet)
sudo apt update

# Step 2 — check recommended driver
ubuntu-drivers devices
# Look for "recommended" — should show nvidia-driver-580-open

# Step 3 — install (open kernel module recommended for Blackwell)
sudo apt install nvidia-driver-580-open

# Step 4 — reboot and verify
sudo reboot
Bash — after reboot
nvidia-smi
# NVIDIA GeForce RTX 5060 | Driver 580.126.09 | CUDA 13.0
Phase 06

System Update

With NVIDIA drivers confirmed working, it is now safe to run the full system update.

Bash
sudo apt upgrade
# Review the list — stop if nvidia-driver or linux-image appears unexpectedly
sudo reboot
nvidia-smi   # verify GPU still works after upgrade
Phase 07

asusctl & supergfxctl from Source

The asus-linux PPA is no longer available for Ubuntu 24.04. Both tools must be built from source. They provide ROG-specific controls: fan curves, RGB, battery limits, performance profiles, and GPU switching.

Install Rust and Build Dependencies

Bash
# Install Rust (asusctl is written in Rust)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Choose option 1 (default)
source $HOME/.cargo/env

# Build dependencies
sudo apt install git build-essential cmake pkg-config \
  libclang-dev libudev-dev libseat-dev libinput-dev \
  libxkbcommon-dev libgbm-dev libssl-dev libfontconfig1-dev

rustc --version   # should show 1.94.0 or newer
cargo --version

Build & Install supergfxctl

Bash
cd ~/Downloads
git clone https://gitlab.com/asus-linux/supergfxctl.git
cd supergfxctl && make -j$(nproc) && sudo make install
sudo systemctl enable supergfxd --now
supergfxctl --get   # Hybrid

Build & Install asusctl

Bash
cd ~/Downloads
git clone https://gitlab.com/asus-linux/asusctl.git
cd asusctl && make -j$(nproc) && sudo make install
sudo systemctl start asusd
sudo systemctl add-wants multi-user.target asusd.service

asusctl info                  # confirm G14 GA403UM detected
asusctl profile list          # Quiet / Balanced / Performance
asusctl battery limit 80      # 80% charge limit for longevity
asusctl battery info          # 80%
Recommended GPU mode for ML work

Hybrid mode — AMD iGPU handles the display (saving power), RTX 5060 is available on-demand for CUDA. Best balance for a portable ML workstation.

Phase 08

Boot Optimization

One service slows down boot significantly on fresh Ubuntu 24.04. Disabling it saves approximately 3.6 seconds.

Bash
systemd-analyze blame | head -10   # check bottlenecks
sudo systemctl disable NetworkManager-wait-online.service
sudo reboot
Phase 09

ML Stack — Miniconda & PyTorch

Bash — install Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh   # accept license, default path, yes to init
source ~/.bashrc
conda --version   # 26.x
Miniconda 26.x channel issue

Miniconda 26.x enforces Anaconda ToS for default channels. Fix this before creating any environments.

Bash — fix channels, create env
conda config --add channels conda-forge
conda config --set channel_priority strict
conda config --remove channels defaults

conda create -n ml python=3.11 -y --override-channels -c conda-forge
conda activate ml
cu128 vs CUDA 13.0 — why it works

cu128 = CUDA 12.8. Driver 580 supports up to CUDA 13.0. CUDA is backward compatible — driver 580 runs CUDA 12.8 binaries perfectly fine.

Bash — install PyTorch
pip install torch torchvision torchaudio \
  --index-url https://download.pytorch.org/whl/cu128
Python — verify end-to-end
import torch
print(torch.__version__)               # 2.10.0+cu128
print(torch.cuda.is_available())       # True
print(torch.cuda.get_device_name(0))   # NVIDIA GeForce RTX 5060 Laptop GPU
Phase 10

Display Brightness Fix

The G14 with hybrid GPU exposes three backlight devices. GNOME defaults to nvidia_wmi_ec_backlight which does nothing. The working device is amdgpu_bl2. Four steps to fix it permanently.

Step 1 — GRUB parameter

Bash
sudo nano /etc/default/grub
# Change to:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=native"

sudo update-grub && sudo reboot

Step 2 — Install brightnessctl & grant permissions

Bash
sudo apt install brightnessctl
sudo usermod -aG video $USER
sudo chmod a+w /sys/class/backlight/amdgpu_bl2/brightness
brightnessctl -d amdgpu_bl2 set 70%   # test — screen should dim

Step 3 — Persistent udev rule

/etc/udev/rules.d/99-backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="amdgpu_bl2", RUN+="/bin/chmod a+w /sys/class/backlight/amdgpu_bl2/brightness"
Bash
sudo udevadm control --reload-rules && sudo udevadm trigger

Step 4 — acpid for Fn brightness keys

Bash
sudo apt install acpid && sudo systemctl enable acpid --now

# /etc/acpi/events/brightness
event=video/brightnessup
action=/etc/acpi/brightness.sh up

# /etc/acpi/events/brightnessdown
event=video/brightnessdown
action=/etc/acpi/brightness.sh down

# /etc/acpi/brightness.sh
#!/bin/bash
if [ "$1" = "up" ]; then
  brightnessctl -d amdgpu_bl2 set +10%
elif [ "$1" = "down" ]; then
  brightnessctl -d amdgpu_bl2 set 10%-
fi

sudo chmod +x /etc/acpi/brightness.sh
sudo systemctl restart acpid
# Fn+F7 (down) and Fn+F8 (up) now work
Phase 11

ROG Control Center GUI

The default rog-control-center build crashes on Ubuntu 24.04 because $WAYLAND_DISPLAY is empty (X11 session). It needs to be rebuilt with the X11 feature flag.

Bash — the crash
rog-control-center
# Error: neither WAYLAND_DISPLAY nor WAYLAND_SOCKET is set
# note: enable the winit/x11 feature to support X11
# Aborted (core dumped)
Exact flag matters

Use --features "x11" — NOT --features "winit/x11". The second form fails with "package does not contain this feature". The x11 flag maps to slint/backend-winit-x11 internally.

Bash — fix and rebuild
# Install X11 dev libraries
sudo apt install libx11-dev libxrandr-dev libxcursor-dev \
  libxi-dev libxinerama-dev

# Rebuild with X11 feature
cd ~/Downloads/asusctl
cargo build --release --features "x11" -p rog-control-center
sudo cp target/release/rog-control-center /usr/bin/rog-control-center

# Launch
DISPLAY=:1 rog-control-center
Final State

Verified working system

Ubuntu 24.04.4 LTSClean dual-boot, /home preserved
RTX 5060 — Driver 580.126.09CUDA 13.0 · nvidia-smi confirmed
PyTorch 2.10.0+cu128CUDA available · GPU detected
supergfxd runningGPU mode: Hybrid
asusd runningQuiet / Balanced / Performance
Battery limit: 80%Longevity mode active
Fn brightness keys workingacpid + brightnessctl (amdgpu_bl2)
Boot optimisedNetworkManager-wait-online disabled
Miniconda 26.1.1ml env · Python 3.11 · conda-forge
ROG Control CenterRebuilt with x11 · full GUI working
Conclusion
A fully functional ML workstation in your backpack.

Getting the RTX 5060 Blackwell working on Ubuntu 24.04 requires knowing where the landmines are — the driver order of operations, the missing PPA, three backlight devices GNOME ignores, and a ROG Control Center build that crashes out of the box. This guide hits all of them. With Hybrid mode, an 80% charge limit, and PyTorch on CUDA 12.8, this G14 runs full training jobs at the library just as well as a dedicated workstation.

HM
Hemanth Sai .M
MS AI · Northeastern University
← Back to Blog