Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Publicaciones sobre linux (publicaciones antiguas, página 22)

So I built a ... laptop?


There is a vin­tage com­put­er that has al­ways fas­ci­nat­ed me. It was one of the first prac­ti­cal porta­bles, the Tandy Mod­el 100.

It ran on a few AA bat­ter­ies and had around 20 hours of bat­tery life. Does your lap­top do that? No.

It's icon­ic in mul­ti­ple ways.

  • That wide, stumpy screen!
  • That pre-IB­M-PC key­board with the funky cur­sor keys which now looks like ... a al­most nor­mal 60%?

The Mod­el 100 was an in­stant hit with jour­nal­ist­s, who could use its in­te­grat­ed text ed­i­tor to write on the road and its mo­dem to send sto­ries to the pa­per.

On the oth­er hand that form fac­tor just does­n't ex­ist any­more. It did­n't even sur­vive long in fur­ther Tandy mod­el­s, be­cause new­er bet­ter screens had a more "nor­mal" as­pect ra­tio and the now-­s­tan­dard clamshell made more sense.

But since I loved it... why not try to build some­thing like it now, when we have much bet­ter tech­nol­o­gy? Well, I could­n't come up with any good rea­son­s.

Ex­cept that I had no com­po­nents that could work in it.

And that I had no idea how to de­sign such a thing.

And that I knew noth­ing about any­thing like elec­tron­ic­s, 3d mod­el­ing, etc.

So, I de­cid­ed to do it. In late 2021. And I have spent the last 16 months or so work­ing on it.

And the 2nd pro­to­type ac­tu­al­ly work­s!

If the de­tails of how it's done are in­ter­est­ing to you, I have good news. I am about to write down A LOT OF DE­TAIL­S.

Design Idea

Even though this is what some may call a cy­berdeck I did­n't want it to be cy­ber­punk, or steam­punk, or any sort of punk.

I want­ed to make it as smooth, pol­ished, com­mer­cial-look­ing as I could with­in the con­straints of my abil­i­ty (which are plen­ty).

I want­ed it to look as what may hap­pen if por­ta­ble screens nev­er aban­doned the 5:1 as­pect ra­tio and clamshells did­n't ex­ist.

Did I suc­ceed? Hell no. This is janky as hell be­cause it's a hand­made pro­to­type, but it shows the seeds of pos­si­bil­i­ty, of it­er­a­tion that may make it ... pos­si­ble.



So, what is the en­gine for the thing? When I was think­ing about how to make this func­tion­al, the ob­vi­ous thing was to use a SBC, such as a Rasp­ber­ry Pi.

OTOH I start­ed the project in the mid­dle of the pan­dem­ic short­age of SBC­s, which is still sort of on­go­ing, so those were hard to get, and ex­pen­sive.

So I turned to a lesser-­known brand which had the mag­i­cal thing: stock.

So, the SOC is a Radxa Ze­ro, a tiny SBC in the same form fac­tor as a Rasp­ber­ry Pi Ze­ro, ex­cept it's ridicu­lous­ly more pow­er­ful:

  • Quad core
  • 4GB of RAM
  • 32GB eMMC (no need for SD card)
  • USB 3.0
  • Mi­cro HD­MI port ca­pa­ble of 4k 60Hz

This is rough­ly 70% of the pow­er of a Rasp­ber­ry Pi 4, in a much small­er pack­age that us­es less than 5W of pow­er.


From the be­gin­ning I want­ed a me­chan­i­cal key­board. But I did not want to make my own be­cause that's a lot of work. So, I cre­at­ed soft­ware (more on that be­low) to make it pos­si­ble to just gut a cheap me­chan­i­cal thing and adapt the case so it would work.

Just be­cause I am not hard­core enough to live with­out cur­sor keys I de­cid­ed on a 65% board and the main cri­te­ria was "ships to my house and is cheap­est" so ... en­ter the "GANON 65%" cost­ing un­der 20 dol­lars.

It's ab­so­lute garbage. The sta­bi­liz­ers are hor­ri­ble, the switch­es are scratchy and in­con­sis­tent­ly clicky yet loud, and it was per­fect for the job be­cause all key­boards in 80s com­put­ers were pret­ty crap.

Oh, and it's one of those janky rain­bow fake-RGB back­lit things.

All of these cheap key­boards I've seen are one or two cir­cuit boards with through holes for screws. So I made the case with stands so they would snap in place and then be screwed in.


The ini­tial idea was to use a sim­ple USB power­bank, but that does­n't re­al­ly work, be­cause they have a few un­for­tu­nate habit­s:

  • They of­ten are too bulky
  • There is no sim­ple way to turn them on or off with­out un­plug­ging things

The last one is a killer. You can't use a lap­top that crash­es ev­ery time you plug it.

So, I got a "Rasp­ber­ry Pi UP­S" thing which is pow­ered by stan­dard 18650 bat­ter­ies. They are avail­able ev­ery­where and are very cheap, which is good.

In this im­age you can see the whole "pow­er sys­tem"

The green and white cylin­ders are the 18650 bat­ter­ies. They are in­sert­ed in a black case on top of a cir­cuit board. That is the "UP­S" sys­tem,

It can pow­er mul­ti­ple things via 2 US­B-A ports and a US­B-C port.

This par­tic­u­lar one has a but­ton to turn it on and off that is ex­posed in the back of the case as well as a mi­cro USB port to charge, which are ex­posed on the back of the case.

How­ev­er ... the but­ton on­ly turns off one of the pow­er out­put­s. If you look at the BOT­TOM of the "UP­S" you can see a pair of red and black ca­bles. Those are con­nect­ed to freak­ing pogo pins at the bot­tom of the UPS and go to a cou­ple of pins in the Radza Ze­ro to pow­er it.

This sucks a lit­tle be­cause I had to use that ad-hoc con­nec­tor in­stead of a sim­ple USB ca­ble and it means the "UP­S" has to be fair­ly sep­a­rat­ed from the bot­tom of the case (7m­m!), but hey, it work­s.

There are al­so a cou­ple oth­er wires, or­ange and blue. Those are con­nect­ed to a cheap volt­age-mea­sur­ing thing with LED­s. It costs about 50 cents and ... is not great.

OTOH I glued it to the IN­SIDE of the case and I think it looks awe­some.

It can stay turned on all the time be­cause it us­es so lit­tle pow­er it would have to be turned on for a month to drain the bat­tery.

The screen gets pow­er from a USB hub con­nect­ed to the Radxa Ze­ro, so I don't need to fig­ure out how to pow­er it from here.

UP­DATE: Turns out the screen was draw­ing too much pow­er, so when the sys­tem got load­ed or an­oth­er pe­riph­er­al was added it got un­sta­ble and things turned on and off as it tried to keep up. I just spliced a mi­cro-USB pow­er-on­ly ca­ble in­to the pow­er from the pogo pins and it works just fine, ex­cept for the ug­ly, ug­ly ca­bling.


The Radxa Ze­ro has a pret­ty lim­it­ed port se­lec­tion, be­ing that smal­l.

  • HD­MI which is con­nect­ed to the in­clud­ed screen.
  • 1 USB 2.0 OTG port (unused for now)
  • 1 USB 3.0 port

So I need­ed to make that sin­gle USB 3.0 port do more things. Which means I got a USB hub.

That's a alu­minum hub (be­cause why not) which has 4 port­s, 3 on the side, and 1 on the tip.

The port in the tip I ex­posed through a hole in the back of the case:

The ones on the right are used for:

  • Plug­ging the key­board
  • Pow­er­ing the screen
  • A USB sound card

The au­dio jacks are ex­posed on the side of the case:

Up­date: Be­cause of the changes in how the screen is pow­ered now there is an­oth­er free USB port which means I may be able to pro­vide an ex­posed Eth­er­net port!


This is a gener­ic 1920x480 screen. I think they are made for car sys­tem­s, so they are bright and fair­ly af­ford­able, you should have no prob­lem find­ing one in your favourite chi­nese sup­pli­er.

If you can af­ford a touch ver­sion maybe that would be nicer, but this one is not touch, be­cause I ex­pect the main in­ter­face to be key­board based.

This weird sort of screen may or may not work with your op­er­at­ing sys­tem, spe­cial­ly if you are us­ing a not-­so-well-­known SBC like the Radxa Ze­ro.

I had to build a cus­tom ker­nel from github and that on­ly on Ubun­tu YM­MV.

One un­ex­pect­ed is­sue was that the dis­play of­fers mini-HD­MI and the SBC has a mi­cro-HD­MI port.

Have you ev­er seen a mini-mi­cro HD­MI ca­ble? Me nei­ther (un­til re­cent­ly) and if you try to use reg­u­lar HD­MI ca­bles and adapters ... the end re­sult is some­thing im­pos­si­ble to fit in­to a rea­son­able case.

So­lu­tion: flat, mod­u­lar HD­MI ca­bles!

You get the con­nec­tors you wan­t, the ca­ble length you wan­t, you snap them to­geth­er and voilá! Smal­l, flex­i­ble ca­ble with the con­nec­tors you need!

Did I men­tion that these ca­bles took 3 months to ar­rive? And I could not move for­ward with the build un­til they did? Be­cause they did take 3 months to ar­rive. So get a bunch at once.


With all the com­po­nents above you can con­nect ev­ery­thing and have a work­ing ... thing. But you can't put it in your lap, so it's not a lap­top.

To com­bine them all you need a case. And in 2023, as a sim­ple per­son with no me­chan­i­cal tal­ents that means 3d print­ing.

BUT, I al­so lack any knowl­edge of 3D de­sign soft­ware.

BUT, I am a pro­gram­mer. So when I found I could write 3D mod­els as Python pro­grams I knew what to do: use Cad­Query

Then came a month­s-­long pe­ri­od of fig­ur­ing out how to cre­ate the case and how to print it and so on, but the end re­sult is two pieces:

The bot­tom piece is ba­si­cal­ly a box with pegs and holes where all the com­po­nents are mount­ed.

The top piece is where the screen goes.

Both of them have holes and stands so they can be screwed to each oth­er.

Be­cause they are too large, they are print­ed in halfs and then as­sem­bled.

With a larg­er 3D print­er I could print the base as a sol­id piece, how­ev­er, the top half needs to be split in half so the screen can slide in place.

All this is gen­er­at­ed by a cou­ple of Python scripts avail­able in my per­son­al code serv­er.

It's not all the way there yet, but the goal is to cre­ate a soft­ware pack­age that lets you (yes, you) set pa­ram­e­ters and make this work with your ran­dom col­lec­tion of mis­fit com­put­er hard­ware.

So, no screen? Print a lid, ex­pose the HD­MI port!

Have a Rasp­ber­ry Pi 4 in­stead of a Radxa Ze­ro? Sure, ad­just a few things and make it work.

Got a ran­dom key­board with 14 mount points in ran­dom places? Sure, mea­sure them and slap it in place.

But again: not there yet.


What can it do?

  • Run a web brows­er (tried Falkon)
  • Watch a Youtube video (or even two!)
  • Run a light­weight graph­i­cal desk­top
  • Run ter­mi­nal apps like a champ
  • Ed­it text and write code

So, it's good enough for light us­age, which is what I am aim­ing for.

Bat­tery life is be­tween 3 and 5 hours de­pend­ing on load.


This is run­ning Ubun­tu Fo­cal with a cus­tom ker­nel and a patched dwm

The ter­mi­nal of choice is alacrit­ty be­cause while it us­es a lot more RAM than st it runs a bazil­lion times faster.

To mux the ter­mi­nal (alacrit­ty has no tab­s) I use zel­lij an awe­some and friend­ly al­ter­na­tive to tmux/screen/etc.

To browse the web I would love to use qute­brows­er be­cause of its awe­some key­board sup­port that makes the mouse an af­ter­thought. Bu­u­u­ut it's re­al­ly re­al­ly bro­ken in this Ubun­tu, so Falkon it is.

Do not try to get fan­cy with pow­er man­age­men­t. Things like up­ow­erd im­me­di­ate­ly throt­tle the CPUs to 100MHz mak­ing it im­pos­si­ble to do any­thing.

Oth­er than that, just the usu­al Ubun­tu un­der­neath it al­l.

Problems (TODO)

  • Air­flow is in­ex­is­ten­t, so it over­heats
  • When it over­heats it starts turn­ing off and on the USB port which makes ev­ery­thing work bad­ly.
  • The key­board is too high from the table, so that needs tweak­ing.
  • Be­cause of the bat­tery so­lu­tion it's kin­da thick at the back
  • The pow­er but­ton is re­al­ly hard to click
  • The bat­tery gauge sucks
  • Needs no-s­lip pads
  • Has no sup­port for a point­er (other than plug­ging a mouse) so an in­te­grat­ed track­ball or thinkpad-style nub would be nice.


This blog has no com­ments, but feel free to dis­cuss it in this red­dit post

Pet Server (Feb 2023 update)

This is a longer-term up­date on the state of my home serv­er. You can read more about it in these 1 2 3 4 5 post­s.

Not much has changed in it, to be hon­est.

Hard­ware's the same as in the past, ev­ery­thing is work­ing fine. I have a good back­up of the serv­er us­ing what I de­scribed here and I have ac­tu­al­ly test­ed it. I can bring it back up in un­der half an hour, which is ok.

I am con­sid­er­ing get­ting a bet­ter USB hub, be­cause the one it's us­ing now is pret­ty slow for the stor­age. Not slow enough that I can no­tice but slow­er than it could be.

I may re­do the case be­cause I have learned a lot about mak­ing cas­es and can do a bet­ter one :-)

What could im­prove?

  • Some things are tricky to de­ploy in ARM
  • Some of my ad-hoc im­ple­men­ta­tions are clunky
  • I am not re­al­ly us­ing the whole me­dia serv­er im­ple­men­ta­tion all that much

How hap­py am I with it? Su­per hap­py. I use it ev­ery day, it's re­li­able and ba­si­cal­ly main­te­nance-free.

How much energy does my office server use?

Just ran in­to this video where the host ex­plains how he's us­ing a home serv­er and how he made it use un­der 23W, and the steps he took to make it qui­et and ef­fi­cien­t.

So, know­ing that our servers are not com­pa­ra­ble I want­ed to check how much pow­er my serv­er used.

Yes, my serv­er is pret­ty un­usu­al, you can read about it here: 1 2 3 4 5

First let's look at MAX­I­MUM pow­er draw for all com­po­nents.

  • Com­put­er (Radxa Ze­ro): 900 mA at 5V
  • HD­D: 500 mA at 5V (x2)
  • Net­work USB adapter: 500 mA at 5V

There is al­so a USB 3.0 hub there but the pow­er us­age is neg­li­gi­ble, prob­a­bly be­low 100 mA at 5V.

So, the max­i­mum pow­er us­age is ~2400 mA at 5V, which is about 12 watts.

When more or less idle, mea­sured with a USB thingie, the Radxa Ze­ro us­es ~200 mA and the Net­work adapter nev­er seems to go above 150 mA, so a low­er bound is maybe about ~1300 mA, or about 6 watts.

And then there's cost. My whole sys­tem (which does ev­ery­thing I want nice­ly AFAIC­S) costs un­der 100 dol­lars. And my pow­er bill from it is, if it runs full throt­tle ALL THE TIME (it does­n't) ... $87

Mind you, that's 87 ar­gen­tini­an pe­sos, or be­tween 50 and 25 USD cents, de­pend­ing on your ex­change rate.

I think I'll man­age.

Pet Server (September 2022 update)

This is a longer-term up­date on the state of my home serv­er. You can read more about it in these 1 2 3 4 post­s.

What's the hardware nowadays?

  • Radxa Ze­ro: 4-­core 4GB RAM, 32GB eMMC
  • 2 1TB HDD over USB
  • 100Mbps eth­er­net wired con­nec­tion to the router

And ... so far, it's more than enough. No strain :-)

What is it running?

Al­so back­ups via restic and oth­er ran­dom things. I have a sep­a­rate oc­to­print serv­er but I may move it here.

Really, it runs all that?

Yeah, and it works just fine. Of course this is most­ly be­cause I am the on­ly re­al user, but hey, it work­s.

Anything else you would want to run?

  • Maybe some sort of push no­ti­fi­ca­tion thingie so I can no­ti­fy my phone if there's a prob­lem
  • Maybe grafana? But don't care enough yet.

Was it worth it?

I could run all this on cloud­s, but the hard­ware I am us­ing would cost maybe 100 dol­lars, and month­ly fees for ser­vices will quick­ly reach that amount and sur­pass it. I am al­ready pay­ing for the band­width any­way.

OTOH I have spent maybe 50 or 60 hours set­ting this up and if I look at my hourly rates ... ick.

Anything weird?

I re­al­ly don't un­der­stand oth­er peo­ple's home­lab­s, they seem wild­ly over­pow­ered.

Contents © 2000-2023 Roberto Alsina