PinebookProSixMonthsIn

Introduction

There’s been a lot of excited reviews among the more nerdly segments of society about the Pinebook Pro, a 14-inch, $200 Linux laptop using an ARM CPU and generally open-source hardware. Rumors are it’s extremely solid for a piece of hardware that’s far below the “bargain” price range and into the “fell off the back of a truck” pile. However, I recently read someone complaining that there’s been lots of “fresh new user” blog posts and no “how does this actually work six months in” write-ups. It just so happens that I’ve had my Pinebook Pro as my main laptop for nearly six months now, so I thought I’d write up my experiences with it so far.

This was written in early June 2020.

Context

Different people want different things from laptops. I mainly want something that runs Linux, is light enough to carry around anywhere without a lot of fuss, and that I can use for programming, game development and gaming. That said, I’m usually about as happy playing roguelikes or old DOS games as Doom Eternal or XCom 2, so I’m willing to be pretty flexible on the “gaming” front.

I bought the Pinebook Pro as a toy in December 2019. I ordered it as a Christmas present for myself and had some buyer’s remorse about it immediately after. At the time I had a Dell XPS 15, which I absolutely loved. 15 inches, tough metal, light enough to haul around easily, great CPU, pretty good battery management, very good (though not perfect) Linux support. Why the heck did I waste money on another laptop? Then early in January my XPS 15 got stolen out of my car in an IHOP parking lot and the Pinebook Pro was my only laptop. (Pro tip: When a Lyft driver says a neighborhood is bad, take their word for it even if it looks fine.) Time to adapt fast! It HAS taken some adaptation, and a fair amount of work – it is not plug-and-play yet, the hardware and drivers are fairly young, so this is still very much a project computer. But it’s served me well, so here’s my experiences.

Also note that I got my PBP at the end of 2019, and not every PBP is the same; it is very new hardware and a very small company compared to most laptop manufacturers. They seem to manufacture them in batches do minor hardware and process revisions/fixes between batches. These are usually at least vaguely announced on the monthly news blog.

Hardware

Build

The top and bottom of the case are metal, the keyboard surface and screen bezel are plastic. The whole thing weighs about 1.3 kg, so it’s light as heck, and less than a centimeter thick. As everyone’s mentioned, the build quality is pretty awesome, and it generally feels good. I’ve had $800 laptops that felt far cheaper. There’s no sharp edge right where your wrist rests (ahem, Dell XPS 15 designers), the hinge for the screen is nice and stiff, and in all it’s so light and rigid it feels like you can just toss it into a bag or backpack and not worry about it. Which is exactly what I want to be able to do.

You can open the thing up with just a Phillips screwdriver, which is lovely, but the screws are so tiny that I worry about damaging them. (Though if I do damage them, well, I can order replacements.) The delicacy is a bit of a theme on the internals of this thing though: there’s quite a lot of empty space inside the case, but everything is so small, filmy and delicate that I’m not sure I would quite call it “hackable”. The main board is about the size of your palm, and most of the rest of the space is filled with battery. Wires and connectors are all these fairy-thin things that fit in to tiny slots, lots of things are held down with kapton tape or tucked into itty bitty notches. Feel free to open it up, but be slow and gentle. All the designs and such are online – there’s a cute sticker on the inside that directs you to their wiki for hardware diagrams. But to actually do any real hardware mods you’re probably going to need a good assortment of tweezers, a steady hand, and the nerves to handle tiny parts.

Which isn’t to say that any of this is bad, per se. It’s protected thoroughly enough that I don’t expect anything to break from everyday (ab)use, and if it does break a new main board is about $100. And hey – it weighs 1.3 kg. This is how you get a laptop that weighs 1.3 kg. I’ve used this as my main machine for 6 months and haven’t broken anything yet (much; see the Sound section for more), and I’m pretty rough on my machines. I installed the M.2 expansion board pretty darn easily. So, on the whole I’m a fan.

Speaking of which, there’s no fan. There’s no vents or holes in the case at all besides the speaker grilles, so now that I think of it this thing may actually last quite a long time due to lack of dust or other gunk getting into it. Taking a laptop on a desert camping trip or into an underground mine is a great way to be in the market for a new laptop, but with this thing I’d probably slap some duct tape over the speaker grilles, keep the keyboard and screen clean and call it good.

One cool thing is though, I’m pretty sure that the main board is a 99%-unmodified RockPRO 64 SBC. It’s a pretty good board if so, definitely worth considering over a Raspberry Pi for your next small-single-board-computer project. The only thing that looks different is the connectors; all the big chonky ones have been removed to make it fit in the skinny case, and some of them moved to a breakout board to reach the ports on the far side of the machine. It uses the same SoC as the PBP, so, why not the whole board?

Ports

Right side: USB 2 port, combined headphone/mic 3.5 mm audio jack (that also can be used as a serial port via an adapter and a hardware switch), microSD card.

Left side: Power connector barrel jack, USB 3 port, USB-C port which can also be used to charge the thing and as a DisplayPort video output. Never tried to use it for video output though, so I don’t know if it actually works.

All and all it’s basic but workable. It’d be nice to have another USB 2 port, but on the other hand, it already has more USB ports than a 4th gen Macbook Pro of similar size. I’d prefer a mini-HDMI or mini-DP output rather than trying to shunt it through USB-C, but that’s just me being a curmudgeon. People need to stop trying to make USB-C do everything. (If you want to have a real shit time, try to use a USB-C video camera (like an Intel Realsense, for example) next to a sensitive GPS receiver or long-range wifi. Not with the PBP, just with anything.)

Keyboard

Upon contemplation, I think it’s about as good as any non-mechanical laptop keyboard you’ll find. Doesn’t feel as good as an oldschool Thinkpad but probably at least as good as any other laptop I’ve used. The layout and general feel is in fact almost identical to the XPS 15. There’s a full row of function keys, control and alt on either side of the spacebar, all that good stuff. Nothing weird like an itty-bitty backspace key or cramming tilde somewhere strange or such. One odd thing is there’s no Menu key, but, who uses the Menu key for anything anyway? Not me, at least.

One annoyance with layout: The power button is a soft-button mapped to a key right above the backspace key, where the XPS 15 puts Delete. Instead Delete is mapped to fn-backspace. a) I don’t care for power being a soft-button on the keyboard and would much prefer a discrete power button, b) I would like to have a delete key that doesn’t require pressing the Fn chord, and c) that position is easy to hit by accident. In fact I did just that while writing this article. It’s a nuisance.

I WOULD also like dedicated pageup and pagedown buttons instead of fn-up arrow and fn-down arrow. But not if it required having a keyboard that wasn’t built as well.

There’s some weirdness with certain key combos involving the feature-key (aka Windows key) and fn-key though. I used to map feature-left and feature-right to swap desktops left and right, and I am partial to the ctrl-pageup/pagedown key bindings for switching tabs in Firefox. Feature-left and feature-right didn’t work though, and for some reason ctrl-fn-down (aka ctrl-pagedown) works but ctrl-fn-up doesn’t work. Apparently the keyboard driver is a custom firmware of some kind instead of just hooking into an internal USB port, and like all the rest of the firmware on the thing, is open-source. (Correction, the keyboard is USB and the firmware is for the USB keyboard controller; see appendix.) I kind of want to dig into the code and see if I can fix it, or at least see what’s going on with it, as if I needed another side-project.

I did download a newer keyboard firmware and flash it in February or so, to see if it made any difference, but it didn’t at the time. Maybe I should see if there’ve been any updates. Also I didn’t quite realize at first that updating the firmware was a two-step process with a reboot in the middle, so it DID introduce me to the heart-stopping experience of rebooting my laptop and having the keyboard only output gibberish into the console login prompt. …For about three minutes before I said “hey wait a minute…” and plugged a USB keyboard in, at least.

Touchpad

It’s a touchpad. It has two buttons beneath the surface because that’s how we make touchpads now, despite it being entirely inferior to having separate buttons. Tap-to-click doesn’t seem to work by default, or maybe I turned it off at some point and forgot. Two-finger scrolling up and down works by default. I’ve read some complaints that people don’t like this touchpad but while it’s a little rough on the fingertips for long durations, to me it seems fine. It isn’t the magical silky Apple touchpad feel, which I hate, but it feels okay with a matte finish, it hasn’t gotten a hole worn into its finish after a few months of use like some cheap laptops I’ve used, or like a few rather expensive laptops I’ve used (ahem, Lenovo). The default pointer speed settings feel a little slow to me so you might want to crank up the pointer sensitivity a little in your desktop environment settings. Palm rejection seems to work well enough for me, since I haven’t noticed it working or not working.

That said, I use an external mouse 95% of the time anyway, because mice are better than touchpads. And before any Thinkpad lovers give me guff, mice are better than the little nub things too. Either is perfectly acceptable for a while, but for long usage? Mouse.

Display

It’s a very nice 1080p display. It’s matte rather than glossy, which is objectively better, and I recall having to pay more than a little bit extra for a matte display from various other laptop manufacturers in the past. The backlight is evenly lit with no bright or dark spots I can really notice. It’s too dim to use comfortably in full sunlight but is perfectly fine anywhere else, including in the shade right next to full sunlight. Unlike some, I am perfectly happy with a 1080p display on a laptop, especially a $200 laptop. My work laptop has a 4K display and it’s nice but not nice enough I really notice the difference. What I can not stand is a 720p display, which is a resolution that needs to just die in a fire, so good on the manufacturers for doing the right thing here.

Not much else to say about it the display, which is a good thing.

Power and heat

The Pinebook Pro has no fan; the metal bottom of the case is used as a heat spreader. It’s nice. Unlike most laptops with fans, you can leave it on a blanket or on your lap without any spacing and it won’t suffer unless you’re doing something that keeps the CPU cranked to max all the time.

The battery lasts anywhere from 5-8 hours depending on usage. Maybe 3-4 hours if you’re really hammering it constantly. Probably not quite as long as we would want but certainly long enough to use it constantly for an afternoon plus some comfortable extra. The backlight on the screen accounts for like half its average power usage, so turning the screen brightness down when possible helps a lot. The power supply is 15 watts, so this is really quite a low-power device.

Linux support for the CPU’s power management is firmly okayish. I strongly recommend setting the default power mode of the Linux kernel to performance rather than the default balanced. cpufreq is the tool you want for playing with that, and you might have to edit a config file to get it to apply your chosen setting at boot. If I recall correctly, on Debian it’s a variable in /etc/init.d/cpufrequtils.

The default power supply comes with a 1 meter cable, which is too short. I should get around to shelling out the $15 for a longer one. Found a compatible one on Mouser at one point but it seems to have vanished… oh, you can get a longer cable from the manufacturer that just plugs into a 3A USB-A phone charger. Or you can charge it via the USB-C port with a 3A USB-C charger. One of those is probably the easy choice.

My only real protest is that it often doesn’t suspend correctly; if you close the lid on it it’ll either hang and require a reboot, or sit there forever still on and sucking power. My XPS 15 used to do the same quite routinely, so I’m honestly not sure whether this is a hardware/driver problem or a Linux problem.

Storage and memory

The model I got has 64 GB of eMMC flash storage on it, which acts as the main OS boot drive. I thought it was soldered on but they sell replacements so maybe it just slots in somehow. Performance of it is so-so-ish by flash standards, which means it’s objectively quite excellent. Far better than a Raspberry Pi running on an SD card or USB stick or any of that nonsense, so no ugly architectural I/O bottlenecks there. I also shelled out a whole $7 for the M.2 adapter, and got a 512 GB M.2 SSD to use for /home. Installing it was trivial, though there’s no big arrows saying “M.2 ADAPTER HERE” so you’ll want to look up the diagram before opening the laptop up, and maybe print out a copy or have it ready on your phone.

The Pinebook Pro can’t (currently) boot from the M.2 drive due to something in how the bootloader is configured, and also can’t boot from USB. But setting it up to have the eMMC as / and the M.2 as /home works well. It does boot from microSD card just fine; when I was trying out different distro’s it was convenient to have the distro I was trying booting from a microSD card, then install it to the eMMC when I decided I liked it. Installing to eMMC is touch harrowing for fear of bricking the thing, but it worked out fine. Currently the u-boot bootloader is on a set of small partitions on the eMMC drive, so if you nuke those during the install process you might brick the laptop. I’m fairly sure it’s possible to unbrick it if you do, but that will probably involve pulling out the serial cable and u-boot manual, and I don’t really want to bother with that. There’s apparently a few megs of flash storage on a separate chip that’s intended for a bootloader to live on, but nothing actually uses it for anything yet. Another fun side-project, as if I needed another side-project.

A couple times I have had mysterious hard-locks that required a forced reboot, which appeared to be related to writing a lot of data to the M.2 drive. Very infrequent though. Someday I may try to track it down.

It has 4 GB of RAM soldered in. It’s Enough, if you’re a little circumspect, though web browsers do their best to make that difficult.

Sound and microphone

This is probably the most annoying part, honestly. Sound on Linux is always a giant clusterfuck for some reason, and for me the Pinebook Pro is no different.

First off, good news, all the hardware seems to register more or less as it should in ALSA. Or at least, if you select the rockchip-es8316-codec device in alsamixer, you will get far more settings and details than you would ever want, full of low-level nonsense like “DAC Attack Time” and “ADC Soft Ramp” and other such things. I’ve never had any good ever come of trying to dick around with any of it, I’ve only had anything ever actually work by going through PulseAudio. Doing that is basically plug-and-play, though came with more issues that will be described in a moment.

Second… well. When I first got the Pinebook Pro almost the first thing I did was open it up and install the M.2 adapter and drive. During this I somehow gave one of the speakers a good yoink and it popped out of its slot in the casing, dangling by its hair-thin wires. It slotted back just fine, but my Pinebook’s external speakers, already in the “acceptable but tinny” category, have alway produced a horrible, gut-disturbing hiss that made me feel like there was a high-pitched whine happening just past my auditory perception. It was like a music class I had where the teacher used a synthesizer to play sound outside my range of hearing, and was thoroughly unpleasant while at the same time not being audible at all as anything other than faint white noise. I often questioned whether I was imagining it – but if I tried to play something, or even had it sitting with the speakers on but not playing anything, I could tell and it was uncomfortable as hell after only a few minutes. I screwed around with everything I could think of with no effect: if the speakers were on, it was there. I couldn’t find anyone else online mentioning something like this, so I wonder if I damaged something by pulling that speaker out. I never tried to play sound before I opened the thing up though, so I have zero basis for comparison.

(Oh, I remember where else I’ve experienced that sort of thing: wearing high-powered noise-cancelling headphones in a helicopter. Your eardrum is like “I KNOW there’s lots of noise going on out there but I can’t feel any of it.” It’s definitely not the same as something actually being quiet!)

Anyway. In the end, I opened the Pinebook Pro back up and disconnected the speakers entirely. Problem solved; if I want to listen to something I use headphones. It works just fine. There’s still a little bit of background hiss, but it’s just barely-noticable white noise, with no migraine-inducing edge to it.

Also, back when the speakers were connected for some reason it only seemed to detect one audio output device even when I have headphones plugged in. Instead of letting me choose whether to output to speakers or to headphones, any sound just played through both, all the time. Rather defeats the purpose, doesn’t it?

Also, whenever the sound turns off it does so with an audible click or pop. This HAS had complaints from other people about it, and maybe if I tried I could find a solution, but with headphones it’s barely audible so I’ve stopped caring about it.

Microphone… You know, I don’t think I’ve ever tried to use the built-in microphone? I just tried the Pinebook Pro’s external mic, and can’t get it to work at all. On the other hand, I’ve never had a built-in laptop microphone that wasn’t awful. My work machine is some $2000 high-end thing that came in a lovingly printed box hand-folded by artesinal cardboardéures or something, and the built-in microphone is still worthless. An external headset plugged into the Pinebook Pro’s headphone jack works just fine.

Note again that this is with a slightly jank Debian install as of June 2020, after I gave the speaker hardware a good yank. So your milage may vary based on hardware and software. These things tend to get better over time.

Wifi + Bluetooth

Wifi Just Works. It has both 2.4 and 5 GHz bands, and according to the spec should theoretically get up to 433 Mbps. From my bedroom, right now, it easily tops 120 Mbps, so it’s officially Fast Enough.

Bluetooth, I’ve never tried, because I’ve never ever gotten Bluetooth to work reliably with any computer, on any OS, using any device, ever. I have a single set of very nice bluetooth headphones that are paired to my cell phone, and that setup works great as long as I never, ever touch anything about it. For everything else, there’s copper.

Software

OS support

Things on the software side have gone from “installer images are best built with this shell script a random community member put together” to “official support from several large Linux distro’s” extremely quickly. Currently I am using a mostly-unmodified Debian Bullseye install and all in all it works great. Things were a lot rougher in January, but by now the only real caveat is that you want at a Linux install with at least kernel 5.4, IIRC, since it includes a lot of Rockchip-specific stuff in it that the manufacturer contributed. Earlier kernel version than that and you have to faff around with a patched kernel, one way or another. That said, I did this install using the aforementioned community shell script and it worked great. There’s apparently now an official Debian installer for it as well, I should try it out someday.

Apparently the official default OS is now Manjaro linux. I tried it once, it worked fine. Playing with different distro’s is no longer as interesting as it once was. Sorry.

Performance

Performance is, uh… pretty bad. It’s a 6-core asymmetric CPU with 2 big and 4 little cores, and I’d really prefer if it was just 3 or 4 big cores. The smaller cores are probably a lot more useful on a cell phone that spends most of its time idle, but on a laptop you’re probably going to have at least one of the big cores on basically all the time. (Though it’s interesting that both the PinePhone and PineTab use the Allwinner SoC used by earlier Pine64 boards, rather than the ROCKPro used in the Pinebook and Pinebook Pro. Weird.) I’ve ad-hoc benchmarked it as being about 75% the speed of an old laptop with a Core 2 Duo from like 2008. On the other hand, that old laptop weighed 7 lbs and its battery lasted 90 minutes tops, so, progress is not necessarily one-dimensional. And it had a 720p screen. Ugh.

Graphics performance is also nothing to write home about either, which might or might not be due to the open-source drivers being not as good as ARM’s official ones. (More on that later.) The drivers aren’t bad, there might just be room for improvement.

Using modern (bloat-y) desktop environments, the Pinebook Pro chugs. No two ways about it. GNOME chugs, though it’s more or less usable when you turn all the shiny unnecessary distracting effects off. KDE chugs; I’ve never perceived KDE to be particularly lightweight, so I think it’s madness that the official default OS install uses Manjaro with KDE. Cinnamon chugs, though not as bad. MATE chugs a bit, though really is pretty usable. I was rather miffed when even very lightweight things like AwesomeWM had a small but noticeable delay when swapping desktops. Not enough to actually get in your way, but far from perceptually instant. I mean, come on, what does it take to make this thing run well?

Then I decided to mess around with Wayland on a whim, and tried sway, a lightweight compositor. (Currently the lightweight compositor, really.) And it works like a dream. Absolutely perfectly, with no fighting with graphics settings and no apparent lag or delay in any way. So I switched to using that. I suspect the slightly chuggy nature of all the X11 WM’s is due to a combination of X11’s fundamental inefficiency, and the X11 stack and graphics drivers not being terribly well optimized on this hardware. If sway runs fine then AwesomeWM or Fluxbox really should too. It’s obviously possible for a Pinebook Pro to run a desktop environment in a reasonably performant manner, it just seems not to when using X11.

I didn’t like sway at first. I’ve used keyboard-heavy WM’s in the past and always eventually gave up on them when I had to do some cruel and unusual task such as, you know, be able to function on a computer that I hadn’t spent two hours customizing Just Right. But sway just worked so well on the Pinebook Pro that I put the time in to learn it, and now I like it enough to use it by choice on my massive beefy desktop as well. It’s nice, and works well even on complicated screen layouts and such once you get a handle of how to customize it. So I use it even if there is no conceivable circumstance in which I would want my tabbed window container to contain another tabbed window container, and I have no idea how to undo it once I’ve accidentally gotten it into that state. Maybe I’ll get sick of it and switch back to Cinnamon in a few years, who knows.

Ok, so all that aside, here’s what the Pinebook Pro can do just fine:

  • Run Firefox half-decently with a few dozen tabs that aren’t full of bloat (ie, not Medium, Reddit, or mainstream news sites)
  • Browse Imgur, if you only have it open in one tab
  • Run Discord in the browser
  • Run Youtube
  • Play video with vlc or something
  • Run Dosbox at 40 MHz or so, which is about as fast as you need to play DOS games.
  • Emulate any game console less than or equal to a Playstation 1. (Haven’t tried N64 actually, but it should be okay.)
  • Run cargo check on 10,000 lines of Rust in ~3 seconds.
  • Have a pile of terminals with SSH and tmux sessions to various other machines where the real heavy lifting happens
  • Run Krita or GIMP vaguely decently

Here’s what it can’t do:

  • Compile rustc using all 6 cores at once – you’ll use up all your memory far before anything useful gets done. Setting stuff to build 2 cores will work fine; the 4 small cores really don’t add much oomph.
  • Play video games newer than 2003 or so – Plenty of good games out there older than that though
  • Run Wine using qemu to userland-emulate the x86 code – It works, incredibly enough, but you won’t get anything useful done.

So all in all, now that I’ve trimmed the fat off my workflow I’m pretty happy with it.

Graphics

Ok, so here’s the skinny. The Rockchip RK3399 system-on-chip uses a Mali T860 MP4 GPU, which is ARM’s cellphone-grade GPU from about 2015. The microarchitecture is “Midgard 4th gen”, so that’s a term you may see if you try to rummage around in too many graphics driver docs. From all the information I can find, it should be a quite decent GPU. ARM even provides a Linux driver in the form of an open-source portion and a closed-source blob, which is frankly better support than I ever expected from them. It doesn’t support desktop-profile OpenGL 4, but it does support OpenGL ES 3.2 which is pretty much the same thing, as well as Vulkan 1.0 and apparently Direct3D 11 if you have a way to run Windows on it.

The problem is that, as far as I can tell, ARM seems to supply these drivers in a toss-over-the-fence way. There’s a limited set of downloads for a limited set of platforms, and for everything else they basically say “here’s the pieces, have fun putting them together”. In Debian and Manjaro it looks like the pieces haven’t been put together yet. In Ubuntu 20.04, in fact, it looks like maybe they have; there’s mali-t76x-* packages available for install. Maybe I should try it out and see how it works. (Note from the future: I can’t figure out a way to get Ubuntu to boot on this thing, someone needs to figure out how to make it cooperate with this thing’s u-boot setup I expect.) It also looks like the official ARM drivers might end up as an option in Debian someday, as there’s a mali-midgard-dkms package that appears to contain the open-source portion of the driver. Until that happens though, instructions for how to put the pieces together properly appear to be out of the reach of mere mortals, or at least mere mortals who don’t have a few weeks to put into figuring it out. As if I needed another side project.

So how good is the Mali T860? Well, there’s two axes to measure it by. Users care about performance, programmers care about features. Performance? It’s probably fine, as embedded GPU’s go. Vague specifications and a lot of guessing put it at something like 2/3 of the Adreno 506 in my cell phone, 1/5 of the Intel Iris HD 530 that was in my XPS 15, or 1/64th of an AMD RX 480. But I like doing gamedev for fun, so I’m going to talk about features. If you don’t care about that, skip the next section.

Graphics nerd time

So, like I said, the Midgard GPU architecture is basically the successor to the venerable Mali-400 series of chips, which are still common in low-cost applications where OpenGL ES 2.0 is Good Enough. The Pine64 board, ancestor of the ROCKPro 64 the Pinebook Pro contains, uses the Mali 400. Tons of old/cheap phones use it. The ODroid C2 and a ton of other Raspberry Pi knockoffs use it. In terms of technology, the Mali-400 is about on par with the Intel HD3000 series: it supports OpenGL ES 2.0 and OpenGL 2.1 or maybe 3.mumble if you’re lucky, which basically means you can use vertex buffers and old-fashioned shaders. If you just want to display some stuff on the screen it works fine. Honest. There’s nothing wrong with it.

Apart from the fact that you’re basically stuck using 2005 graphics programming and it’s a pain in the ass. OpenGL has been a fustercluck for 20 years and it really hasn’t been even remotely good or sensible until OpenGL 4/OpenGL ES 3, which is when Things Mysteriously Started Sucking Less. Before that you’re lost in an endless morass of poorly-defined feature compatibility, inconsistent API’s and shader language versions that are constantly missing just the one feature that would make life convenient. So I was really looking forward to having the Mali-T series chip available and being able to write code using OpenGL ES 3. It isn’t MUCH better, but it’s still a step in the right direction. Plus, AS EVERYONE KNOWS BECAUSE THESE VERSION NUMBERS MAKE SENSE AND ALWAYS HAVE, WebGL 2 is a strict subset of ES 3, and ES 3 is a strict subset of OpenGL 4.3, so you can pretty much write OpenGL ES 3 and have it run on a wide variety of different platform, which is supposedly the whole point of OpenGL anyway. Plus if you have hardware that can run OpenGL ES 3, you also have hardware that can run Vulkan, and there is no better way than writing Vulkan code to turn huge amounts of blood, sweat and tears into mysterious graphics bugs for a month or three until suddenly it all clicks and you have a fast, solid graphics engine.

But you can’t do that on the Pinebook Pro without figuring out the ARM drivers, which I don’t feel like doing. In lieu of that the fine folks at Mesa, overworked and underloved as always, have a pure open-source driver called panfrost (as it targets both the Midgard and newer Bifrost GPU architectures). As is typical with most non-vendor-supported open-source drivers, it takes zero setup and works pretty well for the average use case, but doesn’t seem to be exactly a speed demon – and it only supports OpenGL ES 2.0. It appears that they are hard at work on OpenGL ES 3 support, which is certainly exciting; maybe that will be usable for everyday life in a year or so. I kinda want to help them, it would be a fun chance to actually dig into how graphics drivers are made and contribute to something Real And Useful. As if I needed another side project.

In the mean time, it works fine for driving the display and running old games, but you’re not going to be able to use Shadertoy or play Sandspiel.

As a sidenote, all the ARM GPU architecture names are from Norse mythology. From oldest to newest they are:

  • Utgard: The Mali 200/300/400 architecture, the far-flung fortress of wicked and tricky giants
  • Midgard: The Mali TXXX architecture, the world of humans
  • Bifrost: The Mali GX1/GX2/GX6 architecture, the bridge of rainbows connecting Midgard to the world of the gods
  • Valhall: The Mali GX7 architecture (ARM version names make about as much sense as OpenGL), the golden palace of the gods

I feel like the ARM hardware devs might have Opinions about the progress of technology and the quality of the systems they’re creating. :-D

Misc. niggles

Recently I’ve noticed that once in a while it fails to boot; it gets into the Linux kernel but can’t load a particular Rockchip-specific firmware or kernel module. I reboot and it’s fine. I might be pissed about this, but my fancy expensive AMD Ryzen motherboard forgot that its M.2 drive existed last week and I still haven’t figured out why or how, so, I’ll take it. All software sucks, all hardware sucks.

The webcam probably works? I’ve never bothered trying, since… well, Skype has no ARM64 builds, Zoom has no ARM64 builds, Discord only works with webcams in Chrome, and I don’t use webcams all that much anyway.

Conclusion: Is it worth it?

So, after six months of this being my daily driver laptop, what’s my conclusion? It’s certainly not painless or the best computer in all possible circumstances, but I quite love the little beast. Should you spend $200 on this featherweight, slow, well-built, immature, vigorously-developed, partially supported pile of hardware? That’s up to you. It’s a bit like a classic sports car: It’s not the fastest or most trouble-free thing around, but everyone should own one once just for the experience. So:

  • If you want to spend $200 on a small laptop, there’s probably Chromebooks out there that more powerful and more featureful, but maybe not ones with better build quality, better selection of I/O ports or better Linux software/hardware support. By the time you rip ChromeOS off of it and install a Real Operating System you may be in the exact same place in terms of having to fiddle around to get anything to work.
  • If you want to spend $200 on a powerful laptop, you can get a good used one at Goodwill or some other secondhand electronics place, but it will weigh 3x as much, probably have a 720p screen, chances are the GPU sucks and always will, and you’ll get a max 2 hour battery life if the battery works at all. By the time you replace the battery and throw an SSD in it, you’ll have spent almost the cost of the laptop over again.
  • If you want to spend $200 on a cool laptop with great fundamental capabilities, a lot of promise, a growing OSS community, and a good manufacturer, the Pinebook Pro is a good choice.

Appendix: Conversations

From https://lobste.rs/s/rkfd2e/pinebook_pro_six_months

Hardware investigations

Two-finger scrolling up and down works by default

What is the touchpad? i2c-hid generic multitouch, I hope? What’s touchpad related in dmesg? What does libinput list-devices say about it?

I didn’t like sway at first. I’ve used keyboard-heavy WM’s in the past and always eventually gave up on them

Check out Wayfire — it’s based on the same library as sway (wlroots) but is much more flexible. Tiling is an optional plugin, by default it’s a normal stacking desktop — with wobbly windows :) which are also a plugin of course.

Run Firefox half-decently

Which graphics backend are you using in Firefox? Software, legacy GL or WebRender? (about:support to check, MOZ_WEBRENDER=1 to try WR, about:config layers.acceleration.force-enable to try GL) Also, I hope you’re running native (MOZ_ENABLE_WAYLAND=1) not xwayland?

(UPD: WebRender doesn’t work on GLES2 yet it seems)

[Panfrost] doesn’t seem to be exactly a speed demon

huh, I think some of the dev blog posts mentioned outdoing the proprietary driver in some places already?

Maybe the GPU hardware is just weak.


What is the touchpad? i2c-hid generic multitouch, I hope? What’s touchpad related in dmesg? What does libinput list-devices say about it?
[    3.339108] hid-generic 0003:258A:001E.0001: input,hidraw0: USB HID v1.10 Keyboard [HAILUCK CO.,LTD USB KEYBOARD] on usb-fe3a0000.usb-1/input0
[    3.361825] input: HAILUCK CO.,LTD USB KEYBOARD Mouse as /devices/platform/fe3a0000.usb/usb3/3-1/3-1:1.1/0003:258A:001E.0002/input/input1
[    3.363213] input: HAILUCK CO.,LTD USB KEYBOARD Touchpad as /devices/platform/fe3a0000.usb/usb3/3-1/3-1:1.1/0003:258A:001E.0002/input/input2
[    3.364559] input: HAILUCK CO.,LTD USB KEYBOARD System Control as /devices/platform/fe3a0000.usb/usb3/3-1/3-1:1.1/0003:258A:001E.0002/input/input3
[    3.429245] input: HAILUCK CO.,LTD USB KEYBOARD Consumer Control as /devices/platform/fe3a0000.usb/usb3/3-1/3-1:1.1/0003:258A:001E.0002/input/input4
[    3.430852] input: HAILUCK CO.,LTD USB KEYBOARD Wireless Radio Control as /devices/platform/fe3a0000.usb/usb3/3-1/3-1:1.1/0003:258A:001E.0002/input/input5
[    3.432646] hid-generic 0003:258A:001E.0002: input,hiddev96,hidraw1: USB HID v1.10 Mouse [HAILUCK CO.,LTD USB KEYBOARD] on usb-fe3a0000.usb-1/input1

So it looks like I was wrong about the keyboard not being USB, in fact. Looks like there’s a USB HID controller with inputs for several devices (some of which don’t exist). Thank you for the tip on libinput list-devices; that’s a great tool! Here’s what it has to say about the touchpad:

Device:           HAILUCK CO.,LTD USB KEYBOARD Touchpad
Kernel:           /dev/input/event2
Group:            2
Seat:             seat0, default
Size:             48x32mm
Capabilities:     pointer gesture
Tap-to-click:     disabled
Tap-and-drag:     enabled
Tap drag lock:    disabled
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   *two-finger edge 
Click methods:    *button-areas clickfinger 
Disable-w-typing: enabled
Accel profiles:   none
Rotation:         n/a

Also for the webcam, since it was nearby:

[    3.048761] usb 2-1.2: new high-speed USB device number 3 using ehci-platform
[    3.149294] usb 2-1.2: New USB device found, idVendor=0c45, idProduct=6321, bcdDevice= 0.00
[    3.150050] usb 2-1.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[    3.150697] usb 2-1.2: Product: USB Camera
[    3.151063] usb 2-1.2: Manufacturer: Sonix Technology Co., Ltd.

It’s then followed by a USB disconnect message for that device, so I expect you just have to do something specific to turn it on.

Which graphics backend are you using in Firefox? Software, legacy GL or WebRender? (about:support to check, MOZ_WEBRENDER=1 to try WR, about:config layers.acceleration.force-enable to try GL)

Whatever the default is on Firefox 68.8.0esr. In about:config it does say HW_COMPOSITING: blocked by env: Acceleration blocked by platform so I expect it’s either software, or legacy GL with some features turned off. Attempting to force acceleration in about:config layers.acceleration.force-enable results in the same message for that section. If it’s worth anything, since I’m not ACTUALLY sure what I’m looking for, AzureCanvasBackend is set to skia.

Also, I hope you’re running native (MOZ_ENABLE_WAYLAND=1) not xwayland?

Annoyingly, when I use firefox MOZ_ENABLE_WAYLAND=1 I get this:

dbus[6672]: arguments to dbus_message_new_method_call() were incorrect, assertion "_dbus_check_is_valid_path (path)" failed in file ../../../dbus/dbus-message.c line 1366.
This is normally a bug in some application using the D-Bus library.

  D-Bus not built with -rdynamic so unable to print a backtrace
Redirecting call to abort() to mozalloc_abort

I’d stumbled across that before, then forgotten about it. So I was using xwayland. Apparently it’s this bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1551664 Easy workaround is to run Firefox with MOZ_ENABLE_WAYLAND=1 firefox –no-remote . Now that I’m doing that performance seems… about the same really, but I’ll keep playing with it.

huh, I think some of the dev blog posts mentioned outdoing the proprietary driver in some places already? Maybe the GPU hardware is just weak.

That’s quite possible! Experience has just taught me to assume that if you have anemic GPU performance on Linux, the driver is the first bottleneck. I haven’t done any actual graphics benchmarks on it, mainly due to the annoyance with having to find/write interesting programs that don’t assume a newer version of OpenGL is available.


Huh, wow, USB, but still standard HID multitouch, nice.

Annoyingly, when I use firefox MOZ_ENABLE_WAYLAND=1 I get this:

That’s what you get for using old “stable” versions: “Firefox 68.8.0esr” — that’s 10 major versions behind Nightly (78.0a1) :P

Radio interference from USB3

(If you want to have a real shit time, try to use a USB-C video camera (like an Intel Realsense, for example) next to a sensitive GPS receiver or long-range wifi. Not with the PBP, just with anything.)

What would happen? I don’t own a sensitive GPS receiver or long-range wifi :)


Unless you had very good quality USB hardware, they would get totally swamped by the radio interference radiating from the USB cable/connector. You know, the way that it’s theoretically not supposed to do to be able to pass US FCC regulations. I do wonder how long before it causes a problem for an airplane; it can certainly cause problems for a drone navigating by GPS.

[Some back-and-forth skipped]

I was referring to items in the aircraft or mounted on the aircraft, sorry that wasn’t clear.

Also the problem isn’t interference in the CPU, the problem is the antennas for the communication or GPS system.

Citation: https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb3-frequency-interference-paper.html . Also I’ve tried to fly a drone with a small computer and USB3 camera attached to it. USB2 camera? Fine. Other sensors that transfer their data over ethernet? Fine, even with gigabit ethernet and unshielded cables. USB3 camera? Drone’s GPS gets swamped with noise and it gets lost, even with expensive “shielded” cables. Can happen with wifi as well; you can find lots of people complaining about it if you search.

Audio hardware

Thanks for the detailed writeup. Seems like the machine still needs some more polish in the audio department. Having a lot of low-level options via ALSA sound interesting to me, actually. As someone who produces music on Linux, I prefer to give ALSA a good kicking until it works, rather than dealing with Pulseaudio’s latency issues. Is it possible to record the internal stereo mix directly, ie. can you select it as a recording source without resorting to jackd trickery?


Is it possible to record the internal stereo mix directly, ie. can you select it as a recording source without resorting to jackd trickery?

I have no idea, but if you can give me some pointers on how to find out I can try. If it’s worth anything, the full dump from the alsa-info script is here: http://alsa-project.org/db/?f=5363202956bb52364b8f209683f813c662079d84


Thanks. Judging from this output, it is not possible to record the internal mix out of the box. That’s somewhat disappointing. It’s not surprising considering this has been the norm for off-the-shelf laptops for several years now, but I would have expected an open hardware like the Pinebook Pro to fare better.