Debian Sarge on the ASUS Z63A

The ASUS Z63A is a customizable version of the ASUS W3A or W3V (I'm not sure); at the moment, it is also very new, so the ASUS website is not very informative.

Debian recently released a new stable version, called "sarge" (after the Toy Story character).

Hardware summary

Hardware comments

The machine looks really sleek, and I like the fact that the back doesn't have any connectors on it (since the back is what sticks up out of a bag, for example).  However, perhaps as a result of this design decision, the lock hole is so close to the USB ports that if the laptop is locked in place, the lock blocks two of the three USB ports.

The speakers sound nice, but unless there is some mixer setting somewhere I can't find it, they are not very loud when turned all the way up.  They are loud enough for casual listening to music, but movies often have so much dynamic range that conversations are almost inaudible - I've needed to use closed captioning on several DVDs now.

The power button is on the outside, and is easily pressed when manipulating the closed laptop, so it has no effect unless the lid is open.  I hope the lid-open sensor never gets sticky.

I wish the volume keys were on their own buttons so that I could use them with one hand or in the dark (while watching a DVD, say).

The machine has a door on the bottom to allow you to change the MiniPCI card without taking the keyboard out.

Kernel compile

The SATA hard drive is not a normal IDE drive. In particular, under the 2.4 kernel it is treated as an IDE drive, so it appears as /dev/hda; but under 2.6 it is handled by libata as a SCSI drive, so it appears as /dev/sda. In particular, if you switch back and forth, your /etc/fstab will be wrong.

On the Sarge install disk, the 2.4 kernel installed fine, but the 2.6 dies because it can't cope with the hard drive.  Once I'd installed the 2.4 kernel, I still couldn't get the stock debian 2.6 kernel to boot; I had to compile my own kernel. This helped with the audio too. But I had some problems with GRUB because the root device as seen by the new kernel was different from the root device as seen by the old kernel. I had to change /etc/fstab before it would install the new kernel package.

Also important: you need (barring initrds) to compile both "SCSI disks" and libata in statically - not as modules. In order to have smooth playback of DVDs, it is necessary to modify include/linux/libata.h (see below), to not include the IDE drivers statically (they can be modules), and to include the SCSI CDROM drivers.

If you have 1024 MB of memory, you need to enable HIGHMEM to access all of it.

Graphics

Status: done.

Sarge only includes the XFree86 server, which has no support for this graphics card. I chose the VESA server and things worked okay, if slowly and at a funny resolution. I don't imagine there was any 3D acceleration.

I added the line for backports.org's X.org distribution to my /etc/apt/sources.list and installed X.org 6.8.2, using the i810 driver. I also had to download the 915resolution Debian package. To get X.org running correctly, I have to first run 915resolution to change the resolution of some otherwise useless VESA mode to 1280x768. So I created an /etc/init.d/915resolution script, which I linked into various /etc/rc.*/ directories so that it runs on boot before any X server. Backport's sources line:

deb http://people.debian.org/~nobse/xorg-x11/ sarge main

It may help to specify an amount of video RAM in the /etc/X11/xorg.conf file; I chose 32 MB for no really compelling reason. The right amount probably depends on what kind of 3D work you do.

Currently I have 3D acceleration, as reported by glxgears; it reports 932 FPS, for what it's worth. Planetpenguin racer runs nicely.

Video

Status: done.

I installed totem, which works out of the box for some things. I expect it's missing some codecs, and it messed up the brightness and contrast of a DVD I tried to play; also the playback was rather jumpy.

I generally prefer mplayer, so I've put in its sources line:

deb ftp://ftp.nerim.net/debian-marillat/ stable main

DVD playing/burning

Status: done.

Some of the tools are available either in debian proper or from the mplayer (marillat) repository.

To decode CSS, I needed to install libdvdcss2.

Playing is jumpy. hdparm reports DMA is off but won't turn it on. mplayer can be made to be smooth by specifying a large cache; xine can be made to be smooth by turning off readahead. Totem does not appear to respond to changes in ~/.xine/config.

In fact, it appears that DMA cannot be enabled because of some sort of odd SATA effect (see this thread). The solution seems to be to use a new kernel and to change

#undef ATA_ENABLE_ATAPI

to

#define ATA_ENABLE_ATAPI

in include/linux/libata.h. It is also necessary to make the IDE driver a module - otherwise it snaps up the optical drive itself.

To reduce the size of a DVD movie with minimal loss of quality, the tool "streamdvd" is useful.

The DVD player does not have a region code set, and so it won't read DVDs from anywhere until you set one with regionset.

Audio

Status: done.

The ALSA driver for the sound is snd_intel_hda. It's included in the 2.6.12.5 kernel (and maybe some earlier ones, but not in the last 2.6.11 kernel). If you don't want to use this kernel (it will involve using kernel-package) it is supposedly also possible to use sufficiently recent ALSA modules from outside the kernel.

Extra buttons

Status: not done.

Of the extra buttons, some of them work out of the box. The LCD brightness buttons do just what they're supposed to. The volume and mute buttons don't. The LCD on/off and LCD/external buttons don't. The wireless on/off doesn't do anything.

The wireless LED is accessed through the asus_acpi module, which also enables support for the miscellaneous buttons on the machine. In particular, the LCD on/off button now works.

Button

Event

Notes

Volume up

hotkey ATKD 00000030

 

Volume down

hotkey ATKD 00000031

 

Mute/Unmute

hotkey ATKD 00000032

 

Zigzag guy

hotkey ATKD 0000005c

 

Planet

hotkey ATKD 00000051

 

Bluetooth symbol

 

 

Wireless

hotkey ATKD 0000005d

 

Touchpad off

hotkey ATKD 0000006a

 

CD

 

 

Back

 

 

Stop

hotkey ATKD 00000043

 

Play/pause

hotkey ATKD 00000045

 

Forward

 

 

Sleep

 

 

Wireless (keyboard)

 

 

HDD sleep

 

 

LCD on/off

 

Works

LCD brighter

hotkey ATKD 0000001c

Works

LCD darker

hotkey ATKD 0000002b

Works

LCD/TV

hotkey ATKD 00000061

 

Power

 

 

Lid close

button/lid LID 00000080

Turns off LCD

Looking at the source code in drivers/acpi/asus_acpi.c, it looks like the Z63A (and the W3V) are not yet supported, but that it's just a question of collecting some information to send to the driver maintainers.

In fact, when I modprobe asus_acpi, I get an error message asking me to send my DSDT to the maintainers, since the Z63A is unsupported. A simple addition gets the Z63A recognized, but it appears that the module does not receive button events for the remaining buttons (I tested this with a printk in the module, so it's not the ACPI daemon).

TV Out/Monitor Out

Status: untested.

PCMCIA WiFi card

Status: works with ndiswrapper.

I have a Linksys WiFi card; it's only supported under ndiswrapper, as far as I can tell, so I used that. The list on the ndiswrapper wiki gives instructions on which driver to use.

For reasons that are much too complicated to go into, I'm now using a different Linksys adapter (the WPC11) which does appear to have native drivers; I'm hoping I won't be using it for long, though, so I'll stick with ndiswrapper for the moment.

MiniPCI WiFi

Status: done.

Fortunately the machine does come with a handy little compartment on the bottom so it is possible to install a MiniPCI card without opening it (a disappointment, as I'd have sort of liked an excuse to open the machine).

Making the card actually work was a rather painful experience.  I am running the 2.6.13 kernel (for reasons discussed elsewhere); 2.6.13 introduced incompatibilities in the wireless interface. So none of the debian-packaged modules work. It was necessary to use ipw2200-1.0.6 and ieee80211-1.0.3.

Specifically: download ieee80211-1.0.3, extract it in some directory owned by the same user who did your kernel compile, and run make. It will want to delete a file from your kernel source (!).  Say yes; this file causes both this package and ipw2200 to have seizures. The make should proceed, leaving you with a heap of kernel modules (*.ko). Now download and extract ipw2200-1.0.6; download the "broadcast patch" and apply it (or else you won't be able to connect to a DHCP server). Run make.  You should again get some kernel modules.  Now create a new subdirectory under /lib/modules/2.6.13/ and copy the kernel modules from both directories into it. Run depmod. Now modprobe ipw2200, and your network card appears as eth2. You will get errors about version mismatches with the wireless extensions; the client code for the wireless extensions version 18 does not exist yet.

Touchpad/Mouse

Status: done.

I installed the xfree86-driver-synaptics driver and followed the instructions in /usr/share/doc/xfree86-driver-synaptics/README. With the 2.6 kernel, USB mice work fine, and just as expected. I haven't done anything with the "touchpad off" button yet, although disabling tapping might be more useful than disabling it entirely.  

I'd like to have two-finger drags scroll, but that doesn't seem to be possible.

Java

Status: untested.

Some programs seem to need Java.  I added the blackdown repository to my /etc/apt/sources.list:

deb ftp://ftp.tux.org/pub/java/debian stable non-free

The magic of aptitude did the rest.

Fonts

Status: done except for Firefox.

I very much prefer antialiased fonts, and in particular the Bitstream Vera fonts. It is easy enough to get the usual applications to use these, but many web pages in Firefox specify "Helvetica" or "Arial", which are translated to some font which I find very ugly. So I'd like to force a correct conversion. This should be possible with fontconfig, but nothing seems to happen.  So I just told it to always use my fonts.

CPU Speed stepping

Status: done.

There are more speed stepping daemons than you can shake a stick at, but they are basically designed for systems where speed stepping is much more expensive than it is with a Pentium-M. I use the built-in cpu-freq system in the Linux kernel; I set the governor to "conservative" and it works only as hard as it needs to to be responsive. "conservative" is only available in 2.6.12 and newer; "ondemand" is similar but simpler.

To make this work I included "speedstep_centrino" and "cpufreq_conservative" in /etc/modules, and wrote an /etc/init.d/speedstep script to do "echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor".

One reference suggests that I should be going through ACPI for speed stepping, but this works fine and I haven't seen any convincing argument for it - in particular, letting the kernel control the CPU directly is probably faster, which allows the "conservative" profile to work.

I did notice that sometimes the machine decided its top speed was 1.4 GHz rather than 1.6, so I put a second echo into my init.d script, to set the correct top speed.

Battery life is at least three hours, and the fan is normally silent unless some major work is going on - compiling a kernel, say.

Software suspend

Status: untested.

When compiling a kernel as recent as 2.6.13, I found a software suspend option in the kernel. I have previous experience with swsusp2, which was very nice and worked great even on a laptop with a proprietary video driver. But it requires a kernel patch, and I'm lazy, so I would like to use the in-kernel version. Unfortunately, the documentation appears to say that it does not support HIGHMEM, which I need to use to access all of my 1024 MiB of RAM.