Dave's Raspberry Pi Zero Luggable

A cardboard "laptop" or "luggable" computer featuring a 7-inch LCD display and a Raspberry Pi Zero
Created: 2021-10-17 Updated: 2022-01-25 (Added txt file for LCD config snippet, 64-bit zero 2)

a front view of my raspberry pi zero-powered cardboard laptop luggable computer running htop

This was a really fun evening project. I’ve had the 7-inch LCD display since 2019 (two years at the time of this writing). The Raspberry Pi Zero is brand new. I went from 0 Pis in the house to 4 (8 if you count Raspberry Pi Pico microcontrollers!) in the span of the last two months.

The Zero is an incredible little single-board computer. It can run the full graphical Raspberry Pi OS, but it’s best for CLI computing, which I often prefer anyway.

Update: I’m now running the Zero 2 with a 64-bit build of the OS. The Zero 2 is a drop-in replacement for the original Zero. See the 64-bit update section below for the details.

The Goal

My desire for years and years has been a portable Linux computer with a proper mechanical keyboard.

(You can do a lot with an Android phone and a keyboard plugged into an OTG USB cable these days. In fact, in many ways, it’s a superior setup. But it’s just not the same as having a "real" Linux install. Especially if your hobbies involve experimenting with programming languages.)

Netbook computers are awesome, but they’re always hampered by tiny keyboards that I have a really hard time touch-typing on. Especially symbols used frequently in software development: ~!@#$%^&*()_+{}|<>-=.

I’ve made some cartoonish wood-and-cardboard contraptions before with various small computers (a fanless Celeron SBC, the Kickstarter C.H.I.P., etc.). But they’ve always turned out to be heavy, unwieldy, or fragile (or all of the above).

Hot Glue, Wood, and Cardboard

The big breakthrough this time was to hot glue my keyboard directly to a wood base. This wasn’t so much a cognitive discovery as it was an act of bravery.

Previous portable computer attempts have used a lot of zip ties to secure components and manage cables. This time, I used sandwiched layers of cardboard to hold the screen. I could have done the same for the Pi itself, but when the cables outweigh the computer, it gets a little silly to put too much work into bolting it down.

a side view of my raspberry pi zero-powered cardboard laptop luggable computer showing how it is constructed

At every step, I opted for sheer, brute simplicity. Behind the keyboard is a single piece of cardboard that serves to elevate and hold the screen, as a lid for the "compute box" in the back, and as the carry handle. Behind that is a cardboard box cut diagonally.

back view of my raspberry pi zero-powered cardboard laptop luggable computer showing the incredibly simple guts of the CPU box behind the screen

The "compute box" was originally completely filled with USB and HDMI cables and adapters. I’m not exaggerating when I say that the cables outweighed the entire rest of the computer excluding the keyboard!

What you see here is two week’s worth of trial-and-error with ordering cables on the Internet until I got the correct ones.

Supplies

I thought it might be helpful for other new Raspberry Pi Zero owners to have my parts list for similar endeavors:

  • RPI Zero single-board computer (SBC)

  • Thin sheet of wood (1/4" or 1cm or thicker should be fine) - mine was a re-purposed sheet I glued and planed in junior high school as a clipboard project (I have since discovered another unrelated use for the clipboard hardware, so that’s a second bonus for me!)

  • Quality cardboard (mine came from stiff single-wall boxes used to ship food)

  • Hot glue and gun

  • Utility knife

  • Small HDMI LCD display (I bought a "7.0 inch 1024*600 HDMI-Compatible TFT LCD Module Display Monitor Screen with USB Capacitive Touch Panel for Raspberry Pi" in 2019)

  • 60% mechanical keyboard (mine’s the 2018 Anne Pro)

  • Female USB A to 2 male USB Micro Y-splitter cable (for powering Pi and LCD)

  • USB wall charger (for power)

  • Long braided male USB A male USB micro cable (for power)

  • Female USB A to male USB Micro OTG adapter cable (cable because an single solid molded adapter won’t leave room to access the power USB connection on the RPI Zero)

  • Short braided male USB A to male USB Micro (for keyboard connection to OSB adapter - depends on your keyboard connection)

  • Short HDMI to HDMI mini cable (for the Pi to LCD connection)

This setup is incredibly nice and neat now and I probably don’t need the box in the back anymore. However, I’m going to keep it there because I might replace the Zero with a Pi model 4 or 3 and I’m also into the Pi Pico microcontrollers right now and I could probably throw one of those back there with a breadboard and have a whole development setup in this portable form!

Operating System Setup

I used the official Raspberry Pi Imager software to write the 400+Mb "Raspberry Pi OS Lite" to an SD card (using an ancient USB SD card reader device - I’ve also used the SD card reader built into one of my laptops for this purpose).

The LCD display was the biggest challenge: getting the Pi OS /boot/config.txt file with the exactly right HDMI settings started off with a lot of forum surfing and rebooting. But then I went to look up the exact specs of my display from my Aliexpress order history (which I should have done from the beginning) and not only was the screen still for sale, but the seller had instructions for getting it to work with the Pi (link in the parts list above)! They worked perfectly.

So here are the magic config.txt settings for the Surenoo SUR1024600H070A 7 inch LCD display:

max_usb_current=1
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_timings=1024 0 168 32 120 600 0 15 6 14 0 0 0 60 0 51200000 3
hdmi_drive=1

Because you may be on a limited system while editing config.txt, I’ve also got the above snippet available as a .txt file for easy cURL/wget fetching: surenoo.txt.

Note
It’s vital to remember that when you’re actually running the Pi OS off of the SD card, you’ll find config.txt in the /boot/ directory. However, when you’re viewing the SD card on another computer, the contents of boot are in the first partition (the boot partitition) and the unmounted /boot/ directory will appear empty in the second partition.
Note
My other problem was that the keyboard wasn’t being detected immediately after boot. I had to disconnect and reconnect the USB OTG connection before the keyboard would work. I was about to test another keyboard, but then the problem went away on its own. I don’t know why it self-healed or if the problem will come back…​but I’d rather not have to pry the hot glued keyboard from the wooden base unless I absolutely have to!

64-bit update!

I hadn’t really been using this machine for much since I got it working. I love the size and the keyboard, but I’m sticking with the eeePC for my ongoing assembly language forth implementation port. The natural thing to do was press it into service as a semi-dedicated machine for doing distraction-free Zig programming. But since the Zig compiler only has official builds for 64-bit aarch (ARM) and the Zero is 32-bit, that was something I kept putting off.

Well, my subscription to MagPi - the Raspberry Pi magazine blessed me with a free Raspberry Pi Zero 2, which surprised me in the mail a month or so ago. The Zero 2 is 64-bit and higher performance. Clearly the solution was at hand!

I got a pack of PNY 64Gb microSD (100Mb/s, Class 10, U3, V30, A1) cards and a Sabrent USB SD card reader because, wow, everything is so cheap and handy compared to the olde days of yore.

There are a couple hurdles. First, the Raspberry Pi OS Lite image is a little buried on the official website (in fact, outside links like mine are the easiest way to find it), but it does exist. Secondly, you may need to have a custom screen configuration like I do. Thirdly, the PI Zero 2 doesn’t have a device tree blob file as part of the OS image yet. Thankfully, the Pi 3 B image works as-is. So it’s just a matter of copying the .dtb fle.

  • Raspberry Pi OS Lite ARM 64 (aarch) images

  • See my instructions above for custom HDMI device setup

  • Mount /dev/sdXX (the FAT 32-formatted EFI boot partition on the SD card) and cp bcm2710-rpi-3-b.dtb bcm2710-rpi-zero-2.dtb.

I had also forgotten that the mount that comes with Alpine Linux seems to require a specific type (rather than auto-detecting, which is what I’m used to), so in this instance, my mount command for the EFI boot partition (for the config.txt and .dtb file stuff) looked like so:

doas mount -t vfat /dev/sdd1 /mnt/foo

(If you occasionally dip your toes in the BSD water, like I do, you may recognize doas, which performs the same function as sudo.)

Then it was just a matter of installing Vim and Lynx and then downloading the official aarch build of the Zig compiler, untarring the archive, adding the executable location to my path and…​compiling a Hello World in Zig for the first time on my little cardboard computer! Very satisfying. :-)

Actually, I’d love to run Alpine Linux on my Pi Zero 2, like I do on the eeePC. I already feel a little stretched thin with Slackware, Alpine, CentOS (at work), and now Pi OS (really Debian). But I’m also savvy enough to know when to go with the flow and when to fight the current. I’m more than happy just to have this machine working the way it is.

Conclusion

It’s easy to take pocket computers like cell phones for granted (and quite frankly, hard to really appreciate them the way they tend to be locked down into "consumption devices"). But when you’re actually looking at the exposed components, it’s difficult to not be in awe at how small and cheap and capable computers like the Raspberry Pi can be.

My setup is both extravagant (the keyboard and screen are the real expenses in this build) and homespun (hot glue and cardboard!). There’s something magical and joyful about this combination.

We live in incredible times.

Happy computing!