NOTE: This guide is not yet complete and should only be used as a light reference right now. Pull requests are greatly appreciated!
This guide overviews how to do a full wipe of the GPD MicroPC, followed by a dual boot of Arch Linux and Windows 10.
- Prerequisites
- Step 1: Use Arch USB to reformat drive
- Step 2: Install Windows 10
- Step 3: Let's Install Arch
- Step 4: Make "Linux Boot Manager" the default in the BIOS
- Step 5: From Text to X
- Tips / Suggestions
- GPD MicroPC
- Arch ISO written to USB stick
- Microsoft Windows 10 installer on USB stick
- ability to understand basic linux commands
- patience (and eyesight) to spend a good bit of time looking at small, sideways text
- Download standard Arch linux ISO
- Write ISO to USB drive
- Boot MicroPC and tap
F7
- IMMEDIATELY hit
e
which edits the kernel options and addnomodeset=1
to the end of the options and hit enter. *NOTE: You might not see the end of the kernel options on the MicroPC display. You can either connect an external display via HDMI or conservatively arrow right and shoot in the blind. If you do the later, make sure to add the space beforenomodeset=1
. - In the options, select the USB device containing Arch
- Reformat
sda
disk
Essentially, this is what we're going for:
NAME FSTYPE SIZE NOTES MOUNTPOINT
sda
├─sda1 vfat 512M efi /boot
├─sda2 luks+lvm2 60G linux /
├─sda[3-5] ~58G windows
It's critical that we make the first partition (sda1) the EFI partition. For now, we're going
to placehold our linux partition because the Windows 10 installer will create a bunch of bullshit
partitions. For this guide, by placing the linux partition directly after the EFI partition, we
can let Windows create its dumpster fire of partitions, and it won't effect us.
gdisk /dev/sda
# o ↵ to create a new empty GUID partition table (GPT)
# y ↵ to confirm
# n ↵ add a new partition
# ↵ to select default partition number of 1
# ↵ to select default start at first sector
# +512M ↵ make that size partition for booting
# ef00 ↵ EFI partition type
# n ↵ add a new partition
# ↵ to select default partition number of 2
# ↵ to select default start at first sector
# +60G ↵ allocate whatever size wanted for linux
# we're intentionally leaving space for Windows 10 partitions
# p ↵ if you want to check the partition layout
# w ↵ to write changes to disk
# y ↵ to confirm
-
Format the EFI partition to vfat
mkfs.vfat /dev/sda1
- Create a Windows 10 install USB
- Boot MicroPC and tap
F7
- In the options, select the USB device containing the Windows 10 installer
- Install Windows 10. The only important thing is that in the disk partitioner, let Windows use the unused space at the end of
the drive. The Windows installer will automatically place its EFI files into the EFI partition (
sda1
). The installer will warn you that it has to create additional partitions which is normal.
Windows will take over the MicroPC and act as if it's rolling solo and that's completely fine. It will reboot a couple times. It's also normal that Windows 10 is rotated right until Windows drivers are installed and rotation is configured.
Remove the Windows 10 install USB stick and, just like step one, insert the Arch install USB and boot into Arch.
# Encrypt /dev/sda2
# This step will ask for a password which will be used to unlock the partition on boot. Make sure you know the password.
cryptsetup luksFormat -v -s 512 -h sha512 /dev/sda2
# Open/mount encrypted disk
# Upon unlocking, this will mount the unlocked disk to /dev/mapper/luks.
cryptsetup luksOpen /dev/sda2 luks
# Create LVM2 Physical Volume (PV) on /dev/mapper/luks
pvcreate /dev/mapper/luks
# Create LVM2 Volume Group (VG) on /dev/mapper/luks
vgcreate rootvg /dev/mapper/luks
# Create LVM2 Logical Volume (LV) on rootvg
# This will create an LVM logical volume at /dev/mapper/rootvg-root.
lvcreate -n root -l 100%FREE rootvg
# Finally, format the logical volume to ext4
mkfs.ext4 /dev/mapper/rootvg-root
Internet is needed to download packages. wifi-menu
is a basic curses command which will temporarily select and configure a
wifi network.
wifi-menu
# Mount the ext4-formatted root LV
# Note: /mnt becomes your actual Arch install.
mount /dev/mapper/rootvg-root /mnt
# Make the boot directory to mount the EFI (sda1) partition
mkdir /mnt/boot
# Mount the EFI parition
mount /dev/sda1 /mnt/boot
# Pacstrap the /mnt directory with utilities needed for arch-chroot
pacstrap /mnt base base-devel dialog netctl openssl-1.0 bash-completion git intel-ucode wpa_supplicant
# Generate your fstab
genfstab -pU /mnt >> /mnt/etc/fstab
arch-chroot
drops you into your Arch filesystem in order to handle additional install tasks.
arch-chroot /mnt /bin/bash
Awesome! You're now in your to-be Arch filesystem. Let's install some basic shit.
Set your hostname (yeah, this is the most difficult part .. at least for me)
echo MYHOSTNAME > /etc/hostname
By now, you're probably sick of looking at tiny text, sideways. Let's fix the font size issue (on
reboot) by creating the file /etc/vconsole.conf
and adding:
FONT=latarcyrheb-sun32
Because we're using disk encryption and LVM2, we need to add and reorder mkinitcpio's hooks. Edit
/etc/mkinitcpio.conf
and completely replace the line beginning with HOOKS
with:
HOOKS=(base systemd autodetect keyboard modconf block sd-encrypt sd-lvm2 fsck filesystems)
The MicroPC has an insanely weird bug in which the battery
module must be included as a module
in /etc/mkinitcpio.conf
or the keyboard won't work when prompted for the LUKS password.
MODULES=(battery)
With new HOOKS (and the odd module requirement) in-tow, regenerate your ramdisk and kernel using mkinitcpio:
mkinitcpio -P
We'll be using systemd-boot
as a better grub replacement. First, install systemd-booti using the
following command. The command will create a new EFI entry named Linux Boot Manager
which will sit
alongside Windows' Windows Boot Manager
.
bootctl install
Windows will be included as a choice on boot, and any additional entries must be created in the
directory /boot/loader/entries/
. We're going to create a default entry for arch
.
First, we need the block or UUID of the sda2 LUKS partition for our arch
entry. Since
you're working sideways with little ass text, lets dump that ID right into the empty entry file:
blkid | grep sda2 | cut -d \" -f 2 > /boot/loader/entries/arch.conf
Next, add the following to the /boot/loader/entries/arch.conf
entry. Replace [UUID]
with the
UUID you dumped into the file. Remove the brackets.
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options rd.luks.name=[UUID]=luks root=/dev/mapper/rootvg-root rw fbcon=rotate:1
Of note is the kernel command line option fbcon=rotate:1
. This will rotate any non-X content to the
right (after reboot).
We also need to edit (or possibly create) the file /boot/loader/loader.conf
. This file handles
systemd-boot's general config options. Most of the following options should be self explanitory, but
one that might not be is console-mode 2
. This option will force larger text during the handoff from
the BIOS to the kernel. The file should contain:
default arch
auto-firmware no
timeout 3
Specify a timezone:
ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime
Create /etc/locale.conf
with the following:
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_ALL=C
Edit the file /etc/locale.gen
and uncomment the proper locale line:
en_US.UTF-8 UTF-8
Then, generate the locale using the following command:
locale-gen
Set a root password:
passwd
Create your user and set a password:
useradd -m -g users -G wheel,storage,power -s /bin/bash [USERNAME]
passwd [USERNAME]
If you wish to run sudo'd commands without entering a password, run export EDITOR=vi; visudo
and
uncomment the line:
%wheel ALL=(ALL) NOPASSWD: ALL
Ok, we're done in arch-chroot
! Let's unmount and restart.
# Exit arch-chroot and back into the default shell
exit
# Recursively unmount /mnt
umount -R /mnt
# Remove USB stick and reboot
reboot
This is a pretty obvious step, but the option is a bit hidden in the MicroPC's options. Restart the
MicroPC and hit ESC
to jump into the BIOS. From there, tab over to UEFI Hard Disk Drive BBS Priorities
and select Linux Boot Manager
as the first entry. Make sure to save and apply changes.
Upon reboot, immediately after the BIOS, you should see systemd-boot
prompt you with two
options: arch
and Windows Boot Manager
. All text should be sized decently and rotated
correctly. If this is not the case, something has been missed.
You should also be prompted to enter the LUKS partition decryption password that you created earlier. If entered correctly, the system will continue to load and provide a terminal login.
Login with the user you created, not root
.
You know, because reboot.
wifi-menu
Edit /etc/pacman.conf
and uncomment these lines:
[multilib]
Include = /etc/pacman.d/mirrorlists
In /etc/pacman.conf
, append these lines to the bottom
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
sudo pacman -Sy
If you prefer another AUR/pacman tool, feel free to replace this step and yay
with that tool.
# Build yay package and install
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# After install, remove the yay build folder
cd ..; rm -rf yay
# Sync yay
yay -Sy
tzselect
is an interactive utility. Upon running the following command, choose your region and timezone.
sudo tzselect
thermald
protects your MicroPC from overheating.
# Install
yay -S thermald
# Enable + start
sudo systemctl enable thermald.service
sudo systemctl start thermald.service
# Install
yay -S networkmanager network-manager-applet nm-connection-editor
# Enable + start
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
nmtui
is a command-line utility which allows selection of a network. Note: Because wifi-menu
was used,
and a wifi network has already been selected, nmtui
might fail or error. Upon next reboot,
nmtui
should be available (or just use the applet in Xorg).
nmtui
# Install pulseaudio packages
yay -S pulseaudio pulseaudio-alsa pulseaudio-bluetooth pulseaudio-ctl
# (optional) Install nice traybar utils to work with audio
yay -S pasystray-gtk3-standalone pavucontrol
# Install
yay -S bluez bluez-utils bluez-tools
# Enable + start
sudo systemctl enable bluetooth
sudo systemctl start bluetooth
# (optional) Install nice traybar utils
yay -S blueman blueberry
TLP helps reduce power by setting some sane power defaults.
# Install
yay -S tlp
# Enable + start
sudo systemctl enable tlp
sudo systemctl start tlp
yay -S xorg-server xorg-xev xorg-xinit xorg-xkill xorg-xmodmap xorg-xprop xorg-xrandr xorg-xrdb xorg-xset xinit-xsession
Create Intel xorg config at /etc/X11/xorg.conf.d/20-intel.conf
with the following:
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "sna"
Option "TearFree" "true"
Option "DRI" "3"
EndSection
Create display config at /etc/X11/xorg.conf.d/30-display.conf
with the following:
Section "Monitor"
Identifier "DSI1"
Option "Rotate" "right"
EndSection
yay -S xf86-video-intel
yay -S xfce4 xfce4-goodies
# hit enter to install all the goodies
# Start XFCE4
exec startxfce4
startx
NOTE: Change 2
to 3
for libinput Button Scrolling Button
to switch from middle to right click.
xinput --set-prop pointer:"AMR-4630-XXX-0- 0-1023 USB KEYBOARD Mouse" "libinput Middle Emulation Enabled" 1
xinput --set-prop pointer:"AMR-4630-XXX-0- 0-1023 USB KEYBOARD Mouse" "libinput Button Scrolling Button" 2
xinput --set-prop pointer:"AMR-4630-XXX-0- 0-1023 USB KEYBOARD Mouse" "libinput Scroll Method Enabled" 0 0 1
NOTE: This requires the xcape
AUR package. You can move the xmodmap
commands to the ~/.Xmodmap
file as well.
xmodmap -e 'clear lock'
xmodmap -e 'clear control'
xmodmap -e 'keycode 66 = Control_L'
xmodmap -e 'add control = Control_L Control_R'
xmodmap -e 'keycode 108 = Caps_Lock'
xcape -e 'Control_L=Escape' -t 175
NOTE: This requires the xcape
AUR package. You can move the xmodmap
commands to the ~/.Xmodmap
file as well.
xmodmap -e 'keycode 51 = Hyper_L'
xmodmap -e 'remove mod4 = Hyper_L'
xmodmap -e 'add Control = Hyper_L'
xmodmap -e 'keycode any = backslash bar'
xcape -e 'Hyper_L=backslash|bar' -t 175
NOTE: This requires the xcape
AUR package. You can move the xmodmap
commands to the ~/.Xmodmap
file as well.
xmodmap -e 'keycode 61 = Super_R'
xmodmap -e 'keycode any = slash question'
xcape -e 'Super_R=slash|question' -t 175