The Arch Linux ISOs make a “beep” from the PC speaker when you get to the initial boot screen. Depending on your computer, it can be pretty loud when the PC speaker beeps, and there is no way to turn it down or redirect to headphones or anything like that.
When you are testing an installation script over and over late at night (while your wife is sleeping in the same room ), that foolish beep sounds like it’s a hundred decibels!
You can disable the beep, but you have to extract the boot images and loader.conf
from the ISO, make loader.conf
writeable and remove the beep
option, add it back into the boot image, and repack the ISO as described here: https://wiki.archlinux.org/title/PC_speaker#Arch_Linux_ISO. It’s kind of a clunky process, plus you have to be mindful where you do it or you’ll litter whatever directory you are in with a bunch of random files that were extracted from the ISO.
Here is the same process converted into a script. It uses a temp directory for extracting files from the ISO and tidies up after itself when it’s done. It will also warn you if you try to run it without installing libisoburn
and mtools
first.
#!/bin/bash
# Exit on errors
set -e
# Check for required packages
check_package() {
pacman -Qq "$1" >/dev/null 2>&1 || {
echo "$1 is not installed."
exit 1
}
}
check_package libisoburn
check_package mtools
# Check if the ISO file has been provided as an argument
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <path_to_iso>"
exit 1
fi
ISO_FILE="$1"
ISO_NAME=$(basename "$ISO_FILE" .iso)
TEMP_DIR=$(mktemp -d)
# Extract boot images and loader.conf
osirrox -indev "$ISO_FILE" -extract_boot_images "$TEMP_DIR" -extract /loader/loader.conf "$TEMP_DIR/loader.conf"
# Make loader.conf writable and remove the beep option
chmod +w "$TEMP_DIR/loader.conf"
sed '/^beep on/d' -i "$TEMP_DIR/loader.conf"
# Add the modified loader.conf to the El Torito UEFI boot image
mcopy -D oO -i "$TEMP_DIR/eltorito_img2_uefi.img" "$TEMP_DIR/loader.conf" ::/loader/
# Repack the ISO using the modified boot image and loader.conf
xorriso -indev "$ISO_FILE" \
-outdev "${ISO_NAME}-silent.iso" \
-map "$TEMP_DIR/loader.conf" /loader/loader.conf \
-boot_image any replay \
-append_partition 2 0xef "$TEMP_DIR/eltorito_img2_uefi.img"
# Clean up temporary files
rm -rf "$TEMP_DIR"
echo "Repacked ISO created: ${ISO_NAME}-silent.iso"
The way I use it is save it in /usr/local/bin
(obviously name it whatever you want; mine is named silent_archiso.sh
), then run it from the directory that has the ISO in it like this:
silent_archiso.sh archlinux-2025.02.01-x86_64.iso
The above outputs an ISO named archlinux-2025.02.01-x86_64-silent.iso
.