Asus L406 user experience

December 26, 2020
Bizarre keyboard failure.
November 18, 2020
Keyboard surgery.
November 6, 2020
October 28, 2020
Battery trials.
October 23, 2020
October 22, 2020
New kernel.
October 21, 2020
I guess it's a keeper.
October 19, 2020
Getting used to it.
October 17, 2020
Installed Devuan.
October 16, 2020
First impressions.
October 16, 2020
First impressions.

A little background. I ordered an Asus L406MA-WH02 (NB, there are older L406s with substantially different specs) for $350 on ebay to replace an Asus C201 Chromebook. The C201 is very special: $180, 1kg, 13hr+ battery (38Wh with Rockchip RK3288 ARM), 11.6" screen, but it's 5 years old and has a decently long list of minor problems.

The L406 has a 14" 1366x768 display, 1.3kg, 56Wh battery, Celeron N4000, 4GB, 64GB. So it's also light-ish and battery-ish but I've always bought 12" laptops since 2003, so it's an experiment.

It came in the mail yesterday. It's as light as expected, for its size. Not quite as thin, but I don't really care about the thinness. It is huge! I hate how huge it is. Really, it's just on the order of 2 inches wider than my old laptops, but man! I've been using it on my workbench, and the clutter kind of has these hollows for 12" laptops, but a 14" laptop...I have to move crap.

The screen is so gigantic that I feel like I have to turn my head to see the rest of it. The opposite corners live in different countries. I had the idea that people describe these 12" things as "cramped", and maybe I had always felt the same way and just never noticed without the contrast. No. I definitely prefer the smaller screen. I used to always scale up my terminal font until the terminal covered roughly the same proportion of the screen as on my last laptop, but on this one I think I might aim for the same absolute area (in inches) of the screen?

Another complaint about the screen is that it seems pretty washed out, the brights aren't very bright and the darks aren't very dark but I'm not sure that's not just an illusion. When I'm looking at any of my other laptops, their blacks aren't very dark, but they look dark in comparison to the new one?

The keyboard is fine. It has a very light feel, and I have no complaints about it. At first I thought it was bigger than my old keyboards, but I measured it and it seems to be almost identical key pitch (within 0.2mm). The keys on the edge are just pointlessly extended, but I guess that's fine. We might see how the wide keys age?

The trackpad is fine, though it's taking me a little while to get used to its approach of having two buttons delineated at the bottom. I'm thinking I'll disable that if I ever really set it up.

The battery is reported in /sys/class/power_supply/ as a 3-cell 5000mAh, apparently they really did put a 56Wh battery in the thing! Unfortunately the battery monitor on this device doesn't seem to support current_now so I will have to play some games to see how fast the various components deplete it.

Being back on x86 hardware is a neat trip. I put Linux Mint on a microSD card, but it wouldn't acknowledge it. I tried a USB stick, and it worked on the first try (just press ESC at the ASUS screen on start-up to see the list of boot options). Just dd the Mint (Xfce) ISO to the USB stick! Crazy! It has a complicated hack of different kinds of headers at the top of the stick, including a GPT table that indicates a smallish UEFI partitition (FAT32/VFAT) which contains the bootloader. It just works! Everything just works - the trackpad, the keyboard's "Fn" key, the wifi, the battery monitor, suspend-on-lid, everything.

I had no intention of using Linux Mint, I just wanted it as a test environment to gauge the size of the struggle before doing my traditional dance to get Debian installed. But even just using this "live image" Mint, I can see it is basically the same as Debian...I think I can rip out all this Xfce garbage and turn it into Devuan pretty easily. OTOH, if this is how easy it is to use UEFI with removable media, I can probably just use a stock Debian install image...

Anyways, I have a conundrum. I can't decide if I want to use this laptop. I'm not too worried about the waste of money, but I do want it to get used, so if I will be passing it on (even at a big loss), I want to be able to give it to the next guy with the stock Windows 10. So there's two things I want to do with this before I make any decisions that can't be undone.

First, I want to characterize the hardware, especially the battery consumption, to try to come up with an estimate of whether any of these 11.6" N4000 laptops might possibly satisfy, even though they all seem to have just 38Wh batteries. I can probably do that set of experiments with the Mint live image. If there's no way to get good battery life out of x86 hardware without this unusual super-sized battery in a 14" laptop, then that would really be an incentive to give the L406 a chance. OTOH, if the N4000 sips power so well that the 11.6" 38Wh laptops might satisfy then that is an indication I shouldn't even bother.

Second, I want to actually try using the thing and see how I feel about it after I've actually used it as a daily driver for a little while. That's a little complicated because I don't want to spend too much effort customizing it, and I also don't want to wipe the Windows 10. I might just install Debian on an 8GB microSD card. I think I can use USB to load the UEFI boot loader, and then instruct that to boot off of SD, then remove the USB stick after it's booted (I can't generally use the device with a USB stick stuck in it).

One concerning possibility is simply using the laptop even though I feel like it sucks. I have to weigh the three obvious kinds of suck off of eachother: flakey wifi (C201), excessive size (L406), poor battery life (12" x86 laptop). I may wind up using the C201 for many more years if that's the choice.

October 17, 2020
Installed Devuan.

Installed Devuan on a microSD card. Only hassle was manually coming up with the non-free firmware-atheros package to get wifi. It automatically installed GRUB on the existing internal Windows EFI partition, which I guess is fine. Just had to copy the vmlinuz and initrd on there so it could find them (the BIOS will not talk to microSD).

It is definitely heavier, but I'm not sure it matters. After playing with it for a couple hours, the C201 feels funny, so that's a promising sign I might just get used to it. But this display is just so pointlessly large.

And it fails one actual usability test -- I can't simply carry it around by the corner of the screen the way I did the chromebooks.

I feel very good about the battery life so far. Which might actually be a good omen for finding a 12" laptop based on N4000?

I am finally fighting a long-overdue battle with fontconfig, converting some well-loved custom pcf bitmap fonts to .otb. Using fontforge. I ran into a bunch of problems and anyways eventually figured out 'xterm' will still work with the old PCF font, so converting my VGA font to OpenType is put off for another day.

October 19, 2020
Getting used to it.

And the screen doesn't seem so bad now that I've been using it for a while. I even looked at my old laptop and was able to convince myself that the black there really isn't any darker. But the L406 still seems kind of washed out, low contrast. But I also used to think the viewing angles are really bad but now that I've used it a bit, it seems more forgiving than anything I've used before. I am always adjusting the hinge on my laptop, but this one less so.

I'm still not crazy about the screen's enormous size. The web browser looks better that large, but the terminal just looks kind of crappy. Surprisingly, I'm not crazy about bigger PDF viewer either. I still can't tell if the strain of looking from one side of it to the other is a big deal.

The keyboard feels fine. It makes kind of a lot of noise. The weight required to press the keys is very low. I feel like I make more typos, and have to type more intentionally on it. It also seems to repeat keys sometimes, but only organically, never in a controlled test (unlike the Samsung Chromebook). Overall, it's very similar to the Samsung Chromebook's keyboard, which I found very decent once I got used to it. So I'm not sure if it's really a flaw in the keyboard or just my sloppy typing (which has admittedly gotten sloppier over the years).

The speakers are fine. They're clear and crisp and loud enough. I tested them once and bass was simply missing, but now it's present...?? So I guess pretty good for laptop speakers? I covered them over with tape first thing after I took it out of the box so hopefully they won't ingest metal dust. Knock on wood.

Had a problem where my network connection went down twice in one day. The wifi appears to remain associated but the IP assignment goes away. Was worried it was a problem with the ath10k wifi driver (which is partially closed source), but it turns out to be a bug in dhclient.

October 21, 2020
I guess it's a keeper.

I've been using it for a couple days and I'm not revolted by it. I hate switching laptops more than I hate this laptop, I guess? I still want to do some experiments to measure power consumption, for which I will need to switch to my old laptop for a while, and I've been putting it off because it just seems like a hassle.

I mean, really, it's just a laptop. So long as it doesn't have a fan and I don't ever have to use it while it's plugged in, it's all fine.

I get caught up in these A/B preference sort of questions. Do I prefer narrow handlebars on my bike or wide ones? I don't care, but right when I switch bikes I'm always astonished at the width of the handlebars.

I've known I prefer Dvorak to QWERTY since like 1994, but how do I feel about Colemak? I switched to Colemak about 4 years ago, and I still couldn't tell if I prefered it. So I switched back to Dvorak. I switched back and forth several more times, trying to tell which I prefer. It takes about a week of agony to switch, but then it's just a keyboard, I don't like it or dislike it. I still don't know, but I got tired of trying to figure it out so I stopped. It's Dvorak today. *shrug* (If you're considering one, chose Colemak, it's much easier to learn, coming from QWERTY.)

So I'm still gonna try to estimate whether a 12" 38Wh N4000 PC laptop (like the Asus L203) would check the boxes, but I'm not planning on ditching this one for it.

At any rate, my friend told me it's easy to re-install Windows 10 if it comes to it -- supposedly the activation key is encoded in the BIOS and I don't need to worry about it? -- so I went ahead and wiped the internal SSD.

The only concrete downside of this laptop is that it's so big I am afraid to throw it around the way I'm used to. I don't particularly notice being more careful with it, but I really am. It's got a very rigid frame. We'll see how it holds up. Maybe in a year I'll be grabbing it by the screen to fling it across the room.

October 22, 2020
New kernel.

I never use the stock Debian kernel, even though I guess I haven't really had problems with it? I disapprove of its dependency on initrd, though I just looked in a little depth at it and it is straightforward and sensible enough (and update-initramfs is fairly trouble-free). I don't like not having a known good but not horribly bloated linux-.../.config file to modify whenever I need to add something (the bloat means slow to build). And I don't like being tied to someone else's idea of when I should update.

Anyways, I wanted WireGuard and rather than track down a module backported to 4.19, I figured I would upgrade the whole thing to 5.8. I suppose I could have just installed Debian's wireguard-dkms package and been done with it, but, you see, I didn't want to. I had to compile my own kernel back in like 1995 before I could first use Linux, because I had to modify the PCI driver not to panic on my VLB/PCI hybrid motherboard that had a bad BIOS. I'm such an old man! I just figure building your own kernel is one of the steps.

So I got the 5.8.16 kernel source and man there are a lot of config options these days! And a lot of the defaults are really painful, like -g! And then there's a ton of stuff I have just never heard of before. So just going through all the menus enabling what I thought I needed and disabling a ton of cruft took hours. After I was done, it still didn't want to boot, though it did work if I used an initrd (hah!).

After making sure all of the stuff needed to access mmc (sdhci, ahci, whatever) was built into the kernel (not dependent upon modules), it still didn't work! I could boot with init=/bin/sh and could access /dev/mmcblk0p2 and so on. From the kernel console messages, it even looked like it was booting (loading udevd etc), but it didn't show any of the messages I expected from userland.

Long story short, you need to mknod /dev/console c 5 1 in the root filesystem (before mounting devtmpfs). There's no reason sysvinit couldn't give an error message when it fails to open /dev/console (it has a valid stdout and stderr at the time), but it doesn't, so this is just something to remember. FWIW, the initrd has a default /dev/console. Sigh.

Anyways, an aside about progress. On my 486/DX4 100MHz with 4MB RAM, it took about half an hour to compile a Linux 1.2.13 kernel. Today, my quad-core AMD Ryzen 3 2200G 3.5GHz with 16GB RAM takes about 12 minutes to compile a 5.8.16 kernel. There are real reasons for that...there are more device drivers, more features, more framework. And the compiler isn't nearly as simple as gcc 2.6, either. And some of it's just my fault, not as studiously pruning the .config anymore. At some points in recent history, I've owned machines that can compile their own kernel in only 7 minutes. But still, this is pathetic.

I think it's the same dependencies-enabled problem as everything else these days. It's so easy to use a pre-existing library for something like CRC computation, so people easily throw a dependency on that in any old driver. But then that pulls in some overwrought crypto framework and it detects that it can have accelerated crypto on my processor so it wants to pull in a ton of modules, and there are so many crypto components and different users of them that it's hard to know which ones can be safely disabled. Not really that big a deal in some sense but we easily wind up with 1MB of compiled code just for what used to be a 15-line static unsigned int crc32(unsigned char *buf, int len) { ... } function that got copy-pasted haphazardly.

And make menuconfig is showing its age. There's a ton of things it could do to be more usable, especially in all the manual navigation needed to make use of the '/' search function.

On another note, since it's an x86 machine it's a no-brainer to cross-compile my kernels on my PC instead of doing that locally on the laptop.

Just once, for grins, I built the kernel natively on the L406, and it took a full hour! An hour! I'm impressed by the incredibly low performance of this Celeron N4000. I'm almost tempted to try to come up with an apples-to-apples test to benchmark it versus the RockChip.

October 23, 2020

I built a new 5.8.16 kernel for my PC as well (can you believe it worked on the first try???) so now I'm ready for wireguard. It's pretty easy to set up, a real minimum number of things you can configure. Anyways, I thought I'd take some real informal benchmarks. Time to transfer a 93MB file over my wifi using wget:

bare wlan0 21.4s 21.5s 21.0s (10% CPU)
openvpn tun0 25.5s 25.0s 25.5s (33% CPU)
wireguard wg0 22.6s 22.9s 22.9s (18% CPU)

The CPU usage estimate came from looking at the reported idle time in top. So, openvpn was already plenty good enough really but wireguard is obviously a little faster and also a little less CPU usage. I doubt I will notice the difference except maybe less state negotiation around re-connects...but really, openvpn has been doing a good job of that as well (since I got it all tuned in).

It was pretty nice setting up wireguard. I only had to go further than the quickstart guide for one tiny detail, and everything just worked on the first try, no false starts or backing up to try again.

... That was strange. I rebooted the laptop and it came up unable to mount /dev/mmcblk0p2 (root). It only saw mmcblk0boot0 mmcblk0boot1 mmcblk0rpmb (I don't know what those are all about), but neither of the GPT partitions. I simply rebooted again without changing anything and it "just worked." So there's some sort of race case or uninit memory that makes it unable to decode the GPT table??

October 28, 2020
Battery trials.

I have been using the old C201 again to do some battery testing, and man! It is really really light, like an empty box! That's the thing I'll miss the most but I've found that in practice it doesn't seem to make a difference when I'm using it. The keyboard is actually not an improvement, but it's not bad either. It is weird to feel a keyboard with polished keys, and know that the new laptop will have them soon too. The display is so small, the text is so petite and neat and intricate. Better? Worse? It's *very* different, I can see why I gagged on the new laptop so hard.

I do feel like the white text on this old laptop is a lot brighter, it's like the same number of lumens from a big letter gets crammed into these tiny letters. Increasing the backlight brightness on the new laptop just makes the bad contrast more obvious.

In just a few minutes of poking at it while sitting in the basement (about 20ft from the wifi AP, but not remotely line-of-sight), I subjectively noticed it dropping some packets and was able to confirm it with ping. The wifi situation on the old laptop is definitely omnipresent even as I can kind of mostly ignore it.

Anyways, the battery testing. I looked in /sys/class/power_supply/[battery]/energy_now which seems to be micro-watt-hours (uWh) remaining. On the old chromebook, it also provides charge_now and current_now, which leads me to believe its "coulomb counter" is sophisticated. I'm pretty sure the one in the L406 is a dumb heuristic based on voltage or something stupid like that. After it's fully charged, for example, it takes almost half an hour of being used for it to acknowledge energy_now has decreased at all. If you ramp up power consumption by pegging the CPU then the L406 persistently under-reports current consumption for a while after that. Just a lot of signs it is a crap heuristic. Not sure about the C201.

I have had no reason to believe its overall capacity estimate is off, but I also have only gotten below about 50% once I think? Which is the same feeling I had with the C201 the first couple weeks I used it.

measureold C201new L406
typical consumption~2.6W~2.6W (2.3W-2.8W)
hypothetical current lifetime12.4hr21.6hr
vendor claimed lifetime"up to 13hr""up to 14hr"
idle, normal backlight2.3W2.3W
idle, zero backlight1.6W1.6W
idle, 100% backlight3.2W3.8W
kernel build power8.7W6.8W
typical CPU temp32C32C
kernel build temp60C60C
kernel build time14min62min

They are surprisingly comparable machines. I know the C201 really does get 12 hour battery life, or better. The 21 hour figure for L406 seems reasonable. I estimated 18 hour when I first started using it, but that was before I installed the new kernel and some other changes, and back then it was typically drawing around 3.0W. I wonder if that drop in consumption was real, and if so what caused it -- a smarter kernel, smarter drivers, more specific drivers, leaving off a driver that did nothing but waste energy?

The kernel compile time is hard for me to gauge. It's not a fair comparison -- the newer kernel is probably much larger, and the newer gcc might be slower, and my L406 configuration included a bunch of useless garbage (the C201 configuration had been pruned down somewhat by Google or Asus already). But it is tempting to think that the Intel tax is being paid in performance, not in battery life or heat. That's incredible, and exactly the trade-off that would make me grudgingly accept Intel!

Anyways, the moral of the story is that the Intel N4000 seems to have "low enough" power consumption! One of these "up to 10 hour" advertised 11.6" machines with an N4000 and 38Wh battery really would have done me alright -- I could expect one of them to have similar battery life to the C201. I didn't need to switch to 14", and it is massive overkill.

It really is pretty impressive that using Linux the way I do literally gives half again more battery life than Windows? I think a lot of it is because I run my browser remotely. I don't get the impression that the "typical" Linux with systemd and gnome or whatever is particularly more efficient than Windows, or wouldn't the Pinebook Pro laptop get more than about a 6-8 hour reported battery life?

My wife's work Dell Latitude only turns the fan on high when it's working hard, and its fan is *always* on high. Windows. I snooped its network traffic and it's phoning home even when it's "sleeping." It's astounding just how much less work my computer does.

Oh, and! It makes a noise. It's from the logic board area, not the speakers. It's very quiet. A high-pitched whine or white noise with frequent clicks. More than one click a second but in no particular pattern. It's rarely absolutely quiet in here but when it is, I can hear it without even putting my head on the laptop. I wish it didn't make the noise but it's not obnoxious. Functionally, it's silent. It reminds me of the keyboard-scan whine you can hear on old HP48 calculators.

And one awesome thing about the L406 -- the trackpad's two-finger scroll is flawless. It works every time! But the trackpad is a little large so I need to set up some sort of palm rejection. And I'm still torn about having the three buttons based on where you click the hardware button.

I figured out a good apples-to-apples test that involves real life performance (make -j), with the same gcc 10.2 and the same codebase. Of course, one is building for ARM-32 and the other is building for x86-64, so it's not really the same code being generated. In my mind, that just makes the test more realistic, because I'll never build ARM code on the x86, and vice versa. For this codebase, best of 3, wallclock time, the L406 takes 85 seconds while the old C201 takes 226 seconds. So the N4000 (2017, 14nm, 4MB cache) is about 2.6x as fast as the RK3288 (2014, 28nm, 1MB cache) for roughly the same power consumption, which is what you would hope from a newer chip. Quite an accomplishment for Intel!

For grins, the same chore on my hated Lenovo U150 (core 2 duo U7300, 2009, 45nm): 147 seconds (138 seconds with gcc 4.4) -- after 7 years of progress, Intel can even outperform that without a fan, finally! On my PC (AMD Ryzen 3 2200, 2018, 14nm): 21 seconds (18 seconds with gcc 8.4). 21 seconds! That's why I do all my computing on the other end of a wifi link! The only thing heavier than make -j is a modern web browser rendering social media.

Doing these tests, I feel weird normalizing all these machines to gcc 10.2, because the changes to compiler technology happened in the same actual time-line as these old computers. But I have a suspicion gcc might have recently went downhill (seems to be confirmed). It is interesting to consider how much the actual experience improved when the slowing of software is taken into account (it's still significant).

November 6, 2020

I've come to take these speakers for granted so I wanted to record how pleased I am with them. I guess they're awful? But they're a huge improvement over my C201 speakers and I hereby praise them as tolerably usable.

The C201 speakers of course were distorted from dust ingress, and also they were distorted from the beginning by bad design -- 100% volume would cause them to clip. Bass was completely inaudible. They were generally too quiet for outdoor use. The number one thing they made was heat. I'm pretty sure that there's a certain frequency where their internal resonances turn them into a dead short, making only heat and no sound. I've certainly observed them to be making heat without sound, at any rate. Even before they were damaged.

The Samsung Chromebook speakers were just the same, as well. More heat than sound!

If this battery monitor is to be believed, the speakers are drawing 1.5W but their warmth is right at the limit of my perception. The highs are clear (as you'd expect), voice is discernable outside when cars go by (but a big truck still drowns it out). Percussion sounds complete, both the snap and the thud. Bass is, well, you can perceive the bass line if you know the song already.

In short, the "Asus SonicMaster" speakers they put in this L406 are basically the same as run of the mill smartphone speakers. Finally!

It is pretty weird to be 2020 and ranking laptop speakers by how much heat they make. I honestly did not see that one coming until I had 8 years of laptops with hot speakers. The C201 would actually cause me to pull my hand away in pain on occasion.

Wonder if they'll last since I taped over them before any ingress.

November 18, 2020
Keyboard surgery.

I'm still not 100% sold on this keyboard -- it's a little too easy to repeat keys. I am getting used to the lightness, though, and I can now pretty reliably type "adf" (well, "aeu" in Dvorak) without hitting the "s" ("o") in the middle. But the sound of it is really irritating. Especially the spacebar, which squeaks! In fact, I think the squeaking of the spacebar may be the only irritating feature, but man is it irritating!

I was pretty nervous to do surgery on a brand new keyboard, especially since I've never taken apart a laptop spacebar before. But I didn't feel like I had a choice. So I watched a video on youtube which suggested peeling the spacebar up from the side. That worked. The actual scissor jacks on the spacebar should be opened from the top of the key first (the top part snaps, while the bottom part slides on and can be broken by snapping).

Anyways, I got it all off in one piece, and successfully re-seated the scissor that had come undone, and found that it has two long metal stabilizer bars which connect the plastic keycap to the metal keyboard base. The hinge on the base side is metal-on-metal, which is probably the only metal-on-metal hinge in the keyboard (excepting like shift keys), so I figured that's probably the source of the unique noise.

The synthetic lube I came up with was bicycle grease, "synthetic with teflon." I put it on a fine tipped poker and got it just on the metal-on-metal hinge. Put the thing back together and it seems better. We'll see how I feel about it after it's had time to settle in, and after I've heard the keyboard in a few more sonic environments. I really hope I don't do this again.

December 26, 2020
Bizarre keyboard failure.

For a work project, I have to type "VT" a bunch of times, and I discover that if you hold down RSHIFT and V then it is unable to detect a press of T. Well, the keycaps say .> and K because I use Dvorak, but you know what I mean. TV has the same problem, and holding T and V makes RSHIFT undetectable as well. And once I started questing for it, I right away found out that WN has the same flaw.

I imagine that if I sat down trying to design a keyboard scan matrix that has this flaw, it wouldn't be too hard to come up with. I should be able to forgive them. But it's lame that it's a real flaw I can't work around, and not dismissable as my fault for being a sloppy typist (it is very common to press the next key before releasing the previous key). It is surely possible to design a matrix that can detect any three simultaneous keypresses, but maybe it's harder than I want to acknowledge. But there's really no excuse when it comes to mode-shift keys like shift/ctrl/alt, they should all universally combine with any other keys without losing anything, without even losing redundancy.

Anyways this just reminds me that I want to bring my debouncing X keyboard driver onto this laptop, and I also need to figure out why sometimes palming the touchpad makes everything bad happen in the web browser while filling out a form. Do I somehow trigger a click event (it would be right mouse button)?

I think these input flaws are my only complaint about this laptop. I'd even completely forgotten that I used to hate the sound of the keyboard! Though I did just find that its wifi isn't quite wonderful in the greenhouse, but it is better than the C201 it replaced... Definitely this side of "usable."

I guess there is one thing... the wifi dies every now and then. Acts like it's associated but won't send packets. Usually assigning it to a bogus ESSID and asking it to re-associate is sufficient, but a couple times I've had to run the suspend script and re-wake it. It's roughly once a week, so it's pretty dismissable, but it surely illustrates that something isn't quite right.

Uptime is 64 days, which is nothing, but shows I haven't rebooted it since I set it up.