Notes on the Pi Book Pro laptop shell

The Pi Book Pro is a DisplayLink USB 3.0 1080p monitor, keyboard, and trackpad in a laptop shell for the Raspberry Pi 3 and 4.

It was originally the Sentio Superbook, an Android phone laptop shell, except Sentio went out of business. The Pi Book Pro is the leftover stock.

These notes are based on testing the Pi Book Pro with an early model 4GB Raspberry Pi 4B and a late model 8GB.

Stock firmware cabling, power

Raspberry Pi 4, Pi Book Pro, and cabling

Using the stock firmware only, two short USB-C to USB A 3.0 cables can connect the Pi Book Pro to the Raspberry Pi 4 for both display and power. The USB-A port on the shell seems to provide reliable power to the RPi. A USB 3.0 port on the RPi connects to the USB-C port on the shell to provide display and input.

I don't believe there's any way to run the Pi Book Pro using a single USB-C to USB-C cable; the RPi4 doesn't power on when plugged into the shell's USB-C port.

Assuming the raspberry-pi-power-supply-check.sh script works on the RPi4 as expected, the Pi Book Pro USB-A port provides stable power, with no reported undervoltaging, when running on both an AC adapter and from battery:

32.0'C 1500 / 1500 MHz 0.8625V - 
...
72.0'C 1500 / 1500 MHz 0.8625V -

❓I never see an undervoltage lightning bolt indicator on the Pi Book Pro screen, but it's also unclear whether one would show up over that display connection at all.

At idle, the Pi Book Pro can power the RPi4 for at least six hours:

$ uptime
 21:23:19 up  6:18,  3 users,  load average: 0.00, 0.00, 0.00

The Pi Book Pro AC adapter is 12V 3A, center pin positive, 3.5mm by 1.35mm.

v0.8.0.1 firmware cabling, power

Using the v0.8.0.1 firmware, the power coming off the USB-A port cuts out at various points during the boot process, causing the Pi to reset. If you update firmware, you'll need to provide separate power to the Raspberry Pi.

Testing with a late model 8GB Raspberry Pi 4B, it also does not power on when plugged into the shell's USB-C port. There does not appear to be any way to run the Pi Book Pro using a single USB-C to USB-C cable.

Display, overscan, bezel

It's possible to use only the visible pixels in the display

As described in various comments on the Sentio Fandom wiki, while the LCD is 1920x1080, the bezel covers up some pixels all around.

Various Stack Overflow answers suggest applying a transform using xrandr, but this doesn't appear to work, making the display unresponsive when I try it.

This zero-point answer, however, did work for me. Instead of transforming the output, it creates a new display mode, which gets centered within the physical display. Because manufacturing tolerances may mean that some displays may have more or fewer pixels covered, you might still have to follow those steps to get something that maximizes your visible area, but here are a few to get you started.

First, open a Terminal window, and type:

$ sudo nano /usr/share/X11/xorg.conf.d/10-monitor.conf

to create a new 10-monitor.conf file. In it, paste the following:

Section "Monitor"
    Identifier "DVI-I-1"
    # Warning: Aspect Ratio is not CVT standard.
    # 1800x1000 59.91 Hz (CVT) hsync: 62.19 kHz; pclk: 148.75 MHz
    Modeline "1800x1000_60.00"  148.75  1800 1912 2096 2392  1000 1003 1013 1038 -hsync +vsync

    # Warning: Aspect Ratio is not CVT standard.
    # 1904x1048 59.94 Hz (CVT) hsync: 65.15 kHz; pclk: 165.75 MHz
    Modeline "1904x1048_60.00"  165.75  1904 2024 2224 2544  1048 1051 1061 1087 -hsync +vsync

    # Warning: Aspect Ratio is not CVT standard.
    # 1864x1048 59.90 Hz (CVT) hsync: 65.11 kHz; pclk: 162.00 MHz
    Modeline "1864x1048_60.00"  162.00  1864 1984 2176 2488  1048 1051 1061 1087 -hsync +vsync

    Option "PreferredMode" "1904x1048_60.00"
EndSection

CtrlO, Enter to save, then CtrlX to exit.

This sets up a new 1904x1048 screen resolution as the default, which cuts off 16 pixels left and right (8 on each side), and 32 pixels top and bottom (16 on each side). On my display, more pixels are covered up at the top than at the bottom, so this leaves a slight black border at the bottom of the screen.

The other two resolutions you can try are:

If you find you have more or fewer pixels covered up and start playing with cvt and xrandr to find a better modeline, remember that while the height can be any value, the width has to be a multiple of 8 pixels, so you can only adjust 4 pixels left or right at a time.

Trackpad

Using the stock firmware, tap-to-click does not appear to be available.

❓I can't tell if it's a USB bus saturation thing (like the Razer Core would experience), or if it's a build quality thing, but using the stock firmware, sometimes the trackpad becomes real slow or even completely unresponsive. Haven't tested the updated firmware enough yet.

A separate mouse plugged into a USB 2.0 port on the RPi4 doesn't experience the same issues, but that doesn't help narrow it down any.

Using the v0.8.0.1 firmware, tap-to-click appears to be available, and cannot be disabled. The device reports to libinput as a pointer or mouse. Things I tried:

I haven't used it long enough to see if the unresponsiveness returns with the updated firmware.

Charging LEDs, battery

❓Similarly to this Reddit post and top comment, the charging LEDs don't seem to behave as described in the Superbook manual. It never gets to solid green, it's always either flashing or orange/red. The original manual says:

LED state Indicates
Right light is off Superbook is off
Right light is solid green Superbook has greater than 75% of its battery remaining
Right light is solid yellow Superbook has between 50-75% of its battery remaining
Right light is solid orange Superbook has between 25-50% of its battery remaining
Right light is solid red Superbook has less than 25% of its remaining battery
Right light is flashing green and another color Superbook is charging. The other color is the remaining battery life
Right light is flashing red Superbook is not charging and has less than 5% of its battery remaining

With the v0.8.0.1 firmware, my LEDs now flash something similar to "SOS" as described in this unanswered November 2018 Reddit post and this related January 2019 comment.

At some point, the battery completely discharged, and refuses to recharge. The diagnostics flowchart suggests that the SOS message was a known firmware bug. However, the not-charging symptom suggests a "battery connection issue" requiring an RMA, which, uh, there's not really an option for, now. Tried a hard reset and left it charging overnight to no avail. Popped the bottom case open and the battery connector looks like it's just taped down to the mating connector on the motherboard, it peeled right off. I don't have any way to safely test whether the connections are good or if it just needed to be reseated, and it's dangerous to be unsure around lithium cells, so I pulled the battery out entirely. I will have to power it, like the Pi, from an external battery pack.

Firmware update

The Pi Book Pro appears to ship with whatever original factory firmware the Sentio Superbook originally shipped with. It's old enough that the standalone Linux updater doesn't report the device serial number or firmware versions and is unable to update it; presumably the Sentio Desktop Android app would have updated it at least once.

The Sentio Superbook Updater Android app is no longer available from the Google Play Store, but APKs can still be found on mirror sites.

After repeated attempts with an Android 8.x phone with USB-OTG (micro-USB), I was able to update the Pi Book Pro firmware to v0.8.0.1. It was recognized by the standalone Ubuntu updater as well.

There does not appear to be any way to roll the firmware back to v0.7.0.5 or v0.7.0.3. It's unclear which version is the safest to upgrade to.

Raspberry Pi 4 USB 3 v. USB 2 performance

Benchmarking Linux display driver performance was in rough shape in 2009 and doesn't appear to have gotten much better in the intervening decade. To try and determine the performance of the DisplayLink 3.0 display, I ran:

first on the HDMI output, then on the Pi Book Pro output using the USB 3.0 port, and finally again on a USB 2.0 port.

Test HDMI Pi Book Pro
vblank_mode=0 glxgears     1154 FPS     224 FPS
GtkPerf (1000 runs)    116.11s     86.97s
GeeXLab     ~220 FPS     ~50 FPS
09-noise-animation-electric.xml     ~100 FPS    ~16 FPS
43-smiley-tutorial.xml     ~60 FPS     ~14 FPS
21-radial_blur.xml     ~14 FPS     ~4 FPS

The USB 3.0 and USB 2.0 runs are not broken out separately because they performed identically! The USB bus does not appear to be the limiting factor for the DisplayLink performance. This potentially means if a Pi 4B with the USB-C power fix allows for the Pi Book Pro to boot the Pi with a single cable, performance shouldn't be impacted.

(A previously open question about the differences between Full KMS and Fake KMS has been struck, as Full KMS is not available on the Raspberry Pi 4 as of this writing.)

Here are the full runs:

HDMI

pi@rpi4superbook:~ $ vblank_mode=0 glxgears 
ATTENTION: default value of option vblank_mode overridden by environment.
5631 frames in 5.0 seconds = 1126.061 FPS
5776 frames in 5.0 seconds = 1155.067 FPS
5763 frames in 5.0 seconds = 1152.431 FPS
5775 frames in 5.0 seconds = 1154.885 FPS
5760 frames in 5.0 seconds = 1151.942 FPS
5778 frames in 5.0 seconds = 1155.562 FPS

pi@rpi4superbook:~ $ gtkperf 

(gtkperf:937): Gtk-WARNING **: 00:34:00.150: GtkSpinButton: setting an adjustment with non-zero page size is deprecated

(gtkperf:937): Gtk-WARNING **: 00:34:00.187: GtkSpinButton: setting an adjustment with non-zero page size is deprecated
GtkPerf 0.40 - Starting testing: Sat Jul  4 00:34:08 2020

GtkEntry - time:  0.70
GtkComboBox - time:  7.17
GtkComboBoxEntry - time:  5.69
GtkSpinButton - time:  1.78
GtkProgressBar - time:  1.46
GtkToggleButton - time:  1.51
GtkCheckButton - time:  1.10
GtkRadioButton - time:  1.99
GtkTextView - Add text - time: 35.40
GtkTextView - Scroll - time:  4.46
GtkDrawingArea - Lines - time: 19.23
GtkDrawingArea - Circles - time: 26.06
GtkDrawingArea - Text - time:  7.26
GtkDrawingArea - Pixbufs - time:  2.28
 --- 
Total time: 116.11

USB

pi@rpi4superbook:~ $ vblank_mode=0 glxgears 
ATTENTION: default value of option vblank_mode overridden by environment.
947 frames in 5.0 seconds = 189.269 FPS
1131 frames in 5.0 seconds = 225.955 FPS
1127 frames in 5.0 seconds = 225.065 FPS
1139 frames in 5.0 seconds = 227.528 FPS
1105 frames in 5.0 seconds = 220.751 FPS
1113 frames in 5.0 seconds = 222.581 FPS

pi@rpi4superbook:~/Downloads/GeeXLab_FREE_rpi_gl21 $ gtkperf

(gtkperf:1233): Gtk-WARNING **: 00:09:29.307: GtkSpinButton: setting an adjustment with non-zero page size is deprecated

(gtkperf:1233): Gtk-WARNING **: 00:09:29.338: GtkSpinButton: setting an adjustment with non-zero page size is deprecated
GtkPerf 0.40 - Starting testing: Sat Jul  4 00:09:37 2020

GtkEntry - time:  0.73
GtkComboBox - time:  9.61
GtkComboBoxEntry - time:  6.64
GtkSpinButton - time:  1.16
GtkProgressBar - time:  0.83
GtkToggleButton - time:  1.40
GtkCheckButton - time:  1.05
GtkRadioButton - time:  1.45
GtkTextView - Add text - time: 36.17
GtkTextView - Scroll - time:  5.45
GtkDrawingArea - Lines - time:  5.51
GtkDrawingArea - Circles - time: 11.72
GtkDrawingArea - Text - time:  4.40
GtkDrawingArea - Pixbufs - time:  0.83
 --- 
Total time: 86.97

Switching to HDMI, multiple displays

The Pi Book Pro doesn't really make sense as a bench display, where you might switch it between multiple Raspberry Pis, or use it with Pis that also have to run on HDMI. It's best used with a Raspberry Pi dedicated to it, e.g. as a laptop replacement.

According to the DisplayLink documentation, as of this writing (July 2020), there are significant limitations:

If you switch to a new virtual console with CtrlAltF2, it will freeze the DisplayLink screen, and show the virtual console on HDMI 0 (aka HDMI-A-1). Drawing to /dev/fb0 will work now, showing on the HDMI display. To return to X11 on the DisplayLink screen, CtrlF1 for X11's virtual console, then sudo service lightdm restart.

Because virtual consoles aren't displayed on the DisplayLink screen, I suspect it's not possible to boot the Raspberry Pi into a virtual console only, without X11.

Raspberry Pi Zero

I couldn't get the display to start on a Raspberry Pi Zero. xrandr reports the display is disconnected when plugged into the Zero's sole USB port with an OTG adapter.

Other open questions

❓How can I switch the function keys from being media keys by default (press Fn to get the function) to being function keys by default (and pressing Fn to get the media key)? I now suspect this will require remapping each key manually.

By request, here are what I believe are accurate instructions for installing everything you need to run the Pi Book Pro on a Raspberry Pi 3B or 4, using the latest Raspberry Pi OS dated August 2020, and the latest DisplayLink 5.3.1 drivers for Ubuntu.

Plug an external HDMI display, USB keyboard, and USB mouse into your Raspberry Pi. You can also plug in the Pi Book Pro using a USB-A to USB-C cable (use the USB-C port on the Pi Book Pro) and use its keyboard and trackpad, although sometimes the DisplayLink installer will error out because of this. You definitely cannot use the Pi Book Pro's display to set up the Raspberry Pi for the first time.

Format a Micro SD card with Raspberry Pi OS. Using the official Raspberry Pi Imager is recommended. Follow the official instructions to set up your Raspberry Pi, including making sure your networking is working (wifi or ethernet). Restart when prompted. You'll have a desktop on your HDMI display that looks like this:

Raspberry Pi OS desktop image, via the Raspberry Pi Foundation

Next, we need to enable an option called "kernel mode-setting." Click on the Terminal icon () to open a console window, and type sudo raspi-config. This opens the text-based raspi-config utility. Navigate the menus from Advanced Options to GL Driver and enable Fake KMS. See the official raspi-config documentation for more detailed instructions if you need help. If it asks you to reboot, say Yes.

Then, we'll download the DisplayLink drivers for the Pi Book Pro screen. Click on the Web Browser icon () and visit the URL https://www.displaylink.com/downloads/ubuntu. Click Download then Accept to start the download onto your Raspberry Pi.

Once the download completes, we'll need to uncompress and install it. Click on the Terminal icon again and type in cd Downloads to change to the Downloads directory. Then, unzip DisplayLink\ USB\ Graphics\ Software\ for\ Ubuntu\ 5.3.1.zip to uncompress it (you may be able to autocomplete the file name by typing just unzip Display and then pressing Tab). Run the installer by typing sudo bash ./displaylink-driver-5.3.1.34.run (again, you may be able to autocomplete the file name by typing just sudo bash ./displaylink and pressing Tab).

The DisplayLink driver will automatically download all the dependencies it needs. Hit Enter at the download prompt to confirm.

(If you're using the Pi Book Pro as your keyboard and mouse, there's a chance you'll get the error:

Detected running Xorg session and connected docking station
Please disconnect the dock before continuing
Installation terminated.

If this happens, you'll need to unplug the Pi Book Pro and use a different external USB keyboard and USB mouse, and re-run the installer.)

When the installer completes successfully, it will prompt you to reboot. We've a couple changes to make still, so press N and Enter to decline.

On the Pi 3B, the DisplayLink driver seems to occasionally load too slowly, and isn't ready by the time the Pi wants to display the desktop, so we need to force it to restart the desktop display manager in those cases. This is less of an issue on the faster Pi 4, but these changes are still safe to make. In the Terminal window, type sudo nano /lib/systemd/system/displaylink-driver.service. This will start a text editor. Use the arrow keys to move down to the [Service] section, and add a new line after the ExecStart line that reads ExecStartPost=/bin/systemctl try-restart display-manager. (If you're copy-and-pasting from the web browser, you can paste using CtrlShiftV.) That whole section should look like this:

[Service]
ExecStartPre=/bin/sh -c 'modprobe evdi || (dkms install $(ls -t /usr/src | grep evdi | head -n1  | sed -e "s:-:/:") && modprobe evdi)'
ExecStart=/opt/displaylink/DisplayLinkManager
ExecStartPost=/bin/systemctl try-restart display-manager
Restart=always
WorkingDirectory=/opt/displaylink
RestartSec=5

Press CtrlO, Enter to save, then CtrlX to exit. Enable the changes by typing sudo systemctl daemon-reload in the Terminal window. (If you don't make these changes, and your Pi ever boots up but nothing shows on the screen, you can blindly reboot it by pressing CtrlAltDel to bring up the shutdown menu, then Down arrow to select Reboot, then Spacebar to press it.)

We also need to accommodate the fact that the bezel covers up some of the pixels of the display. In the Terminal window, type sudo nano /usr/share/X11/xorg.conf.d/10-monitor.conf to create a new monitor configuration file. In it, type or paste (CtrlShiftV) the following:

Section "Monitor"
    Identifier "DVI-I-1"
    # Warning: Aspect Ratio is not CVT standard.
    # 1800x1000 59.91 Hz (CVT) hsync: 62.19 kHz; pclk: 148.75 MHz
    Modeline "1800x1000_60.00"  148.75  1800 1912 2096 2392  1000 1003 1013 1038 -hsync +vsync

    # Warning: Aspect Ratio is not CVT standard.
    # 1904x1048 59.94 Hz (CVT) hsync: 65.15 kHz; pclk: 165.75 MHz
    Modeline "1904x1048_60.00"  165.75  1904 2024 2224 2544  1048 1051 1061 1087 -hsync +vsync

    # Warning: Aspect Ratio is not CVT standard.
    # 1864x1048 59.90 Hz (CVT) hsync: 65.11 kHz; pclk: 162.00 MHz
    Modeline "1864x1048_60.00"  162.00  1864 1984 2176 2488  1048 1051 1061 1087 -hsync +vsync

    Option "PreferredMode" "1904x1048_60.00"
EndSection

Again, CtrlO, Enter to save, then CtrlX to exit. See the Display, overscan, bezel section above for details and additional configuration options.

Now we can reboot, and the Pi Book Pro should be the primary display for the Raspberry Pi desktop. In the Terminal window, type sudo reboot. You can unplug your HDMI display, as well as your USB keyboard and USB mouse if you were using them.


I'm Vitorio, it's June 26, 2020, thanks for your time. Updated July 3, 2020 with firmware notes. Updated July 4, 2020 with display benchmarks. Updated July 7, 2020 with X11, HDMI, and trackpad notes. Updated July 9, 2020 with battery notes. Updated July 11, 2020 with Raspberry Pi Zero notes. Updated July 13, 2020 with 8GB Pi4 notes. Updated October 3, 2020 with installation instructions. Updated October 24, 2020 after testing an SSD installation.