Install Arch Linux with the GNOME graphical interface

My notes for installing Arch Linux with the GNOME graphical interface, including full disk encryption with LUKS and LVM.

Arch Linux stands out in the Unix/Linux world, particularly for its philosophy and technical choices. Without diving into debates, here is a technical guide to install Arch Linux with full disk encryption and the GNOME graphical interface.

This article is partly based on the excellent guide by Frederic BEZIES and the Arch Linux wiki . It is not a copy — just a personal interpretation with a few additions.

Why Arch Linux?#

I mainly use the Debian distribution, both professionally and personally. Debian’s apt package system avoids compatibility issues and prevents breaking the system too quickly. However, this reliability has a cost: you don’t get the latest features immediately (sometimes months later).

What attracted me to Arch Linux is its update model: Rolling Release. Updates become available very quickly after development, rather than after a specific testing period.

The risk of breakage in a rolling release is real and higher than with Debian, for example. Always keep up-to-date backups and test them occasionally.

Additionally, Arch Linux gives you very broad control over your system, which also means you must tell it exactly what to do. If you don’t know what you’re doing, prefer Debian.

Starting the installation#

In this guide, I will use Oracle VirtualBox as a Type 2 hypervisor. A virtual machine with 1 vCPU, 2 GB RAM, and a single 25 GB virtual disk.

Prerequisites#

When booting from the ISO image, the keyboard defaults to QWERTY. If you have an AZERTY keyboard, press loadkeys fr to switch layouts.

Creating the partition scheme#

I use the cgdisk utility, which forces GPT and UEFI standards.

Type the disk path (usually /dev/sda). To find your disk, run fdisk -l. An interface will appear to manage your partitions — for this guide: cgdisk /dev/sda.

Select the free space with the arrow keys, then navigate to “[ New ]” and press Enter. Accept the default for the first sector.

Proposed partition scheme:

  • boot partition — 512 MB — type ef00: for the bootloader (GRUB2)
  • system partition — 20 GB — type 8300 (Linux Filesystem): for LVM

There are only two main partitions; the system volumes (/, /home, /tmp) will be created inside LVM.

When done, select “[ Write ]” to save the partition table.

Creating the file systems#

The technical choice here is LVM: snapshots, hot resize, straightforward management.

First, create an encrypted container with cryptsetup. Run cryptsetup benchmark to see benchmark results and choose the best algorithm for your hardware.

bash
mkfs.vfat -F32 /dev/sda1
cryptsetup --type luks2 --cipher aes-xts-plain64 --hash sha256 --iter-time 2500 --pbkdf argon2id --use-passphrase luksFormat /dev/sda2

Open the encrypted container and create the LVM physical volume:

bash
cryptsetup luksOpen /dev/sda2 luks
pvcreate /dev/mapper/luks

Create the volume group (named “stoLocal” here):

bash
vgcreate stoLocal /dev/mapper/luks

Use pvdisplay and vgdisplay to inspect the LVM configuration.

Create logical volumes:

bash
lvcreate -L 8G stoLocal -n root
lvcreate -L 2G stoLocal -n home
lvcreate -L 1G stoLocal -n tmp

Load the LVM module and activate volumes:

bash
modprobe dm_mod
vgscan
vgchange -ay

Run fdisk -l to confirm the logical volumes are now visible.

Mounting the system partitions#

Format the logical volumes with btrfs:

bash
mkfs.btrfs /dev/mapper/stoLocal-root
mkfs.btrfs /dev/mapper/stoLocal-home
mkfs.btrfs /dev/mapper/stoLocal-tmp

Mount root first:

bash
mount /dev/mapper/stoLocal-root /mnt

Create mount points and mount:

bash
mkdir /mnt/home
mkdir -p /mnt/boot/efi

mount -t vfat /dev/sda1 /mnt/boot/efi
mount /dev/mapper/stoLocal-home /mnt/home

System installation#

Pacman mirror list#

Since 2024, the mirror list is generated automatically via reflector, which selects the fastest servers based on your location.

Installing the base system#

bash
pacstrap /mnt base base-devel linux lvm2

Add useful packages for daily use:

bash
pacstrap /mnt vi vim nano grub efibootmgr less openssh sudo systemd-resolvconf ntp linux-firmware networkmanager acpid cronie logrotate inetutils sysfsutils e2fsprogs man-db man-pages ttf-dejavu ttf-liberation ttf-opensans noto-fonts-emoji lsof strace htop iotop iftop

Generating the fstab file#

bash
genfstab -Up /mnt >> /mnt/etc/fstab

Setting the system language#

Edit /mnt/etc/locale.gen and uncomment en_US.UTF-8 (or your preferred locale):

bash
nano /mnt/etc/locale.gen

Create locale.conf:

bash
nano /mnt/etc/locale.conf
# content
LANG="en_US.UTF-8"
LC_COLLATE=C

Generate locales: arch-chroot /mnt locale-gen

Create vconsole.conf for terminal keyboard layout:

bash
echo "KEYMAP=us" > /mnt/etc/vconsole.conf

Hostname#

bash
echo "machine_name" > /mnt/etc/hostname

Date and time#

bash
arch-chroot /mnt ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime
arch-chroot /mnt hwclock --systohc --localtime

Creating user accounts#

Set the root password:

bash
arch-chroot /mnt passwd root

Create a user account:

bash
arch-chroot /mnt useradd -g users -G storage -m -s /bin/bash username
arch-chroot /mnt passwd username

GRUB configuration#

Configure mkinitcpio to include LVM and encryption:

bash
sed -i '/^HOOK/s/filesystems/lvm2 encrypt filesystems/' /mnt/etc/mkinitcpio.conf

Generate the ramdisk:

bash
arch-chroot /mnt mkinitcpio -p linux

Install GRUB for UEFI:

bash
arch-chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck

Edit /mnt/etc/default/grub and add the LUKS device to GRUB_CMDLINE_LINUX:

bash
cryptdevice=/dev/sda2:luks:allow-discards

Generate the GRUB config:

bash
arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg

Enabling services and rebooting#

bash
arch-chroot /mnt systemctl enable {NetworkManager,ntpd,acpid,cronie,systemd-resolved}

Unmount and reboot:

bash
umount -R /mnt
reboot

Installing the GNOME graphical interface#

In Arch Linux, the privileged group is wheel. Add your user:

bash
su root
usermod -aG wheel username

Installing the display server#

bash
sudo pacman -S xorg

Since GNOME 43, Wayland is the default and recommended display protocol. X.Org remains available as a fallback.

Installing graphics drivers#

Display all available drivers: sudo pacman -Ss xf86-video

Common drivers:

  • Intel — open source: sudo pacman -S xf86-video-intel
  • nVidia — open source: sudo pacman -S xf86-video-nouveau
  • nVidiaproprietary: sudo pacman -S nvidia
  • ATI — open source: sudo pacman -S xf86-video-ati
  • VMware: sudo pacman -S xf86-video-vmware
  • VirtualBox: sudo pacman -S xf86-video-vesa

Do not install both the proprietary and open source driver at the same time.

Installing GNOME#

bash
sudo pacman -S gnome-control-center gnome-session gnome-shell gnome-tweaks nautilus gnome-power-manager xdg-user-dirs-gtk gdm gnome-software-packagekit-plugin

Enable the display manager:

bash
sudo systemctl enable gdm.service

End of installation#

The system is now complete with an up-to-date OS, essential packages, a configured user, and a graphical interface. Reboot your machine to test the new setup!

Sources#

Stay Updated

Subscribe to the RSS feed or follow for new articles.

Related articles

Latest in #archlinux

No image

Emojis in Arch Linux

You don't see emojis in your freshly installed Arch Linux? One packet is enough to solve the problem, follow the guide!

Read more