GPD Pocket 2 Dual Boot - Arch / Windows 10 Install Guide
This guide overviews how to do a full wipe of the GPD Pocket 2, followed by a dual boot of Arch Linux and Windows 10.
Table of Contents
- What Works?
- Step 1: Use Arch USB to reformat drive
- Step 2: Install Windows 10
- Step 3: Let's Install Arch
- Step 4: From Text to X
- Full 1080P display
- Mouse/optical/nub-replacement thingy
- Wifi (Intel AC 3165)
- Audio / speaker / microphone
- USB-C (Power Delivery)/PD charging (at 40W / 20V @ 2A)
- USB-C data / roleswitching
- Proper ACPI S3 Sleep/Wake
- Displayport/HDMI over USB-C (UNTESTED)
- Hibernation (UNTESTED)
- GPD Pocket 2
- 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
Step 1: Use Arch USB to reformat drive
- Download standard Arch linux ISO
- Write ISO to USB drive
- Boot Pocket 2 and tap
- In the options, select the USB device containing Arch
Essentially, this is what we're going for: NAME FSTYPE SIZE NOTES MOUNTPOINT mmcblk0 ├─mmcblk0p1 vfat 512M efi /boot ├─mmcblk0p2 luks+lvm2 60G linux / ├─mmcblk0p[3-5] ~58G windows It's critical that we make the first partition (mmcblk0p1) 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/mmcblk0 # 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
Step 2: Install Windows 10
- Create a Windows 10 install USB
- Boot Pocket 2 and tap
- 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 (
mmcblk0p1). The installer will warn you that it has to create additional partitions which is normal.
Windows will take over the Pocket 2 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.
Step 3: Let's Install Arch
Remove the Windows 10 install USB stick and, just like step one, insert the Arch install USB and boot into Arch.
Configure LUKS + LVM2 partitions on
# Encrypt /dev/mmcblk0p2 # 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/mmcblk0p2 # Open/mount encrypted disk # Upon unlocking, this will mount the unlocked disk to /dev/mapper/luks. cryptsetup luksOpen /dev/mmcblk0p2 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
Wirelessly connect to the internet
Internet is needed to download packages.
wifi-menu is a basic curses command which will temporarily select and configure a
Mount, pacstrap and prepare for arch-chroot
# 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 (mmcblk0p1) partition mkdir /mnt/boot # Mount the EFI parition mount /dev/mmcblk0p1 /mnt/boot # Pacstrap the /mnt directory with utilities needed for arch-chroot pacstrap /mnt base base-devel dialog 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 > /mnt/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:
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=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt sd-lvm2 fsck filesystems)
With new HOOKS in-tow, regenerate your ramdisk and kernel using mkinitcpio:
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
Windows Boot Manager.
Windows will be included as a choice on boot, and any additional entries must be created in the
/boot/loader/entries/. We're going to create a default entry for
First, we need the block or UUID of the mmcblk0p2 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 mmcblk0p2 | 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 console-mode 2
Specify a timezone:
ln -sf /usr/share/zoneinfo/US/Eastern /etc/localtime
/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:
Then, generate the locale using the following command:
Set a root password:
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
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
Step 4: From Text to X
Upon reboot, immediately after the BIOS, you should see
systemd-boot prompt you with two
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
Wirelessly connect to the internet (again)
You know, because reboot.
Add some repos to pacman
/etc/pacman.conf and uncomment these lines:
[multilib] Include = /etc/pacman.d/mirrorlists
/etc/pacman.conf, append these lines to the bottom
[archlinuxfr] SigLevel = Never Server = http://repo.archlinux.fr/$arch
Sync pacman to retrieve latest package information
sudo pacman -Sy
Build and install
yay package manager tool in order to install AUR packages
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
Additional timezone setup
tzselect is an interactive utility. Upon running the following command, choose your region and timezone.
thermald protects your Pocket 2 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).
# 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
Install Xorg packages
yay -S xorg-server xorg-xev xorg-xinit xorg-xkill xorg-xmodmap xorg-xprop xorg-xrandr xorg-xrdb xorg-xset xinit-xsession
Create Pocket 2 Xorg configs
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 "eDP1" Option "Rotate" "right" EndSection
Create touchscreen config at
/etc/X11/xorg.conf.d/99-touchscreen.conf with the following:
Section "InputClass" Identifier "calibration" MatchProduct "Goodix Capacitive TouchScreen" Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1" EndSection
Install Intel video drivers
yay -S xf86-video-intel
yay -S xfce4 xfce4-goodies # hit enter to install all the goodies
# Simple hack to allow mouse scrolling when right click button is held down xinput --set-prop pointer:"HAILUCK CO.,LTD USB KEYBOARD Mouse" "libinput Middle Emulation Enabled" 1 xinput --set-prop pointer:"HAILUCK CO.,LTD USB KEYBOARD Mouse" "libinput Button Scrolling Button" 3 xinput --set-prop pointer:"HAILUCK CO.,LTD USB KEYBOARD Mouse" "libinput Scroll Method Enabled" 0 0 1 # Start XFCE4 (xset s 120) & exec startxfce4