ArchWiki: Arch installation guide
ArchWiki: Dell XPS 13 Plus (9320)
It's not working:
-
I did not manage to make hibernation to disk to work properly.
-
I did not try to configure the keyboard special keys like volume, mic and brightness.
On first run of the preinstalled Ubuntu, create an OS Recovery Media on an external USB flash drive to be able to restore the computer to its factory shipped state, in case Arch installation does not succeed. Optionally, the OS Media can be created after the first boot with the Dell Recovery tool.
BIOS is accessed on startup by hitting F2.
- Under
Boot Configuration
disable Secure Boot (it can be re-enabled after installation). - Under
Power
, set the Battery Configuration toCustom
, starting at 50% and stopping at 80% (to improve battery life).
Download Arch ISO from a mirror (see Arch Linux Downloads):
# wget https://archlinux.cu.be/iso/2022.10.01/archlinux-x86_64.iso
Verify its signature by comparing the key-fingerprint (4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC):
# wget https://archlinux.cu.be/iso/2022.10.01/archlinux-x86_64.iso.sig
# gpg --keyserver-options auto-key-retrieve --verify archlinux-x86_64.iso.sig
# gpg --auto-key-locate clear,wkd -v --locate-external-key pierre@archlinux.de
Further signature check (in case it has been manipulated) can be done with a command-line front-end for Sequoia:
# sq wkd get pierre@archlinux.de > release-key.pgp
# sq verify --signer-cert release-key.pgp --detached archlinux-2022.10.01-x86_64.iso.sig archlinux-2022.10.01-x86_64.iso
Additionally check if the image matches the checksum from sha256 or blake2b, where the output should contain a line as archlinux-x86_64.iso: OK
:
# wget https://archlinux.cu.be/iso/2022.10.01/sha256sums.txt
# sha256sum -c sha256sums.txt
# wget https://archlinux.cu.be/iso/2022.10.01/b2sums.txt
# b2sum -c b2sums.txt
Create the bootable USB flash drive (the USB drive path /dev/sdX
can be retrieved with lsblk
):
# sudo dd bs=4M if=archlinux-x86_64.iso of=/dev/sda conv=fsync oflag=direct status=progress
To boot from the USB drive, hit F12 when the system boots up and this will bring to One-Time Boot Settings
.
There choose UEFI Generic Mass Storage xxx
.
In my case the keyboard has US layout, which is already the default. Otherwise it could be set with loadkeys.
Connect to the internet with iwctl:
# iwctl
[iwd]# device list (to get the _device_name_)
[iwd]# station device_name scan
[iwd]# station device_name get-networks (to get the network name _SSID_)
[iwd]# station device_name connect SSID
[iwd]# quit
Check the connection: ping -c 3 www.archlinux.org
.
Update the system clock with timedatectl
, in my case need to update the time zone:
# timedatectl status (to check if it is correct)
# timedatectl list-timezones (to list available time zones)
# timedatectl set-timezone Europe/Madrid
No need to create another EFI system partition as it already has one. Just remove main Linux partition and create another one, with a swap space of 33GB at the end (slightly higher than the ram memory size to avoid problems on hibernation).
# parted /dev/nvme0n1
(parted) rm 3
(parted) mkpart primary ext4 9524MB 988GB
(parted) mkpart primary linux-swap 988GB 100%
(parted) quit
I'll not create full system encryption, but instead only encrypt my home directory later at file system level with eCryptfs. Having the root file system not encrypted saved my life a couple of times.
Format the new partitions:
# mkfs.ext4 /dev/nvme0n1p3
# mkswap /dev/nvme0n1p4
Mount the file systems:
# mount /dev/nvme0n1p3 /mnt
# mkdir /mnt/boot
# mount /dev/nvme0n1p1 /mnt/boot
# swapon /dev/nvme0n1p4
Reorder the mirror list at /etc/pacman.d/mirrorlist
if necessary.
Then install a minimum set of packages for a functional base system:
# pacstrap -K /mnt base linux linux-firmware sof-firmware netctl wpa_supplicant dhcpcd dialog fwupd grub efibootmgr intel-ucode sudo vim
Create fstab on the new system:
# genfstab -U /mnt >> /mnt/etc/fstab
To continue the configuration, change root into the new system:
# arch-chroot /mnt
Set time zone:
# ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Generate /etc/adjtime
(hardware clock):
# hwclock --systohc
Uncomment en_US.UTF-8
line in /etc/locale.gen
and generate the locales:
# sed -i 's/^#en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
Give your machine a nice name:
# echo nice_name > /etc/hostname
Later, after finishing all the rest of configuration, enable netctl-auto
systemd unit for automatic connection to known profiles:
# sudo systemctl enable netctl-auto@wlp0s20f3.service
# sudo systemctl start netctl-auto@wlp0s20f3.service
Set the root password:
# passwd
Create a new user user_name:
# useradd -m -G wheel,users -s /bin/bash _user_name_
# passwd _user_name_
Uncomment the line %wheel ALL=(ALL) ALL
with visudo
:
# visudo
In principle there is no need to edit mkinitcpio configuration file. Only install GRUB EFI application and generate its configuration file:
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
# grub-mkconfig -o /boot/grub/grub.cfg
Exit chroot, unmount all partitions and reboot:
# exit
# umount -R /mnt
# reboot
Efforts to make the webcan work across browsers can be found here. I used @stefanpartheym's script which basically strings together the content of this comment.
$ git clone https://github.com/stefanpartheym/archlinux-ipu6-webcam.git
$ cd archlinux-ipu6-webcam/
$ bash install.sh -a
Note: I need to enable vpn, otherwise v4l2loopback repo could not be cloned.
Camera light blinks after system startup, and it works if I run the command:
$ sudo -E LANG=C gst-launch-1.0 icamerasrc ! video/x-raw,format=NV12,width=1280,height=720 ! videoconvert ! ximagesink
But the camera seems unrecognized by browsers (like firefox and chrome) and video conference apps (like Jitsi).
systemctl status v4l2-relayd
shows:
Mar 02 14:47:40 bell v4l2-relayd[7026]: gst_element_set_state: assertion 'GST_IS_ELEMENT (element)' failed
An earlier attempt to install the intel packages one by one failed. Here I put only to remember the steps done. Install kernel drivers for the IPU and sensors, via dkms build:
$ git clone https://github.com/intel/ipu6-drivers.git
$ cd ipu6-drivers
$ cp -r ivsc-driver/backport-include ivsc-driver/drivers ivsc-driver/include .
$ rm -rf ivsc-driver
$ sudo dkms add .
$ sudo dkms autoinstall ipu6-drivers/0.0.0
Install IPU firmware and proprietary image processing libraries:
$ git clone https://github.com/intel/ipu6-camera-bins.git
$ cd ipu6-camera-bins
$ sudo cp -r ipu6ep/include/* /usr/include/
$ sudo cp -r ipu6ep/lib/* /usr/lib/
Install HAL for processing of images in userspace:
$ git clone https://github.com/intel/ipu6-camera-hal.git
$ cd ipu6-camera-hal
$ IPU6_VER=ipu6ep
$ mkdir -p ./build/out/install/usr && cd ./build/
$ cmake -DCMAKE_BUILD_TYPE=Release -DIPU_VER=${IPU6_VER} -DENABLE_VIRTUAL_IPU_PIPE=OFF -DUSE_PG_LITE_PIPE=ON -DUSE_STATIC_GRAPH=OFF -DCMAKE_INSTALL_PREFIX=/usr ..
$ make -j4
$ sudo make install
$ sudo cp ../config/linux/rules.d/60-intel-ipu-* /lib/udev/rules.d/
$ shutdown -r now
Install Gstreamer src plugin:
$ git clone https://github.com/intel/icamerasrc.git
$ cd icamerasrc
$ git checkout icamerasrc_slim_api
$ export CHROME_SLIM_CAMHAL=ON
$ export STRIP_VIRTUAL_CHANNEL_CAMHAL=ON
$ export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig"
$ export PKG_CONFIG_PATH="/usr/lib/pkgconfig"
$ ./autogen.sh
$ make -j4
$ sudo make install
$ sudo pacman -S rpm-tools
$ make rpm
$ sudo rpm -ivh --force --nodeps rpm/icamerasrc-1.0.0-1.20230306.2d36ade.x86_64.rpm
Install gst good pluglins:
$ sudo pacman -S gst-plugins-good
Now the virtual camera can be launched on a terminal with:
$ sudo -E gst-launch-1.0 icamerasrc buffer-count=7 device-name=ov01a10-uf ! v4l2sink device=/dev/video0
PS: test ok chrome and firefox for lts-kernel (<6.2).