Arch Linux on a ASUS Zenbook UX305

July 27, 2015

I bought an ASUS Zenbook UX305. For $700 you get a laptop comparable to a MacBook Air — even thinner, in fact. Pause for a moment and ponder over how cheap that is: it's about the price of an iPhone!

The catch of course is that it comes with Windows and crapware — which is fixable by installing Linux — and that the build quality is surely a bit worse than Apple's (though so far it is surprisingly close!). Here are some notes on it, mostly around setting up Linux. The short story is that almost everything works great, most of it out of the box.

Hardware

First some brief notes on the hardware. Once you've decided to go with a Zenbook you'll find it extremely difficult to understand the differences betweeen all the various models. Even on the ASUS site there's mostly marketing copy with specs, and then they have some sort of page that lists tens of very-similar-looking laptops with an "add to compare" checkbox that appears to do nothing.

But as best I can figure out, the UX303 is the older model while the UX305 is this year's one. There are many variants, such as with touch screens (which I don't want); there's the newer UX305LA (with a Core i5 processor) and the UX305FA (with a Core M processor). There may be hidpi ("QHD") variants, which I considered buying until I realized it'd just be more money to have less battery life. I ended up settling on the UX305FA, which appears the be the one commonly reviewed now. Its screen is about 160 DPI, which is roughly 1.7x "normal" DPI — high enough that I have to squint to see the pixels.

There's one final variant of models — UX305FA-ASM1 vs UX305FA-USM1. The latter appears to be the "Windows Signature" edition, which is where you pay more to not have as much crapware installed. I totally understand the business models and deals that would go into such a thing but it is still hilariously sad. Since I am removing Windows anyway I went with the cheaper one.

I bought mine from Amazon; the first one I got had a slightly-busted backspace key (you had to press it a bit harder to make it work) so I contacted Amazon. Within minutes they were mailing me a new laptop and sending someone to pick up the broken one, no questions asked. Amazon's customer service in these areas is so great they really have earned my business.

Windows

Clicking around in Windows 8 I mostly felt bad for Microsoft. They're clearly trying hard to make something nice (though I found it super confusing) but there's so much bad software on these things out of the box. Right after installing I got alarming messages about some awful antivirus wanting me to register. All the apps from the manufacturer are upscaled in a really gross way (I assume at 1.7x, matching the display DPI) where the fonts are all fuzzy. It's unclear how much of the bad stuff is due to business deals and how much is actually necessary to make the device work. For example scrolling in Internet Explorer seemed occasionally janky which could either be bad IE code or it could be a bad trackpad (i.e. non-Microsoft) driver, but ultimately it sucks either way.

One last Windows 8 note. I was surprised to see it auto-opted me in to "Do Not Track" — I thought MS had backed off from that? The way it works is that during setup there was a step which was like "do you want to set everything else up automatically?" with a list of innocuous things it would do like set up hardware, and in the middle it had Do Not Track in there. I also played with their Netflix app a bit and then wondered why there was no YouTube app and then remembered there's also some history there too. Tech company drama is so amusing and sad. (Re-disclaimer: though I work for Google, it is as a random engineer so I have no real insights into what's going on behind either of these issues.)

Windows Recovery

The first step in the Linux setup story is to grab a Windows recovery image. At some point I might want to give this laptop away and it'd be nice to not inflict Linux on the recipient. Unfortunately, the ASUS recovery tool ("Backtracker") only wants to write the recovery image to a USB stick. After letting it do that, I wondered — how to back that up somewhere reasonable? I can copy the files but what about the magic that makes it bootable? The obvious thing is to just image the whole thing, but this USB drive is 32gb; it'd be nice to just back up the data from it. (Edit: I later ended up using the plain Windows recovery image tool, not the ASUS one. Hopefully that one won't include crapware.)

After a lot of fretting about UEFI booting and GPT partition tables (all of this stuff is new since I last learned it all, and I don't really understand how it worked in the MBR days either) I finally realized that the USB image is a boring-old MBR one. (I have no idea how this works given the laptop appears to be UEFI booting; I have so little of an idea I don't even know if I'm using these terms right.) This means you can back it up by:

  1. Grab the MBR: dd if=/dev/sdX of=mbr size=512 count=1
  2. Copy the files off of the vfat partition.

To recreate the USB stick, then, you do the reverse process:

  1. Write the MBR: dd if=mbr of=/dev/sdX size=512 count=1
  2. Recreate the file system: mkfs.vfat /dev/sdX1
  3. Copy the files back on to the vfat partition.

I verified this worked (at least up to the point of showing the ASUS restore UI) once, by wiping the USB disk and doing the above steps. I'm a little worried that the MBR includes the partition table which means a differently-sized USB stick won't be usable, but I hope if that comes up I could figure it out.

Booting from USB

In Windows, hold shift when you pick restart from the power off menu and it takes you to some recovery-related screen, which lets you enable getting into the BIOS settings, which lets you tweak the secure boot flag. From there I found that holding Esc while the ASUS logo was up would let me choose which device to boot from.

Linux install

I decided to go with Arch. If you told me two years ago you were putting Arch on a laptop I'd have said you were crazy but now I think it is just great. It's so nice to be able to just pacman -S go and know I'm getting a current version of the Go compiler with the links to source in the godoc browser working, not some old supposedly-stable version.

As with my last two install experiences, just following the Arch instructions was fine. (Note: follow the "beginner" instructions, not the plain install instructions.)

New to me was GPT partitions and UEFI booting. Apparently you no longer use fdisk, but instead parted. I just left the existing EFI partiton in place and deleted the others to make a single 50gb partition for Linux. (So / is /dev/sda2, after the EFI partition.)

Two other tweaks from their guide: I used a swapfile instead of a swap partition, and I'll use the remaining space for an encrypted home directory. Also, when running genfstab I left out the -U flag as I find all that UUID business annoying, but this detail is probably one you don't need to worry about.

Minor Arch notes

I wrote an earlier post about Arch commands for Debian users but I have two tips to emphasize:

  1. The Arch wiki is amazing and extensive, so for pretty much any issue you can't go wrong by adding "arch" to your search query.
  2. When you run a random command like netstat and find you don't have it installed, I learned you can run pkgfile netstat to print out the package name that provides it. You'll of course need to install pkgfile itself:
    pacman -S pkgfile
    

X setup

You need the Intel X drivers and the Synaptics touchpad support:

pacman -S xf86-video-intel xf86-input-synaptics

As far as I understand it there are two versions of the Intel graphics drivers. UXA is the old but working one (described as "mature" in the man 4 intel manpage) and SNA is new default. From looking at their git repo it appears that SNA is still under active development.

With SNA (the default setting), when I quit X my text consoles would be garbled. I tried switching to UXA and that fixes that problem but it is otherwise worse: it seems much slower and flickery, and alt-tabbing out of Chrome is laggy. I "fixed" this by just installing GDM (the graphical login manager), so that I don't use text consoles. I think this also enabled screen locking.

Desktop environment

In the first edition of this post I had a lot more details about configuring the trackpad, adjusting the audio settings (ALSA defaulted to the HDMI output rather than the speakers) and so on. But really I concluded there are just a lot of things you need to tweak to get a modern computer working (e.g. selecting wifi networks, adjusting the volume when you hit the volume keys) and I don't really want to fight it all.

So I gave up and installed GNOME 3, which I find pretty tasteful as far as desktop environments go.

pacman -S gnome gnome-tweak-tool

Then in ~/.xinitrc:

exec gnome-session

You'll want to run gnome-tweak-tool to make caps lock into a control key and to change the desktop scale factor due to the high screen DPI. I found about 1.25x made things comfortable. Don't go too crazy with the tweaks, GNOME isn't really made to be that configurable.

Fonts

Install the Infinality bundle as well as their recommended fonts (ibfonts-meta-base).

Aside from the single tweak to desktop scale mentioned above, I found all of the fonts (including the terminal font) look great without changing any settings at all, and I am pretty picky about this sort of thing. Maybe I'm getting soft in my old age.

Wifi

Since I've given up and gone with GNOME, I also installed NetworkManager which integrates well with it. Follow the instructions on the Arch wiki to enable it and you get a clicky menu for setting things up.

Chrome

As a former Chrome developer, I know that Google Chrome gets all the development attention and that packaging Chromium is a real beast. But the Arch Chromium packages are pretty nice and you can't get Chrome for Arch so Chromium it is: pacman -S chromium.

In the settings, search for [zoom] and adjust the page zoom to 150%, to make pages look the right size.

To get Flash working you need to install it from AUR, which just extracts it out of the Google Chrome RPM.

  1. Download the tarball from the chromium-pepper-flash AUR.
  2. Extract that somewhere.
  3. cd chromium-pepper-flash; makepkg
  4. sudo pacman -U chromium-pepper-flash*.xz

I know tweaking flags is a losing game but visit chrome://flags/ and turn on smooth scrolling. You'll thank me.

Remaining issues

As best as I can tell almost everything works great. (Remember back when suspend/resume used to be such a problem on Linux? Now it just works and is lightning fast!)

The wifi in my living room is weak; our phones occasionally disconnect from it but our other laptops have been fine. This laptop seems to also have a really weak signal and I think it's disconnected once or twice. I vaguely recall reading a complaint about that in a review of the laptop, too.

I notice some occasional graphical glitches in Chrome tabs. Switching in and out fixes them. I assume this is an interaction between GNOME's compositor and Chrome's, but it occurs rarely enough that it doesn't bother me (it very well could just be a bug in the version of Chromium I happened to install).

The one issue I've encountered is that the brightness keys don't work. I can change the screen brightness via the GNOME menu but the keys do nothing. Ubuntu has a nice page about troubleshooting hotkeys and in following those steps I conclude that there is no low-level input event being fired when I press those keys, which points at a kernel-level issue. I note that the f3/f4 keys are unlabelled but hitting fn-f3/f4 produces key events related to adjusting the keyboard brightness (despite there being no keyboard backlight on this laptop), which makes me suspect it's using some similar-but-slightly-different laptop model's data for the key events or something like that. I am pretty sure the right bug to follow is this kernel bug. It has a comment on it within the last month so I am hopeful; I'm tempted to dig in.