How to install Arch Linux on the Zephyrus G14 with full GPU support
Raphael Tang / August 21, 2021
16 min read
In this blog post, we will cover how to install Arch Linux on the G14 with full GPU support and getting everything working properly. Most importantly, the mic mute button. Later on, I will also show you how to get a QEMU/KVM Windows VM with GPU passthrough and most of the things working properly to be able to use Windows in your Linux daily driver setup, getting the best of both worlds.
Recently, I've been having a lot of problems with Windows in my daily life. Because I already use Arch on my Surface, I decided to try something new this time. I installed Pop!_OS instead of Arch. The first few days were perfectly fine, however, after a few weeks, I discovered that there were a few bugs in GNOME that really annoyed me and sometimes the Pop! Shop would just randomly freeze on me. Another issue was a glitch with the launchpad menu, which caused icons to cut-off somehow. Here's how it looks like:
That is why today, I will be sharing my experience and more as to how I installed Arch on my Zephyrus G14. Let's get started.
First, you will want to install Arch Linux with the base linux kernel and the standard kernel headers. As a disclaimer, this tutorial is not the most comprehensive guide to install Arch. For a better and more comprehensive guide, take a look at the Arch Wiki instead.
Since the G14 has a UEFI BIOS system, the installation steps below will be only for BIOSes with UEFI support instead.
Head over to https://www.archlinux.org/download/ and grab the latest ISO file. You will probably want to install one from a mirror that is closest to you.
You will have to create a live USB of Arch Linux from the ISO you just downloaded.
You may use Etcher to create the live USB.
Do note that in some cases, you may not be able to boot from live USB with secure boot enabled. If that’s the case with you, disable the secure boot first. You will have to go into your BIOS settings to do so.
To boot into the Arch Linux USB, power on the G14 and hold down the ESC key during boot. After the boot logo appears, you should see a menu that comes up telling you to choose the drive that Arch Linux is on. Just choose the correct drive.
After a while, you should see random words fly all over the screen and then a bash prompt. You have successfully booted into Arch now. Give yourself a pat on your back.
Not using US keyboard? Read thisThe default keyboard layout in the live session is US. While most English language keyboards will work just fine, the same cannot be true for French, German and other keyboards.
If you face difficulties, you can list out all the supported keyboard layout:
And then change the layout to the an appropriate one using loadkeys command. For example, if you want German keyboard, this is what you’ll use:
Next steps include partitioning disk, creating the filesystem and mounting it.
Again, read all the instructions properly and follow each steps carefully. You miss one step or ignore something and you’ll have a difficult time installing Arch.
For partitioning the disks, we’ll use the partition manager
Use this command to list all the disk and partitions on your system:
Your hard disk should be labelled /dev/sda or /dev/nvme0n1. Please use the appropriate disk labeling for your system. I am using /dev/nvme0n1 because it is how it is named on the Zephyrus G14.
First, select the disk you are going to format and partition:
I suggest that you delete any existing partitions on the disk using command d. Once you have the entire disk space free, it’s time to create new partitions with command n.
Some steps are different for UEFI and non-UEFI systems.You should verify if you have UEFI enabled system or not. Use this command:
If this directory exists, you have a UEFI enabled system. You should follow the steps for UEFI system. The steps that differ are clearly mentioned.
If you have a UEFI system, you must create an EFI partition at the beginning of your disk. Otherwise, skip this step.
When you enter n, it will ask you to choose a disk number, enter 1. Stay with the default block size, when it asks for the partition size, enter +512M.
Creating EFI System Partition | Image Credit Sacha
One important steps is to change the type of the EFI partition to EFI System (instead of Linux system).
Enter t to change type. Enter L to see all the partition types available and then enter its corresponding number to the EFI system.
Change type of EFI System Partition | Image Credit Sacha
You need to create root partition for both UEFI and legacy systems.
The common partitioning practice was/is to create root, swap and home partitions separately. You may just create a single root partition and create a swapfile and home under the root directory itself.
So, in this approach, we’ll have a single root partition, no swap, no home.
While you are in the fdisk command, press n to create a new partition. It will automatically give it partition number 2. This time keep on pressing enter to allocate entire remaining disk space to the root partition.
Picture for representational purpose only
When you are done with the disk partitioning, enter w command to write the changes to the disk and exit out of fdisk command.
Now that you have your disk partitions ready, it’s time to create filesystem on it. Follow the steps for the G14.
So, you have two disk partitions and the first one is EFI type. Create a FAT32 file system on it using the mkfs command:
mkfs.fat -F32 /dev/nvme0n1p1
Now create an Ext4 filesystem on the root partition:
For non-UEFI system, you only have one single root partition. So just make it ext4:
You can connect to WiFi with a utility called
There should be an interactive prompt. Type
help to see all available commands.
Generally, for the G14, I will do something like this:
[iwd]# station wlan0 scan [iwd]# station wlan0 get-networks [iwd]# station wlan0 connect _SSID_ [iwd]# quit
More information on
iwctl can be found here.
Once you are connected, check if you can use the internet by using the ping command:
If you get bytes in reply, you are connected. Use Ctrl+C to stop the ping reply.
This is a big problem with installing Arch Linux. If you just go on installing it, you might find that the downloads are way too slow. In some cases, it’s so slow that the download fails.
It’s because the mirrorlist (located in /etc/pacman.d/mirrorlist) has a huge number of mirrors but not in a good order. The top mirror is chosen automatically and it may not always be a good choice.
Thankfully, there is a fix for that. First sync the pacman repository so that you can download and install software:
Now, install reflector too that you can use to list the fresh and fast mirrors located in your country:
pacman -S reflector
Make a backup of mirror list (just in case):
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
Now, get the good mirror list with reflector and save it to mirrorlist. You should change the country from US to your own country.
reflector -c "US" -f 12 -l 10 -n 12 --save /etc/pacman.d/mirrorlist
All good to go now.
Since you have all the things ready, it’s time to finally install the Arch Linux. You’ll be installing it on the root directory so mount it first.
Do you remember the name of the root partition? Use it to mount it:
mount /dev/nvme0n1p2 /mnt
With root mounted, it’s time to use the wonderful pacstrap script to install all the necessary packages:
pacstrap /mnt base linux linux-firmware neovim amd-ucode
It will take some time to download and install these packages. If the downloads get interrupted, no need to panic. You can run the above command once again and it resumed the download.
I have added the NeoVim text editor to the list but if you have no idea what NeoVim and Vim is, you should use
nano instead. It will make your life much easier. I added a text editor because you’ll need to edit some files post installation.
I also added
amd-ucode. It's just a package that contains security and stability updates for the AMD processor. More information about it.
Generate a fstab file to define how disk partitions, block devices or remote file systems are mounted into the filesystem.
genfstab -U /mnt >> /mnt/etc/fstab
Now use arch-chroot and enter the mounted disk as root. Actually, now you are using the just installed Arch Linux system on the disk. You’ll have to do some configuration changes to the installed system so that you could run it properly when you boot from the disk.
To set up timezone on Linux, you can use timedatectl command. First find your time zone:
And then set it up like this (replace Europe/Paris with your desired time zone):
timedatectl set-timezone Europe/Paris
This is what sets the language, numbering, date and currency formats for your system.
The file /etc/locale.gen contains all the local settings and system language in a commented format.
Open the file using Neovim and uncomment (remove the # from the start of the line) the language you prefer. I have used en_SG.UTF-8 (English Singapore).
Now generate the locale config in /etc directory file using the below commands one by one:
locale-gen echo LANG=en_SG.UTF-8 > /etc/locale.conf export LANG=en_SG.UTF-8
Both locale and timezone settings can be changed later on as well when you are using your Arch Linux system.
Create a /etc/hostname file and add the hostname entry to this file. Hostname is basically the name of your computer on the network.
In my case, I’ll set the hostname as g14. You can choose whatever you want:
echo g14 > /etc/hostname
The next part is to edit the /etc/hosts file with NeoVim to add the following lines to it:
127.0.0.1 localhost ::1 localhost 127.0.1.1 g14
You should also set the password for the root account using the passwd command:
You should also create a new user, because it isn't good to use Linux in superuser mode.
Replace username with your own desired username.
useradd -m -G wheel -s /bin/zsh username
Then, set a password for the user:
We will also want to use sudo, so install it:
pacman -S sudo
Then, set it up by running
EDITOR=nvim visudo. On the line that says something like:
## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL) ALL
Uncomment it by removing the hashtag (#) at the beginning of the line right before %wheel.
Save and exit the file.
This is one of the crucial steps and it differs for UEFI and non-UEFI systems. As mentioned at the top of this blog post, the instructions will only be for the ASUS Zephyrus G14, which is a UEFI-based system.
I will be installing systemd-boot instead of GRUB because it is my preferred bootloader of choice. You can choose whichever bootloader you want to install.
Make sure that you are still in the arch-chroot. We need to first mount the boot partition.
Create the directory where EFI partition will be mounted:
Now, mount the ESP (Boot) partition you had created
mount /dev/nvme0n1p1 /boot
Install systemd-boot like this:
For the next step, you need the UUID of the root partition. Write it to the file first:
blkid /dev/nvme0n1p1 >>/boot/loader/entries/arch.conf >>/boot/loader/entries/arch-fallback.conf
After that, add a boot entry by editing /boot/loader/entries/arch.conf and put this in the file:
title Arch Linux linux /vmlinuz-linux initrd /amd-ucode.img initrd /initramfs-linux.img options root=UUID=uuid-of-the-partition rw
uuid-of-the-partition with the part after
UUID= from the line at the top of the file and remove the line. Don't include the quotes. An example of a UUID should be like this:
727cac18-044b-4504-87f1-a5aefa774bda and you would get it from
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
You will also want a fallback bootloader entry in case something goes wrong, so add a file for that too in /boot/loader/entries/arch-fallback.conf.
title Arch Linux (fallback initramfs) linux /vmlinuz-linux initrd /amd-ucode.img initrd /initramfs-linux-fallback.img options root=UUID=uuid-of-the-partition rw
Remember to replace uuid-of-the-partition with the part after
UUID= as mentioned above.
After you are done, update systemd-boot with the following command:
I will be installing i3-gaps, a fork of i3 which brings gaps and other small tweaks that make the whole experience much more customizable and better (in my opinion). You can choose whatever desktop environment or window manager you want though, this is just my setup.
pacman -S xorg i3-gaps networkmanager ly gnu-free-fonts emoji-font
In the above command, I installed the X11 display server, i3-gaps window manager, networkmanager for managing WiFi connections, and ly display manager for logging in to the X11 session. The fonts are so that you don't get weird boxes when you boot because Arch is so lightweight that it doesn't have fonts pre-installed. 😲
After that, you want to enable NetworkManager.service so that you can get WiFi connectivity on boot. Also enable ly so that the display manager starts on boot.
systemctl enable NetworkManager.service systemctl enable ly.service
Now exit from chroot using the exit command:
And then shutdown your system
After that, you want to unplug the USB installation drive and power on the machine. Congrats, you have successfully installed Arch Linux! 🥳Note: the installations above were adapted from https://itsfoss.com/install-arch-linux/.
Once you are done, just login to your system and this is what I usually do after I install Arch~
This section describes a general overview of what I usually do after having installed Arch. Please note that you do not need to follow anything in this section. You should set up your system the way you like it. After you are done, skip to Making everything work
- Install the yay pacman helper
- Install yadm, rofi, alacritty, polybar, i3-scrot, betterlockscreen, brave, visual-studio-code-bin, nodejs, poetry, libreoffice, syncthing, rust
- Fetch my dotfiles from https://github.com/raphtlw/dotfiles.git with yadm
- Set up systemd-logind, acpid, and configure everything to have a silent boot process.
Now, after installing Arch, we need to install the Nvidia drivers, make the mic mute button work, and have the ability to toggle between the different power modes just like you can do with the armoury crate program on Windows. We will also set up the shortcuts on the keyboard so that we can make use of fan control key and AURA key as well. I will also link the instructions to get the AniMe Matrix working.
Nvidia drivers are pretty easy. Just install the drivers:
pacman -S nvidia nvidia-prime
Now, by default, you can use
prime-run to run any program with the dedicated nvidia GPU.
If you want to completely switch to the nvidia card and stop using the AMD integrated graphics, you can do so later after installing asusctl in the next section.
asusd is a utility for Linux to control many aspects of various ASUS laptops. To install it, first get the repo by editing /etc/pacman.conf and adding this to the end of the file:
[g14] SigLevel = DatabaseNever Optional TrustAll Server = https://arch.asus-linux.org
Then just install asusctl with
pacman -Sy asusctl
After installing asusctl, enable the asus-notify service so that you get notifications when you make a change to the settings, like fan speed, keyboard backlight, etc.
systemctl --user enable --now asus-notify.service
For instructions on the AniMe Matrix, you should check out this documentation.
asusctl is a command line program which intends to be the main method of interacting with
For the AURA key, you will need to bind
asusctl led-mode -n to the key (FN+F4) for it to work. For the fan control key, you will need to bind
asusctl profile -n to the key (FN+F5).
Now, we will need to get the mic mute key to work properly. On the ASUS G14, the identification of the mic mute key doesn't correspond to the value that programs look for on Linux. To get it to work, you need to remap the key.
If you have a 2021 ROG Zephyrus G14, all you need to do is this:
Create a file at /etc/udev/hwdb.d/90-nkey.hwdb with:
evdev:input:b0003v0B05p19B6* KEYBOARD_KEY_ff31007c=f20 # x11 mic-mute
Then, update the hwdb with:
sudo systemd-hwdb update sudo udevadm trigger
This should immediately make the mic mute key usable.
Congrats, you have just completed a full Arch install on the Zephyrus G14 (2021). If this article helped you in any way, or if you have any feedback, please do let me know in the comments below.
Here's a screenshot of my Arch desktop:
I will be posting a guide to setting up a Windows 10 VM inside Arch Linux with GPU passthrough on the G14 as well, so stay tuned for that.
Subscribe to the newsletter
Get emails from me about software development, SaaS, and early access to new articles.