Louis Abraham's Home Page

My Pinebook Pro setup

20 Mar 2020

I received my Pinebook Pro with ANSI keyboard a few weeks ago. It covers my basic needs quite well, has a great battery life and is light. I intended to use it as a travel laptop, but the SSD of my venerable MacBook Pro crashed in the middle of the COVID-19 outbreak, forcing me to use my Pinebook Pro as daily driver.

In this article, I’m not going to tell you whether or not you should buy the Pinebook Pro. Instead, I will explain how to reproduce my setup.

Installation

OS

The Pinebook Pro comes with a preinstalled custom Debian. The deal-breaker was the unstable kernel causing infrequent random crashes and, even worse, unusable WiFi.

Therefore, I decided to install Manjaro KDE Plasma. The Manjaro kernel is much more stable and KDE Plasma is performant, user-friendly and visually appealing. It has been chosen as the new default OS.

  1. Download the latest version of the eMMC installer from this page. The extension is .xz.
  2. Burn the image on a microSD card (you need at least 8 GB). A good software for that is etcher.
  3. Insert the microSD card in the Pinebook Pro. It should boot from it. Follow the instructions to install Manjaro on the eMMC.

Keyboard/touchpad firmware update

The touchpad is quite buggy, but you can fix it by installing this firmware. Because we are very lucky, you can install it through the pbp-keyboard-updater-modded package. Note that you don’t need to reinstall it even if you install another OS at it is attached to the hardware.

Software update

After rebooting, it’s time to update your packages. You can either use the GUI (Software Update in the launcher menu) or pacman -Syyu.

Configuration and performance tweaks

Swap file and zram

The Pinebook Pro only has 4 GB of RAM and if you use more, your computer will freeze or reboot.

zram compresses the RAM. In other words, at the cost of a slightly higher CPU usage (which is impossible to notice), it makes your RAM usage much more efficient.

You can install and configure it very easily using this PKGBUILD (source). For convenience, I uploaded the file on this blog. Like any AUR package, you can build and install it with makepkg -isc (i for install, s to install dependencies, c to clean after build).

First install the base-devel group (they are standard development utilities):

sudo pacman -S base-devel

Then install zram:

mkdir zram-swap
cd zram-swap
curl https://louisabraham.github.io/misc/zram-swap.pkgbuild > PKGBUILD
makepkg -isc

You can then clean:

cd ..
rm -rf zram-swap

To activate it for the current session and every subsequent reboots:

sudo systemctl daemon-reload
sudo systemctl enable zram-swap.service
sudo systemctl start zram-swap.service

I recommend to use a swap file to avoid a freeze if you ever use more RAM. 4GB is necessary to be able to suspend to RAM.

Just follow the instruction from the wiki:

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
sudo mkswap /swapfile
sudo chmod u=rw,go= /swapfile
sudo swapon /swapfile
sudo bash -c "echo /swapfile none swap defaults 0 0 >> /etc/fstab"

To monitor your cache usage, you can use the following commands:

Options

Remap Caps Lock to Ctrl

Useful to avoid CTS.

Keyboard -> Advanced -> Caps Lock behiavior -> Caps Lock is also a Ctrl

Activate AUR in Software Manager

This step is not really required but it’s nice to be able to search AUR packages. Just enable AUR in the settings of the software manager (Add/Remove Software in the launcher menu).

Known problems

WiFi

At least one WiFi channel (12 for me) is not detected at all in Manjaro whereas it worked in Debian. I just changed my router’s channel to 11. Some users report that it might be due to a region configuration issue but I could not fix it. I am sometimes unable to connect my phone (Redmi Note 7) as a hotspot, maybe because I cannot control what channel it uses.

Once you find a working hotspot, the WiFi is very stable so I cannot complain too much.

Touchpad

The touchpad is very sensitive and will activate while you type. The “Disable while typing” feature doesn’t work for the moment.

My workaround is to use an external mouse and disable the touchpad with Fn-F7.

EDIT (29 April 2020): Joseph Virkin emailed me that installing xf86-input-synaptics solves the issue. Indeed, it changes the touchpad system settings window and there is a new option “Disable touchpad when typing that works”. However, when you don’t type continuously (e.g. if you stop to think), your palm will still activate the touchpad and move your cursor. So I still preferentially use an external mouse.

Noise

There is some static noise (but clearly not as noisy as a fan). The noise might change in unpredictable ways when:

Low Bluetooth volume

My Bose Micro Soundlink has a low maximal volume when paired to the PBP and I don’t know how to fix it. Others report no problem with other Bluetooth speakers.

Software and configuration

Mozilla Firefox

Firefox just works great, I’m really happy to be able to sync my bookmarks, passwords, history and much more across my devices while protecting my privacy.

When using an external mouse, a nice feature is to be able to scroll on a page by pressing the middle button and moving the mouse. Just type about:config in the search bar and set general.autoScroll to true.

On a system with limited RAM, I really like the extension Auto Tab Discard. It saves RAM by transferring tabs to the disk after some inactivity threshold. You can whitelist some websites, for examples the ones that send you notifications.

I use Messenger, Gmail, Trello and Simplenote and still can open dozens of other tabs without problem.

Chromium

Chromium is faster than Firefox for some demanding apps and Google products. However, for 99% of internet browsing, the difference is not noticeable.

I recommend installing it (with pacman) as some add-ons, like Skype, are useful and because Firefox cannot download large files from mega.nz.

Finally, hardware acceleration allows Chromium to run some games better than Firefox. Sadly, Aground is still too slow to be playable.

Python

Python 3.8 is already installed. When possible, install packages with pacman rather than pip.

If you need numpy or scipy, first install openblas (sudo pacman -S openblas) to achieve better performance. You can then install packages python-numpy and python-scipy. You can control the number of threads using the environment variable OMP_NUM_THREADS. If left empty, all 6 cores will be used.

Visual Studio Code - OSS

The open-source version of VSCode works perfectly. Just install code-headmelted-bin from AUR. It’s quite slow though and the Python plugin tends to crash when doing real work so I use gedit instead.

htop

Install via pacman. I recommend to hide the userland process threads.

Network monitoring

I found those two tools very useful:

You can install them with pacman.

Backup

I use rsnapshot. Install via pacman. See ArchWiki for the configuration. To manually backup to a USB device and keep the last 10 backups, just configure snapshot_root, setup retain alpha 10 and edit /etc/fstab according to the instructions for External Drives.

After that, you can simply use sudo rsnapshot alpha to make a backup on your USB drive.

Warning: you need a filesystem that supports hard links. Most USB drives come with FAT which doesn’t. You can format a partition to ext4 with mkfs.ext4 /dev/partition.

Cloud storage

rclone is the best solution I found to use Dropbox as the official client does not work on ARM. rclone also supports Google Drive, mega.nz and almost any cloud storage provider you can imagine. The backups are not automatic and require you to use rclone copy or rclone sync. A useful command is rclone check to avoid erasing important files.

Install rclone-bin from AUR and follow the easy configuration instructions on the website.

PyTorch

After some effort and the help of marty1885, I could compile the latest version of PyTorch.

First, compile and install sleef: https://sleef.org/compile.xhtml (you will need sudo to install). You should also add the following line to your .bashrc (or equivalent)

export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/lib'

If you are using Python 3.8 and do not want to wait for HOURS, you can download my precompiled wheel here.

Here is how I produced it:

1. Install the dependencies (this command is for arch/manjaro)

pacman -Syu python python-numpy python-yaml python-cffi python-setuptools python-wheel cmake

2. Download source code and compile

git clone https://github.com/pytorch/pytorch --recursive
cd pytorch

git checkout v1.6.0-rc7 # I chose the latest tag
git submodule sync
git submodule update --init --recursive

3. Edit CMakeLists.txt to set two flags:

option(USE_PYTORCH_QNNPACK "Use ATen/QNNPACK (quantized 8-bit operators)" OFF)
option(USE_SYSTEM_SLEEF "Use system-provided sleef." ON)

4. Compile

export BUILD_TEST=0
export MAX_JOBS=6 # use all the cores, set to a lower number if you want to use your computer while compiling
export USE_SYSTEM_NCCL=0
export USE_DISTRIBUTED=0
export USE_QNNPACK=0

python setup.py bdist_wheel

The wheel will be in the dist/ folder.

Whether you compiled or downloaded the .whl, you can install it with

pip install torch-1.6.0a0+b31f58d-cp38-cp38-linux_aarch64.whl

Games

The PBP is great for emulation, I really appreciate snes9x (Super NES emulator) that can be installed from pacman. I recommend using OpenGL (in Preferences > Display > Hardware Acceleration) for a smoother experience.

For PlayStation, PCSX ReARMed is available as a core for libretro (an plugin-based emulation software) but I don’t appreciate PS1 games a lot.

For Nintendo 64, I was able to compile libretro-mupen64plus_next (instructions here) but it’s so slow that most games are unplayable.

You can also play old PC games that have been ported to Linux, e.g. Quake3 (ioquake3) or Morrowind (OpenMW) but you need the game files.

Finally, there is a nice thread about games on the Pine64 forum.

Morrowind

The compilation is not straightforward so I give instructions below. Also, the game data can only be transferred from an existing (PC) installation, so it is much more convenient to download it. It’s probably legal as long as you have a copy of the game so here is a link.

  1. Install dependencies: sudo pacman -S openscenegraph sdl2 bullet openal ffmpeg cmake gcc git
  2. Install MyGUI 3.2.2 without Ogre3D: git clone https://github.com/MyGUI/mygui && git checkout MyGUI3.2.2 && cmake . -DMYGUI_RENDERSYSTEM=1 -DMYGUI_BUILD_DEMOS=OFF -DMYGUI_BUILD_TOOLS=OFF -DMYGUI_BUILD_PLUGINS=OFF && sudo make install -j6
  3. Install OpenMW: git clone --depth=1 https://github.com/OpenMW/openmw && sudo make install -j6

If you want to use your PBP during compilation, you can use -j4 to compile with 4 cores instead of 6 (but it will take longer).

Finally, a nice trick to improve FPS is to rescale the screen

xrandr --output eDP-1 --scale 0.5x0.5 --filter nearest

To revert

xrandr --output eDP-1 --scale 1x1

OpenArena

pamac install libxmp-aarch64-git
pamac install openarena-git

In 1080p, the game is choppy, even the menu lags. You can set it to 720p in the console (press ```) with the command r_mode 12 then vid_restart to restart the video. I don’t know why this happens. I tried reducing the graphics quality but it looks like the FPS do not correspond to the experience in 1080p (and even the menu is choppy).

Not working

I couldn’t compile the following software and don’t have a good replacement:

If you can help, please send me an email.