In this article "How to install Arch Linux and support graphics", I will help you install Arch Linux alongside support for GUIs on a single/multi-boot system. I will focus on UEFI while pointing out special actions for Legacy BIOS if needed. I will also cover Arch Linux Installation alongside Windows. At the same time, I will also explain each term and what each package/command does. This will answer lots of your questions like:
-
How to mount a new hard disk during the boot automatically?
-
How to make Arch Linux game ready?
-
What is display manager and how to change it?
-
How to partition and format a disk in Linux?
-
How to block certain websites such as po*n sites?
-
How to create a sandbox environment using arch-chroot?
-
What is swap partition in Linux?
-
How to manage user accounts? How to add a user to a group in Linux?
-
How to use Live CD/USB to fix the unbootable Linux Computer?
-
How to use existing Arch Linux setup instead of Live CD/USB to install Arch Linux on a separate computer?
Note: If you are uncomfortable with it, you can try it on Virtual Box, but be warned that it uses Legacy BIOS. To change it to UEFI, check the EFI tick box in Settings > System > Motherboard.
Table of Contents
1. Download Arch Linux ISO and Create a Bootable USB Drive
You first need to download the ISO file from the official website. Once the file is ready, you will need to create a bootable USB drive. For this, you can use either the Linux commands or GUI utilities.
1.1 Create Bootable Drive Using Linux Commands
The name of the USB drive can be found by using lsblk --path
. Here, you need to be very careful - choosing the wrong drive will erase everything on it.
After finding the drive's name, use the following dd command to create the bootable USB drive (also known as "Live USB drive"):
# dd if=YOUR-ISO-FILE of=/dev/sdX status=progress
In the above command, replace YOUR-ISO-FILE with your downloaded *.iso file and /dev/sdX with the appropriate USB drive.
A sample example might look like this:
# dd if='/home/ajay/Downloads/Archlinux/archlinux-2021.09.01-x86_64.iso'
of=/dev/sda status=progress
You can also use GUI tools as given below.
1.2 Create Bootable Drive Using GUI Utilities
Alternatively, if you are not comfortable with dd or if you are working from a Windows computer, you can also use GUI tools like Etcher or Rufus. Both are free and open-source and both work on Linux and Windows.
Now that you have created your bootable drive, you will use it to boot into the Live Environment. For starters, Live Environment is a temporary "Operating System" (in your case, temporary Arch Linux) and basically, it is used to install a full-fledged Operating System on a separate Hard Disk (or SSD).
2. Boot into the Live Environment
Before you boot, you need to disable UEFI's Secure Boot because the Live Environment created above does not support it. You can enable it later after you are done with the installation.
2.1 Disable Secure Boot
To disable it, you can use the Boot Menu on your computer. To access this menu, follow the guide from your computer's manufacturer. Alternatively, if you are installing the Arch Linux alongside Windows, you can access the menu directly from Windows (for Windows 10, Settings > Update & Security > Recovery > Advanced startup (Restart now) > Troubleshoot > Advanced options > UEFI Firmware settings > restart.).
Now, you can boot using the Live USB drive. If your computer is based on Legacy BIOS, your screen might look like this:
And if it is based on UEFI, it might look like the following:
In both cases, just hit Enter on the first selected item. After booting into the Live Environment, you will first configure Live Environment a little bit.
3. Configuration of the Live Environment
This step involves setting up the keyboard layout, internet connection, and system clocks.
3.1 Set the Keyboard Layout
If you are from an English-speaking country, you should leave it to its default value - **US**
to reduce complexities and move to the next step.
But, if you want to change it to other layouts, use the loadkeys command:
# loadkeys LAYOUT
Where the LAYOUT should be replaced with your desired keyboard layout. All available keyboard layouts can be found using the following command:
# ls /usr/share/kbd/keymaps/**/*.map.gz | less
Output:
For example, to set the keyboard layout to sun-pl as shown in one of the rectangles in the above figure, you will be using:
# loadkeys sun-pl
3.2 Connect to the Internet
By default, The Live Environment supports both Ethernet and Wi-Fi (wireless using iwctl).
Alternatively, You can use USB Tethering to connect through your smartphone. Just connect your USB cable, activate tethering from your phone, and that's all.
Now, verify that the internet is working using the ping command:
# ping google.com
3.3 Update the System Clock
# timedatectl set-ntp true
Now check if this is updated using timedatectl status:
# timedatectl status
Sample Output:
Local time: Wed 2021-12-22 14:52:32 UTC
Universal time: Wed 2021-12-22 14:52:32 UTC
RTC time: Wed 2021-12-22 14:52:32
Time zone: UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Now that you have configured your Live Environment, you will use it to format, partition, and mount your hard disk (or SSD).
4. Partition, Format and Mount Your Drive
You will need to partition and mount your disk according to the following Partition Table:
Mount Point | Partition | Partition Type | Suggested Size |
---|---|---|---|
[SWAP] (optional) | /dev/swap_partition | Linux swap | At least 512 MiB; recommended - 1.5 times the size of your RAM |
/mnt/boot/EFI | /dev/efi_system_partition | EFI system | At least 260 MiB |
/mnt | /dev/root_partition | Linux filesystem (/) | The remainder of the device |
The table was taken and modified from Archwiki
Note 1: The swap partition is a partition of your Hard Disk (or SSD) and it is basically used when your RAM runs out of space. It is also used to hibernate your laptop. But if you have RAM with higher capacity and don't want hibernation, you can omit this.
Note 2: Instead of a swap partition, you can create a swap file.
Note 2: EFI partition is not needed for BIOS-based systems.
4.1 Partition Your Drive
To partition your disks, you can use the following fdisk command:
# fdisk /dev/disk_to_be_partitioned
Another such partitioning utility is parted.
But, I will recommend cfdisk which I find the most user-friendly among all three. Find your drive using lsblk --path
. Then use cfdisk over it. For example:
# cfdisk /dev/sda
If you are asked about the label type, choose GPT which is the most suitable type for UEFI systems. For BIOS, choose DOS (also called MBR).
Your Screen might look like this:
To create the root partition, select the Free Space and the New button shown at the bottom using the arrow keys. Hit Enter. Then it will ask you the size of this partition. After choosing the size, the type 'Linux filesystem' will be assigned automatically.
To create the swap partition, follow the same method as above. One extra step will be to change the type to 'Linux swap' using the Type button shown at the bottom:
Similarly, for UEFI, you need to create the EFI partition with the appropriate size and type.
At the same time, if your computer already had the EFI partition, you should use that instead of creating a new one. For example, if you are planning to install Archlinux alongside Windows, you will be using the EFI partition created by Windows.
After partitioning the drive, use the Write button which will write everything to your drive. Do it at the very end after confirming everything. Now you need to format these partitions.
4.2 Format the Partitions
Format the root partition with ext4:
# mkfs.ext4 /dev/root_partition
Make the swap partition using mkswap:
# mkswap /dev/swap_partition
For the newly created EFI partition, format it into fat32:
# mkfs.fat -F 32 /dev/efi_system_partition
4.3 Mount the partitions
Now, you need to mount all the partitions as given in the above Partition Table:
# mount /dev/root_partition /mnt
The swap partition is not mounted anywhere. Instead, it is enabled using swapon:
# swapon /dev/swap_partition
After that, mount your EFI partition:
# mkdir /mnt/boot/EFI
# mount /dev/efi_system_partition /mnt/boot/EFI
Now that you have mounted all your partitions, you will be installing your Arch Linux on them.
5. Install Basic Arch Linux
Here, you cannot use pacman because that will install the packages only into the Live Environment instead of the mounted partitions. Instead, use pacstrap:
# pacstrap /mnt base linux linux-firmware nano networkmanager man-db man-pages texinfo sudo
Package | Application |
---|---|
base | minimum package set to define basic Arch Linux installation |
linux | the Linux kernel; alternatively, use linux-hardened (security-focused), linux-lts (stability focused), linux-zen (performance-focused such as gaming) |
linux-firmware | according to Gentoo, linux-firmware contains proprietary drivers for some hardware (like AMD and Nvidia cards) |
nano | text editor; alternatively use vim or emacs. |
networkmanager | networkmanager provides network management tools like nmcli, nmtui, and a daemon |
man-db and man-pages | man-db and man-pages provide man pages |
texinfo | texinfo provides info pages |
sudo | sudo gives certain users the power to run administrative commands |
Table: Packages and Their Applications
After the basic installation of Arch Linux, you need to configure it as given below.
6. Configuration of the Arch Linux
6.1 Generate a Fstab File
In the previous steps, you mounted your partitions in the hard disk manually. The fstab file enables your computer to mount all the partitions without human intervention during boot. To create it, use genfstab:
# genfstab -U /mnt >> /mnt/etc/fstab
6.2 Change the Apparent Root
Now, make /mnt your apparent root directory by using arch-chroot:
# arch-chroot /mnt
The prompt changes from root@archiso ~ #
to [root@archiso /] #
This enables you to use pacman to install any package on your hard disk. You don't need pacstrap anymore. The same argument goes for any other command given below.
6.3 Set Your Time Zone
Find the (Time Zone) TZ using tzselect:
# tzselect
Now, use the above value of TZ and create a symlink using ln:
# ln --symbolic --force /usr/share/zoneinfo/TZ /etc/localtime
So, for TZ='Europe/Paris':
# ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
After setting your time zone, set the hardware clock from the system clock as given below.
6.4 Set the Hardware Clock from the System Clock
Clocks | Description |
---|---|
Hardware Clock | The Hardware Clock is also known as CMOS clock, BIOS clock, and Real-Time Clock (RTC); runs even when the machine is powered off. |
System Clock | The System Clock runs only when Linux is running. |
Table: Hardware and System Clocks in Linux.
To set it use hwclock - an administration tool for these clocks:
# hwclock --systohc
6.5 Localization
You need to uncomment appropriate locales from a file /etc/locale.gen. For the English language and minimal complexity, uncomment en_US.UTF-8 UTF-8:
# nano /etc/locale.gen
Now, use locale-gen to generate locales based on the above file:
# locale-gen
Please notice that each locale in the above file /etc/locale.gen comprises two items separated by space. Now, set the LANG variable equal to the first of these two items:
# echo LANG=en_US.UTF-8 > /etc/locale.conf
Similarly, you need to set the KEYMAP variable in /etc/vconsole.conf. The value of this variable would be the keyboard layout set above in the Live Environment. This is done to set your keyboard layout permanently. Skip this step for the US layout.
# echo KEYMAP=YOUR-LAYOUT > /etc/vconsole.conf
6.6 Set Up Your Network
Create a short and memorable hostname (for example, thinkpad) for your computer. This is done by writing your hostname into /etc/hostname. This name will be used to identify your computer in your home network. I have set it to 'thinkpad':
# echo thinkpad > /etc/hostname
Now, you need to map a few IP addresses with their hostnames in a file /etc/hosts. Just put the following lines in this file:
127.0.0.1 localhost
::1 localhost
127.0.1.1 HOSTNAME
Few points to note in the above example:
-
Replace HOSTNAME with your hostname. For the example mentioned above, it is 'thinkpad'.
-
If you have permanent ip address, use that instead of 127.0.1.1 in the third line.
-
You can even use this mapping to ban unwanted websites such as po*n sites.
-
For more information, look up manpage - man 5 hosts.
Now, enable the NetworkManager using systemctl:
# systemctl enable NetworkManager
6.7 Set Up User Accounts
First of all, set a password for the admin (i.e. root) account using passwd:
# passwd
Secondly, add a non-root user (for example, mcloven
😀) using useradd:
# useradd --create-home mcloven
Here, --create-home
creates a home directory for the user. It will include Downloads, Documents, Music, Videos, .config, and other directories.
Now create a password for this user using passwd. My recommendation would be to use the same password for both root and non-root users for easy maintenance of your personal computer.
# passwd mcloven
Add this user to the following groups using usermod:
# usermod --append --groups wheel,audio,video,optical,storage mcloven
Here, the user is being added to the audio, video, optical, and storage groups to provide the user special privileges to operate on audio, video, optical, and storage devices respectively. To find a list of other such groups, follow this archwiki link. Similarly, the wheel group provides the power to use the sudo commands.
6.8 Configure Sudo
After adding the user to the wheel group, you need to edit sudo's configuration file i.e. /etc/sudoers. You cannot edit this file directly. Instead, you need to use visudo command:
# EDITOR=nano visudo
Now uncomment %wheel ALL=(ALL:ALL) ALL
to allow members of the group 'wheel' to execute root commands. They will still need to prepend the commands with sudo and enter their own passwords.
Or, uncomment %wheel ALL=(ALL:ALL) NOPASSWD: ALL
. It is just like above but here no password will be asked.
Personally, I will go with the first one for security reasons.
🙂 Fun Point: EDITOR=nano is prepended. The reason is the same as that in the crontab command.
6.9 Grub Bootloader
Grub is one of the best bootloaders. Most of the online tutorials are based on the grub. Systemd also provides a boot loader but that is very basic. Hence, I will be covering grub in this article. For this, install grub and related packages:
pacman -S grub os-prober efibootmgr mtools dosfstools
Package | Applications |
---|---|
os-prober | os-prober is needed to detect other Operating Systems. |
efibootmgr | efibootmgr is used to write boot entries for UEFI (unnecessary for BIOS). |
dosfstools | dosfstools provides FAT utilities (mkfs.fat, fsck.fat and fatlabel) for FAT-formatted EFI partitions. |
mtools | mtools is used to access DOS disks. |
Table: Packages and Their Applications
Now, for UEFI, execute the following grub-install command:
# grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
And, for BIOS, it should be the following (please note the /dev/sdX; it is not /dev/sdX1 ...):
# grub-install --target=i386-pc /dev/sdX
Here, the --target
flag is used to tell the grub about the target platform.
After the grub-install command, you will need to generate grub's configuration file using the grub-mkconfig:
# grub-mkconfig --output=/boot/grub/grub.cfg
If you get the message 'Warning: os-prober will not be executed to detect other bootable partitions', then uncomment/add the following line in the file /etc/default/grub and re-execute the above command.
GRUB_DISABLE_OS_PROBER=false
Now that you have finished configuring your Arch Linux, you need to reboot by following the next step.
6.10 Reboot
Before restarting your computer, first exit from the chrooted environment using exit:
# exit
This will put you back into the Live Environment. From the Live Environment, unmount all the previously mounted partitions using the umount:
# umount --lazy /mnt/boot/EFI
# umount --lazy /mnt
After unmounting all the partitions, shut down the computer using:
# shutdown now
Now remove the Bootable USB drive from your computer and start your computer. When you start the computer, you will be prompted for a user and its password. Use either root or mcloven.
📔Note: if while booting, you other OS such as Windows is not being shown, boot into the new linux installation and rerun the grub-mkconfig
command shown above.
7. Install Microcodes
Install amd-ucode or intel-ucode for AMD or Intel CPUs respectively. These are microcodes and are used to improve system stability. If you are installing Arch Linux on a removable disk, you need to install both.
# pacman -S amd-ucode intel-ucode
After installing the above microcodes, regenerate grub configuration files using grub-mkconfig:
# grub-mkconfig --output=/boot/grub/grub.cfg
That's all. The installation of Arch Linux is complete. But to have support for Graphical User Interface (GUI) applications, follow the next heading.
8. Support for GUI Applications
You need 3 packages in general:
-
A "display server" (example - xorg-server)
-
A "login manager" also known as "display manager" (example - lightdm and sddm). It will provide a nice login window. Alternatively, use xorg-xinit for minimal setups.
-
"Desktop environment" (example- gnome-desktop and xfce4) or "window manager" (example- i3-gaps and openbox).
Instead of xorg-server, you can install a package group called xorg which includes not just the xorg-server but other packages as well. This is better if you are a beginner and want to avoid further complexities:
# pacman -S xorg sddm gnome-desktop
Enable the sddm using systemctl:
# systemctl enable sddm.service
Now, to improve the graphical performance, install special video drivers as well.
9. Install Video Drivers
9.1 For AMD GPUs
Install mesa, xf86-video-amdgpu, vulkan-radeon or amdvlk:
# pacman -S mesa xf86-video-amdgpu vulkan-radeon
If you are planning to run 32-bit applications like Steam to play games, you need to install these packages' 32-bit versions as well. To install any 32-bit package in Arch Linux, you will need to enable its multilib repository by uncommenting two lines in the file /etc/pacman.conf:
/etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist
Now, install respective 32-bit packages:
# pacman -S lib32-mesa lib32-vulkan-radeon
Here,
packages | application |
---|---|
mesa and lib32-mesa | 3D acceleration |
xf86-video-amdgpu | 2D acceleration |
vulkan-radeon and lib32-vulkan-radeon | for Vulkan support |
Table: Packages and Their Applications
To push the graphical limit even further, see AMDGPU page in Archwiki.
9.2 For Intel GPUs
# pacman -S mesa vulkan-intel
packages | application |
---|---|
mesa and lib32-mesa | 3D acceleration |
xf86-video-amdgpu | 2D acceleration |
vulkan-intel and lib32-vulkan-intel | for Vulkan support |
However, xf86-video-intel is buggy. Ubuntu and Fedora do not install it. Use Xorg's built-in basic facility instead.
Extra Information: Another reason to prefer AMD hardware in Linux.
For more information, see the Intel Graphics page in Archwiki.
9.3 For Nvidia GPUs
Install nvidia, nvidia-utils, and lib32-nvidia-utils (for 32-bit support) for Nvidia drivers. If they are installed, Xorg gives them priority over built-in nouveau drivers.
# pacman -S nvidia nvidia-utils
For more information, see the Nvidia Graphics page in Archwiki.
9.4 For Virtual Box
Install xf86-video-fbdev:
# pacman -S xf86-video-fbdev
10. Way Ahead
That's all. Reboot and then you can also say "BTW, I use arch 🙂".
But, if your system is not booting ☹️, follow these steps:
-
Use the Live USB drive and boot into the Live Environment.
-
Do not format your partitions. Instead mount them.
-
Use arch-chroot /mnt command to chroot into the unbootable environment.
-
Now, troubleshoot it using the internet.
Thank you for staying so long. If there are some mistakes or suggestions, comment below.
Further Setup: