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.
- Download the latest version of the eMMC installer from this page. The extension is
.xz
. - Burn the image on a microSD card (you need at least 8 GB). A good software for that is etcher.
- 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:
free -h
(h
for human-readable) breaks down the RAM usageswapon
details the usage of the swap between the zram and the swapfile. If the swapfile is used, it means you use way too much memory. For more details, seeswapon -h
.zramctl
outputs the content of the zram. For more details, seezramctl -h
.
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:
- (un)plugging the barrel port
- switching the sound on or off
- connecting some USB mouses
- moving some USB mouses
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:
bmon
monitors the bandwidth over timenethogs
tracks the network usage of every program
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.
- Install dependencies:
sudo pacman -S openscenegraph sdl2 bullet openal ffmpeg cmake gcc git
- 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
- 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:
- frida
If you can help, please send me an email.