For many years now I am on a quest to find my ideal mobile computing device, aka laptop. It should be small and lightweight so that it is easy to carry, but not too small so that I can still work on it. It should have decent battery life so that I can get through a day with light use but should also have at least some CPU power so that I can do some more intense things if I need to. The display should be at least full-HD and bright enough to be usable outside at daylight. Ideally I would like to be able to charge it with the same charger I us for my phone, i.e. type-C, but please also a small one, so 45W or less. Apart from that of course the usual, WiFi / Bluetooth, please also with Bluetooth Low Energy (BLE) support, type-C port for accessories etc.
So far the two closest I found were the Thinkpad Tablet 10, 10″ display, Intel Baytrail CPU but only 4GB RAM and 128GB internal eMMC and not type-C charging. So memory was a problem. Then I found the Teclast F5, N4100 CPU, 8GB of RAM and 2242 M.2 SATA SSD. That was pretty cool already! But the keyboard quality was rather bad and the Embedded Controller charge logic sadly quickly killed the battery – a well known problem of the F5.
I still remember vividly how I marveled at the Google Pixelbook when it was announced. Wow. what a nice piece of hardware! But at the time also at a steep price, starting from something like $1,000 and quickly going up depending on CPU type (Intel i5 or i7) RAM (8GB or 16GB !) and storage (128GB, 256GB and 512GB NVME SSD). The machine was beautiful! I almost ordered the largest model! But Google would not accept my order from Germany. Their loss, almost $1,700! That was around 2018 if I remember correctly.
Fast forward to today, Google announced they would not extend their line of Pixelbooks which reminded about it again. So I looked on eBay for used ones. And indeed I got lucky and found my dream machine with Core i7 CPU, 16GB RAM and 512GB NVME SSD plus the nice stylus in almost as good as new condition! I could not resist and placed a bid – and won! In total plus taxes and shipping etc. $380 – a bargain! For some days afterwards I started to regret it. I already have a ton of laptops, why another one?
But I was not disappointed. When I first laid hands on it after it arrived I instantly fell in love. This is a great piece of hardware! It feels so solid, it does not bend, nothing squeeks, just slick awesomeness.
First I played with the pre-installed ChromeOS a bit. I was pretty impressed, it felt very snappy and it was pretty easy to get access to the underlying Linux OS. With the Crostini Linux subsystem you can also pretty easily install Linux applications, even GUI apps, and run them within ChromeOS. Pretty nice! But I quickly and constantly got reminded that this is a Google device and system. It constantly calls home and integrates a metric ton of Google services. This is totally convenient if you do not care about your privacy but I quickly realized that I could not accept this as a solution.
So first step was to try out a regular Linux. I am using Debian for years now, I know how to deal with it and frankly I am also very happy with it. So I first switched it to developer mode to get root access and then installed the so called Legacy-RW firmware so that I could boot a Debian Live system from USB.
From within the Linux system I could marvel a bit more at what the Google engineers did right in this machine. To give some more context to why I was so impressed, I am working for Purism for quite some time and headed the development of a couple of hardware consumer products, also PCs. I know this industry a bit, I think. So I also know how awfully hard it is to diverge from the reference design path in the PC world. Most PCs these days are derived from ready made reference design blocks, they are usually not engineered from scratch. So you end up with a lot of parts that are there because, well, they are there and belong to this reference design. The parts you can customize are not many.
Why I am telling you this? Because Google ditched all that in the Pixelbook. They did invent their own reference, which is now the base for the Chromebooks of this world. They invented a pretty nifty fail safe firmware boot strategy so that they could safely deploy firmware updates in the field, i.e. BIOS and EC firmware. They wrote their own EC firmware and used Coreboot as the base for their BIOS. All that open source and can be found in the ChromiumOS public repositories. Also development of all that is documented, you can recompile all that and deploy it on your Chromebook. The EC firmware I find especially interesting.
The EC is a small microcontroller which controls some low level functions, like power sequencing for the Intel main CPU, controlling of bunch of sensor peripherals, controlling the USB type-C port status, emulating a PS/2 keyboard etc. They actually created a way for the operating system and thus also the user to talk to the EC, there is a console and a tool to talk to it and to control it! That is very amazing! Using that you can e.g. also script battery charge start and stop thresholds, a feature I absolutely love and want in all my battery powered devices since it prolongs the battery life time tremendously! A laptop battery can last many many years if treated well, especially not being constantly charge to 100%. With the Pixelbook EC I can prevent that from happening using a simple script:
#!/bin/sh STOP_THRESHOLD=80 START_THRESHOLD=30 while true; do AC_STATE=`cat /sys/class/power_supply/AC/online` if [ $AC_STATE == "1" ]; then echo "on AC" BAT_LEVEL=`cat /sys/class/power_supply/BAT0/capacity` CURRENT=`cat /sys/class/power_supply/BAT0/current_now` echo "current=$CURRENT" if [ $BAT_LEVEL -gt $STOP_THRESHOLD ]; then echo "bat level > $STOP_THRESHOLD%" if [ $CURRENT -gt 0 ]; then echo "charger disabling" sleep 10 ectool chargecontrol idle fi elif [ $BAT_LEVEL -lt $START_THRESHOLD ]; then echo "bat level < $START_THRESHOLD%" if [ $CURRENT -lt 0 ]; then echo "charger enabling" sleep 10 ectool chargecontrol normal fi else echo "charger state OK, idling..." fi else echo "not on AC, idling..." fi sleep 10 done
This script will of course only work while the system is running. So if you connect the charger when the system is suspended or off the EC will charge to its default of 100%.
Only papercut here is this ectool does not compile easily for other distributions so I copied the binary from the ChromiumOS install along with a hand full of necessary libraries and put this into a small directory into which I then chroot to execute it:
#!/bin/sh chroot /root/pixelbook-bin /sbin/ectool $*
But that’s not all. Almost all necessary drivers for the Pixelbook have by now been merged upstream into the Linux kernel. Right now I am running pretty much vanilla Kernel 6.0.10 and everything works pretty much perfectly!
Only few tweaks necessary
First of all you need to check if your Linux kernel has support for the Chromebook CR50 TPM enables with I2C support, the module name tpm_tis_i2c_cr50
. This is absolutely vital for resume from suspend to work. If this module is not loaded then you can suspend but the Pixelbook will reset and thus reboot instantly on resume. If this is happening, then you lack the CR50 TPM support.
Apart from that there are only three necessary tweaks and one optional:
LCD Backlight Control
First you absolutely need to either add a kernel commandline argument or module parameter to the i915 driver for the LCD backlight control to work. I did it via a module parameter in /etc/modprobe.d/i915.options
:
options enable_dpcd_backlight=1
Keyboard Hotkeys
The Pixelbook keyboard does use the top row for special function keys and not the PC common Fn function keys. So the keycodes need to be remapped or you will get unexpected results. Add the following file as /lib/udev/hwdb.d/61-eve-keyboard.hwdb
:
# Copyright 2017 The Chromium OS Authors. All rights reserved. # Distributed under the terms of the GNU General Public License v2 # # Special keyboard mapping for Eve project. The keyboard has extra # "Assistant" and "Hamburger" keys. # evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGoogle:pnEve:pvr* KEYBOARD_KEY_5d=delete KEYBOARD_KEY_d8=leftmeta KEYBOARD_KEY_db=capslock KEYBOARD_KEY_3b=back KEYBOARD_KEY_3c=f5 KEYBOARD_KEY_3d=f11 KEYBOARD_KEY_3e=print KEYBOARD_KEY_3f=brightnessdown KEYBOARD_KEY_40=brightnessup KEYBOARD_KEY_41=playpause KEYBOARD_KEY_42=mute KEYBOARD_KEY_43=volumedown KEYBOARD_KEY_44=volumeup
WiFi Warnings
For some reason the Intel IWL WiFi driver emits quite some warning messages about possible PCIe issues. These are seemingly harmless and seem to have to do with PCIe ASPM AER. The warnings can be safely suppressed. Add a systemd module /usr/lib/systemd/system/pixelbook-aer.service
:
[Unit] Description=Fix for Pixelbook's excessive AER logging After=systemd-modules-load.service [Service] Type=oneshot # Change your device and vendor (or bus/slot/function accordingly) ExecStart=/usr/bin/setpci -v -d 8086:9d10 CAP_EXP+0x8.w=0xe RemainAfterExit=yes [Install] WantedBy=multi-user.target
and then enable it:
sudo systemctl enable --now pixelbook-aer
Keyboard Backlight Control
The EC drivers are part of the Linux kernel but maybe not all of them are enabled by default. I usually compile my own kernel and there I enabled everything for Google hardware, you never know 🙂 This also gave me
/sys/class/leds/chromeos\:\:kbd_backlight/
which can be used to control keyboard backlight level. I use GNOME and GNOME and upwerd pick up this device and actually control it, i.e. when the screen is turned off also the keyboard backlight is turned off. But there is no way to change the backlight level. But it is easy to add keyboard shortcuts for it. I chose to use shift-<brightness up/down>. In GNOME settings go to ‚Keyboard‘ and there to ‚View and Customize Shortcuts‘. In the list go to the very end and pick ‚Custom Shortcuts‘ and click on ‚+‘ to add a shortcut:
GNOME cuts off the commandline, so here are the two dBus commands for increase and decrease:
$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Keyboard.StepUp $ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Keyboard.StepDown
Input Devices
I already covered the keyboard, no issue there. But the Pixelbook offers much more. First there is the touchpad which is a very nice I2C connected glass touchpad. This did not work well with older kernels but since 5.1x all necessary patches should be in the kernel, with the 6.0.11 I am running now I have no issues with it all, it works very slick and smooth, a joy to use.
The Pixelbook also features a capacitive touchscreen with pen support, made by Wacom. The touchscreen is also I2C connected and the kernel I2C HID driver picks it up with all bells and whistles, even the battery state of the active pen is reported! Very nice to use e.g. with Xournal or XournalPP.
Besides the normal input devices there are also two switch input devices worth mentioning. First of course the display lid switch which works as expected and can be used reliably to suspend and wake up the Pixelbook. The other really nice switch is the ‚Tablet Mode Switch‘. When you tilt over the display lid at some point the ‚Tablet Mode Switch‘ will trigger and signal to the system that the device flipped into tablet mode. The EC will then switch off the keyboard and GNOME will then activate the accellerometer sensors to detect the orientation, choose the correct display orientation and also start to activate the virtual touch keyboard when an input filed is selected. This way the Pixelbook becomes a capable Linux tablet device!
Sensors
The Pixelbook embeds a number of sensors which get picked up by the Linux Industrial I/O (IIO) subsystem:
iio:device0: cros-ec-accel (label: accel-display) (buffer capable) iio:device1: cros-ec-light (label: accel-display) (buffer capable) iio:device2: cros-ec-accel (label: accel-base) (buffer capable) iio:device3: cros-ec-gyro (label: accel-base) (buffer capable) iio:device4: cros-ec-mag (label: accel-base) (buffer capable)
The accel is used for display orientation in tablet mode. The gyro is not used as far as I know. The magnetometer is also not used and so far I have not managed to get any reasonable readings from it either. The light sensor can actually be used by GNOME for automatic display backlight control but the algorithm behind that is, sorry to say, so bad that this is practically not usable. Under ChromiumOS this worked really super nicely, LCD backlight and keyboard backlight was almost always just right. Maybe at some point I need to hack something up or figure out where this is implemented for GNOME and fix this.
Sound
Audio / sound out works with HDMI (via a type-C to HDMI adapter) but the internal speakers, the 3.5mm headphone jack and internal mircrophones are an issue. You would think that audio should not be that complicated, it’s a DAC/ADC and an amplifier attached to the Intel HDA sound peripheral. Well, yes, it is, but you can do that in ways that make driver development a real pain plus you can have a chip maker like Intel creating an extra complex audio peripheral. Long story short, the Pixelbook uses „smart“ amplifiers that include the DAC and a digital microphone, all that directly attached to the Intel HDA engine. All the chips used are perfectly undocumented. The driver stack in the quite old ChromiumOS kernel 5.14 is not mainlined and uses some binary blobs for DSP firmware and some more. So that does not help a lot.
In current kernels there are two audio stacks, the older Kabylake/Skylake SST drivers and the newer stack Intel itself develops called AVS. The SST drivers are rumored to be somewhat working based on the blobs from ChromiumOS and some Alsa UCM files. I got it to make noise but not much more, it was way too loud and clipping and the sample rate did not match, the audio output played back at least at half the speed or even slower. Something in the stack did not match. The Intel AVS stack as of now does not do anyhing on the Pixelbook (aka code name „Eve“) yet since the drivers for the smart amplifiers are still missing, in AVS slang called „boards“. Some great folks at Chrultrabook are hacking on it.
So for the time being I am using either a Bluetooth A2DP stereo headset or my good old 3.5mm jack headphones and a cheap 3.5mm USB type-C adapter with built-in audio chip – I got a *pair* of these adapters from Amazon for $9 – $9! A pair! And they even work with CTIA headphones, with microphone input and playback control! Out of the box in Linux! Amazing…
General Hardware Talk…
Let me talk a bit more about the hardware of the Pixelbook since I am really starting to love it! The display is great. The bit larger bezel is of course a point for critique, there could be more screen estate, but well, it is not bad as it is now so I am OK with that. The display quality is great! It is bright, the resolution of 2400×1600 is awesome, everything is super crisp and sharp, the contrast is great and black level is great! The screen also features a capacitive touchscreen as well as pen input, all Wacom tech, so pretty good! The pen is a bit expensive but worth it. Touchscreen with pen support just works in Linux out of the box. Even the pen’s battery state is picked up!
The display can be bent over 360 degree to turn the laptop into a tablet. The tablet mode switch for the OS to detect is working under Linux out of the box too and the EC disables the keyboard in this mode. There are two accellerometer sensors, one in the base and one in the display lid. Together they can be used to determine the orientation of both against each other. There is also a Gyroscope and allegedly a magnetometer though I could not yet get readings from them. There is also a light sensor next to the camera which can be used to adjust the LCD and keyboard backlight. I am using GNOME and the automatic screen backlight algorithm does a really bad job and does not change the keyboard backlight. I will write my own algorithm for that, I think.
Talking about the keyboard… it is great! The key travel is of course not that much since the whole device is pretty flat but still the keys have a very nice feel to them, a nice pressure point, good feedback. I love typing on it! The touchpad below the keyboard is the first glass surface touchpad I used and I have to say, wow, great! Very nice to work with since it is precise and fingers glide easily over its surface.
The overall mechanical design is pretty awesome too. Very sturdy, it feels like a very solid piece, which I really appreciate. The machine’s only physical connections are two USB type-C ports, left and right. This may seem a bit reduced but I think this is totally OK since you can attach everything to these two ports, also two external screens! Or a hub with more ports etc. Both type-C ports are USB3 and support power delivery, i.e. you can attach the type-C charger to either side. Charging is pretty amazing too. Most laptops I had so far with type-C charging required the PD source to supply at least 20V DC. The Pixelbook works even from a simple type-C phone charger with just 15V DC! But then I can sometimes hear some regulators whistling. Nevertheless this is super convenient for travel, you can take a very small charger with you.
Travel, this is the most important use case for me. I was looking for a machine that I can work on almost the same way as I work on my main workstation. I want to be able to the same stuff, maybe a bit slower and with a smaller screen, but it should be capable of running the same software. And I wanted a device which I could use on battery for some time without worrying too much about running out of juice too early. I think for me the Pixelbook fits this quite perfectly! With the Core i7 two cores and four threads but older generation it is not the fastest but also far from being slow! The 16GB RAM also help a lot to keep it snappy. With applications like LibreOffice, email reading, Firefox web browsing everything just works like a charm and I do not feel any difference to my main workstation – and web browsing with Firefox and touchscreen is almost like on a tablet, really cool. You do of course feel a difference when doing compute intense stuff, like compiling a kernel. You can do this of course, but it will take time. Quite a lot of time, several times more time than in my Core i7 10710U workstation. But that’s OK since this is not my use case on the road anyway. Smaller compile jobs for applications or microcontroller RTOSes run through just fine.
Power consumption and battery runtime of course vary significantly between the different scenarios. An almost idle machine with display on and just typing in some text editor comes down to, according to powertop and also measured on the type-C charger input when not charging, around 3.5W. This is *very* good! On a fully charged battery this results in 8 to 10 hours runtime! And who works 10h straight? During breaks and when the display dims down or even turns off more power is saved. But one thing I also like a lot, which works just out of the box too, suspend to RAM. You just close the display lid and the machine reliably goes to sleep, you open the display lid and it comes back on within very few seconds. I did not measure Watt during suspend but can see about 0.4% battery loss per hour, theoretically making 250h of standby or roughly 10 days. So this means whenever you make a break you can also have your Pixelbook take a break, just slap it close, which BTW makes a very satisfying sound too – *thud*.
Final Verdict
While it does not have the most computational horse power it is more than capable enough for all my day to day work. Web browsing, office stuff, smaller compile jobs, everything works really smooth. Especially web surfing is a joy with the really very good display and I am every time amazed how fluid also Firefox is work – no stuttering, very smooth. I also very much like the low power consumption at runtime and in standby. Just can just slap it close and stow it away and don’t have to worry about the battery too much. The low power consumption during work of course also results in less heat – of course also important for this fanless design.
I paid $360 used for the device including the pen (+ tax and shipping). A really good deal which I can seriously recommend.