Microsoft Surface Pro 3 with Arch Linux and i3 ============================================== **!!! documentation unfinished !!!** (Dual) Booting Arch Linux (and Windows) with UEFI and Secure Boot ----------------------------------------------------------------- - Save all your files, will will format the whole file system. - Download Arch Linux ISO [archlinux-yyyy.mm.dd-dual.iso] [arch] via HTTP Direct Downloads (choose a Mirror) or BitTorrent Download [arch]: https://www.archlinux.org/download/ "Arch Linux Downloads" - Create UEFI bootable USB device (with [Rufus] [rufus] and default settings) [rufus]: https://rufus.akeo.ie/ "Rufus" - Disable Secure Boot [\[Source: Windows\]] [win:sb] 1. Shut down your Surface. 2. Press and hold the volume-up button on your Surface and at the same time, press and release the power button. 3. When you see the Surface logo, release the volume-up button. The UEFI menu will display within a few seconds. 4. Disable *Secure Boot Control* [win:sb]: https://www.microsoft.com/surface/en-us/support/warranty-service-and-recovery/how-to-use-the-bios-uefi?os=windows-10&=undefined "Windows" - (Optionally: Disable Windows Fast Boot — to switch between operating systems) # Installing the Linux distro Insert the live USB and boot by holding volume down, then the power button. Optionally set the keyboard layout (default is US) $ loadkeys de-latin1 Set or in this case increase the font size $ setfont latarcyrheb-sun32 Connect to the Internet $ iw dev # list wireless devices $ iw dev wlp1s0 link # Print information about the current link $ wifi-menu -o wlp1s0 # -o hides the password Update the system clock $ timedatectl set-ntp true $ timedatectl status $ timedatectl set-timezone Europe/Berlin ## Partitioning Note: Using `parted` with `mkpart` defines partitions via a *from* and a *to* argument. $ lsblk # list devices /dev/sda? $ parted /dev/sdx # could be /dev/sda (parted) mklabel gpt # for UEFI (parted) mkpart ESP fat32 1MiB 513MiB # EFI System Partition (parted) set 1 boot on (parted) mkpart primary linux-swap 513MiB 9GiB # for 8GB DRAM (parted) mkpart primary ext4 9GiB 40% # Linux partition (parted) mkpart primary ntfs 40% 60% # Shared partition (parted) quit That last entry is for a shared NTFS filesystem that both operating systems (Linux and Windows) can use, e. g. for a cloud service like Dropbox, email, downloads, etc. The Windows section is left unallocated, it will be formatted by the windows installer. ## Formatting $ mkfs.fat -F32 /dev/sdx1 # UEFI boot must be fat32 $ mkswap /dev/sdx2 $ swapon /dev/sdx2 $ mkfs.ext4 /dev/sdx3 # Linux root $ mkfs.ntfs -f /dev/sdx4 ## Mount Mount the root partition on `/mnt` and for the boot partition first create directory and then mount it also. $ mount /dev/sdx3 /mnt $ mkdir -p /mnt/boot $ /dev/sbx1 /mnt/boot ## Install the base packages and configure the system Edit `/etc/pacman.d/mirrorlist` and select a download mirror (uncommenting the specific line). [\[see also Arch Linux Wiki: Mirrors\]] [arch:mirrors] [arch:mirrors]: https://wiki.archlinux.org/index.php/Mirrors "Arch Linux Mirrors" Install the base packages or more $ pacstrap /mnt base # or $ pacstrap -i /mnt base base-devel btrfs-progs Generate an `fstab` file, so the filesystem knows how to mount the disk partitions. [\[see also Arch Linux Wiki: fstab\]] [arch:fstab] [arch:fstab]: https://wiki.archlinux.org/index.php/Fstab "Arch Linux fstab" $ genfstab -U /mnt >> /mnt/etc/fstab Change root into the new system $ arch-chroot /mnt /bin/bash # bash shell instead of the default sh For localizations uncomment `en_US.UTF-8 UTF-8` and other needed localizations in `/etc/locale.gen`, e. g. `de_DE.UTF-8 UTF-8`. Finally generate the locale files: $ locale-gen Set the LANG variable in `/etc/locale.conf` accordingly LANG=en_US.UTF-8 Optionally set the keyboard layout and set the font in `/etc/vconsole.conf` KEYMAP=de-latin1 FONT=latarcyrheb-sun32 Set the time zone, e. g. for Germany as Europe/Berlin. Three ways possible: [\[see also Arch Linux Wiki: Time zone\]] [arch:tz] [arch:tz]: https://wiki.archlinux.org/index.php/Fstab "Arch Linux Time zone" - interactively with `tzselect` (e. g. 7) Europe, 16) Germany, 2) Germany, 1) yes), - via `timedatectl` $ timedatectl # check the current zone $ timedatectl list-timezones # list available zones $ timedatectl set-timezone Europe/Berlin # change your time zone - or create the symlink manually $ ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime Set the Hardware Clock from the System Clock, and update the timestamps in `/etc/adjtime` via: hwclock --systohc --utc ...