| 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 |
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
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.
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.
Get it from etcher.balena.io — download the macOS .dmg, open it, drag Etcher to Applications. No brew, no CLI needed.
- Plug in your USB drive (8GB minimum, USB 3.0 recommended for speed)
- Open balenaEtcher
- Click "Flash from file" → select your
ubuntu-24.04.4-desktop-amd64.iso - Click "Select target" → select your USB drive. Double-check the drive name — everything on it gets wiped
- Click "Flash!" — macOS will prompt for your password to allow disk access
- Wait for the flash and the validation step to complete (both bars hit 100%)
- Etcher will auto-eject the drive when done — it's ready
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.
Get it from rufus.ie — the portable (.exe) version requires no install, just run it directly.
- Plug in your USB drive (8GB minimum)
- Run Rufus as Administrator — right-click → Run as administrator
- Device — select your USB drive from the dropdown. Confirm the size matches
- Boot selection — click "SELECT" and choose your
ubuntu-24.04.4-desktop-amd64.iso. Rufus will auto-detect most settings - Partition scheme — set to GPT (for UEFI systems like the G14)
- Target system — set to UEFI (non CSM)
- File system — leave as FAT32 (auto-set by Rufus)
- Click START
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.
- Wait for the progress bar to reach 100% and the status to show "READY"
- Click CLOSE and safely eject the drive
Step 3 — Verify the USB works
Before you start partitioning your actual machine, test that the USB boots correctly.
- Plug the USB into the G14 and power on
- Spam ESC or F8 immediately to get the boot override menu
- Select the USB drive — you should see the purple Ubuntu/GRUB screen within a few seconds
- Select "Try or Install Ubuntu" to confirm it loads (you don't have to install yet)
- If the screen freezes at the splash: press E at the GRUB menu and add
nomodesetafterquiet splash, then press F10 to boot
If you see the Ubuntu desktop or installer, your USB is good. You can now proceed to the pre-installation checklist below.
Pre-Installation Checklist
Run through these on Windows before rebooting into the USB installer.
- Verify Windows boots normally and is stable
- Disable BitLocker — Settings → Privacy & Security → Device Encryption → Off. The G14 ships with BitLocker enabled by default
- Back up SSH keys (
~/.ssh), git config (~/.gitconfig), project files - Export conda environments:
conda env export > environment.yml - Note your WiFi password
# 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
Booting from USB
The G14 uses ESC or F8 for the boot device menu. F2 enters BIOS — if that happens: Save & Exit → Boot Override → select USB.
- Plug in power cable and bootable USB
- Press power button, immediately spam ESC or F8 as the ASUS logo appears
- Select your USB drive from the boot override menu
Press E at the grub menu and add nomodeset to the kernel line to bypass the NVIDIA
init hang.
Partitioning Strategy
Use "Something else" (manual partitioning). Only reformat the Ubuntu root partition — leave everything else untouched.
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 separate /home partition means all files, conda envs, SSH keys, and projects survive the
reinstall completely intact — no backup needed.
Post-Install Verification
ping -c 3 google.com # verify internet
lsblk # check partition mounts
lsb_release -a # confirm Ubuntu version
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 run sudo apt upgrade before confirming NVIDIA drivers are correctly
installed. A prior automatic update caused the original system failure on this machine.
# 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
nvidia-smi
# NVIDIA GeForce RTX 5060 | Driver 580.126.09 | CUDA 13.0
System Update
With NVIDIA drivers confirmed working, it is now safe to run the full system update.
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
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
# 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
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
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%
Hybrid mode — AMD iGPU handles the display (saving power), RTX 5060 is available on-demand for CUDA. Best balance for a portable ML workstation.
Boot Optimization
One service slows down boot significantly on fresh Ubuntu 24.04. Disabling it saves approximately 3.6 seconds.
systemd-analyze blame | head -10 # check bottlenecks
sudo systemctl disable NetworkManager-wait-online.service
sudo reboot
ML Stack — Miniconda & PyTorch
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 enforces Anaconda ToS for default channels. Fix this before creating any environments.
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 = CUDA 12.8. Driver 580 supports up to CUDA 13.0. CUDA is backward compatible — driver 580
runs CUDA 12.8 binaries perfectly fine.
pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu128
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
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
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
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
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="amdgpu_bl2", RUN+="/bin/chmod a+w /sys/class/backlight/amdgpu_bl2/brightness"
sudo udevadm control --reload-rules && sudo udevadm trigger
Step 4 — acpid for Fn brightness keys
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
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.
rog-control-center
# Error: neither WAYLAND_DISPLAY nor WAYLAND_SOCKET is set
# note: enable the winit/x11 feature to support X11
# Aborted (core dumped)
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.
# 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
Verified working system
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.