Revision 80 as of 2012-03-07 21:09:07

Clear message

The Asus Zenbook UX31E/UX21E works well with Ubuntu 11.10 Oneiric Ocelot, but does need some post installation configuration.

You can check what is your model with the command:

sudo dmidecode -s system-product-name

For further discusion and to seek help, see Ubuntu and the Asus Zenbook thread in the Ubuntu Forums.

Asus Zenbook and Ubuntu 11.10

This page aims to describe the steps needed to fully enable all features of the Asus Zenbook.

Overview

Anything not mentioned here should work out of the box.

(works out-of-the-box) (works, with remarks) (needs manual install) (won't currently work (completely)) (not yet documented)

BIOS Update

You can download the newest BIOS here:

UX21E: http://support.asus.com/download/download_item_mkt.aspx?model=UX21E

UX31E: http://support.asus.com/download/download_item_mkt.aspx?model=UX31E

You can update the BIOS from the BIOS menu itself, without any additional utilities.

Copy the BIOS file onto a memory-stick. Reboot and press the esc button to enter the BIOS menu. Then select "Enter Setup". From the Advanced tab, choose the Easy Flash option and then select the BIOS file to update.

Basic Installation Instructions

LCD Panel

Current Xorg-server overwrites, by default, display dpi setting to 96dpi. UX31E have ~138dpi. It make font and every thing looks really small. You can try use this option to overwrite defaults.

xrandr --dpi 138/eDP1

Also this two bug reports should get more attention: https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/589485 https://bugs.freedesktop.org/show_bug.cgi?id=41115

Suspend, Hibernate, Shut-down and Reboot

The kernel USB 3.0 (and sometimes 2.0) modules needs to be unloaded before suspending, and in kernels prior to 3.1 X also needs to disable/enable DPMS to get the screen back on resume. Save the following script as /etc/pm/sleep.d/20_zenbook (and make it executable):

For kernel 3.0:

EHCI_BUSES="0000:00:1a.0 0000:00:1d.0"
XHCI_BUSES="0000:03:00.0"
case "${1}" in
    hibernate|suspend)
        # Switch USB buses off
        for bus in $EHCI_BUSES; do
            echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/unbind
        done
        for bus in $XHCI_BUSES; do
            echo -n $bus > /sys/bus/pci/drivers/xhci_hcd/unbind
        done
        ;;
    resume|thaw)
        # Switch USB buses back on
        for bus in $EHCI_BUSES; do
            echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/bind
        done
        for bus in $XHCI_BUSES; do
            echo -n $bus > /sys/bus/pci/drivers/xhci_hcd/bind
        done
        # Hacky workaround to fix display after suspend, not needed for kernels 3.1 or newer
        export DISPLAY=":0"
        export XAUTHORITY=`ps aux | grep X | grep auth | awk '{sub( /^.*-auth / ,""); sub( / .*/,"");print }'`
        xset dpms force off
        xset dpms force on
        ;;
esac

For kernel 3.1 or newer:

EHCI_BUSES="0000:00:1a.0 0000:00:1d.0"
case "${1}" in
    hibernate|suspend)
        # Switch USB buses off
        for bus in $EHCI_BUSES; do
            echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/unbind
        done
        ;;
    resume|thaw)
        # Switch USB buses back on
        for bus in $EHCI_BUSES; do
            echo -n $bus > /sys/bus/pci/drivers/ehci_hcd/bind
        done
        ;;
esac

IconsPage/warning.png If this workaround not used, your memory controller setting will be screwed. After an incorrect suspend, many memory blocks starting with ~1G will be corrupt. Good way to see it is to use "memtest86+". The only way to fix controller setting is to open the case and plug off the battery. Please note that on this ultrabook the battery is not a user serviceable part and this could mean that by opening you can get your warranty void! If you start Windows or Linux with a corrupted controller, you will get system crashes or/and damaged file system. More info here: https://bugzilla.kernel.org/show_bug.cgi?id=42728

Keyboard functions (Brightness,volume,...)

Toggle internal/external screen: ?

Volume up, down, mute: Works.

Brightness up, down: Works.

Switch screen on/off: Works.

Sleep: Works.

Switch Network connection on/off: Works.

Context menu key: Works.

Fn + C (Launch1): Works, but not bound by default.

Fn + Space (Launch6): Works, but not bound by default.

Fn + V (Web Cam): Works, but not bound by default.

Example binding:

sudo apt-get install cheese
gconftool-2 -s /desktop/gnome/keybindings/custom0/name -t string 'Web Cam'
gconftool-2 -s /desktop/gnome/keybindings/custom0/binding -t string 'XF86WebCam'
gconftool-2 -s /desktop/gnome/keybindings/custom0/action -t string 'cheese'

Touchpad

The Zenbook comes with one of two types of touchpads: Sentelic or Elantech. To determine which touchpad you have use this command:

cat /proc/bus/input/devices | grep -i pad

Sentelic Touchpad

Works out of the box. Currently multi-touch doesn't work, but see Bugs & Issues below for current status. To disable tap-to-click on boot, add the following to /etc/rc.local (and to the resume section of the suspend/resume script above, if necessary):

        echo -n 0x90 0x80 > /sys/devices/platform/i8042/serio4/setreg
        echo -n c > /sys/devices/platform/i8042/serio4/flags

Elantech Touchpad

Works out of the box. Multi-touch starts working with kernel 3.2. Changes made are the whole pad is the left button, there is thus no right button*. Click and drag is done by clicking anywhere on the pad and moving the finger. Right mouse is available as two-finger tap. Middle button is available as three finger tap.

* A revision to the synaptics driver restores click-pad functionality. See here for the Ubuntu package and instructions.

With the 3.2 kernel, there is a very simple solution to the very low sensitivity problem. You can just use synclient to setup the sensitivity you want (and many other things).

Here is an example script from Aurélien Jacobs (which you can add e.g. to /etc/rc.local):

# higher sensitivity
synclient FingerLow=9 FingerHigh=12

# faster movements
synclient MinSpeed=1.5 MaxSpeed=3.0 AccelFactor=0.12

# 2 fingers scroll
synclient VertTwoFingerScroll=1 HorizTwoFingerScroll=1

# faster coasting
synclient CoastingSpeed=10 CoastingFriction=25

# enable tap to click (2 fingers for middle click, 3 fingers for right click)
synclient TapButton1=1 TapButton2=3 TapButton3=2

# faster tap and double tap
synclient FastTaps=1 MaxDoubleTapTime=100

# continue dragging movement when reaching the edge of the touchpad
synclient EdgeMotionMinZ=30 EdgeMotionMaxZ=40 EdgeMotionMinSpeed=100 EdgeMotionMaxSpeed=400

Only the first line is required to increase sensitivity. Other lines make the touchpad much more useful, but may not fit your needs. It is highly recommend to spend some time playing with synclient to find a setup that you really like (see 'man synaptics').

For kernel 3.3-rc5 on Ubuntu 12.04 is Elantech drivers is working very good.

Wireless

Many users report that this works out of the box. Most users have reported bad signal strengths, or random disconnections with low signal levels.

For some, frequent disconnections are shown in dmesg but are not visibly indicated. If you are getting poor wireless performance run dmesg to check or run tail -f /var/log/kern.log.

Possible workaround: run sudo killall wpa_supplicant after booting (see here)

Possible workaround: patch network-manager (see here)

Possible workaround: set the BSSID for your single access-point network (see here)

Possible workaround: remove network-manager and install wicd. You'll have to manually enable the tray icons in Unity (see here)

See this bug report also, and mark yourself as effected.

USB Ethernet

Works out of the box from kernel 3.2-rc7 and later thanks to Aurélien Jacobs and commit http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=e8303a3b2196272c3eb994d0fd1a189a958a2bdd

For earlier kernels, or if you still experience instability, download the asix-driver from http://www.asix.com.tw/FrootAttach/driver/AX88772B_772A_760_772_178_LINUX_Driver_v4.2.0_Source.zip

Once downloaded, the source needs to be compiled: First unzip the file.

Then download essentials:

sudo apt-get install build-essential linux-headers-`uname -r`

Next, go into the unzipped directory and compile the source as follows:

cd AX88772B_772A_760_772_178_LINUX_Driver_v4.2.0_Source

make

Install the just compiled module:

sudo make install

Finally load the module:

sudo modprobe asix

That's it. You should be able to connect using a wired connection now.

For 3.2 kernels, the following patch has to be applied:

--- a/asix.c    2011-03-10 13:46:05.000000000 +0100
+++ b/asix.c    2011-11-26 09:39:48.000000000 +0100
@@ -829,7 +829,7 @@
        .ndo_do_ioctl           = ax8817x_ioctl,
        .ndo_set_mac_address            = ax8817x_set_mac_addr,
        .ndo_validate_addr              = eth_validate_addr,
-       .ndo_set_multicast_list = ax8817x_set_multicast,
+       .ndo_set_rx_mode        = ax8817x_set_multicast,
 };
 #endif
 
@@ -1522,7 +1522,7 @@
        .ndo_get_stats          = axusbnet_get_stats,
        .ndo_set_mac_address    = ax8817x_set_mac_addr,
        .ndo_validate_addr              = eth_validate_addr,
-       .ndo_set_multicast_list = ax88772b_set_multicast,
+       .ndo_set_rx_mode = ax88772b_set_multicast,
 };
 #endif

Bluetooth

The bluetooth module is the Atheros AR3012, which requires loading a firmware before it can be used. For now, patching the kernel is required to recognize this module as AR3012 one.

The patch, and it's upstream progress, can be seen here: http://thread.gmane.org/gmane.linux.bluez.kernel/18801

More info: http://ubuntuforums.org/showthread.php?t=1867447&highlight=zenbook

Please report this bug to Ubuntu kernel Team, In order to include this patch in ubuntu precise 12.04. http://bugs.launchpad.net/ubuntu/+source/linux/+bug/916319

Sound

Works perfectly out of the box, both internal and through HDMI.

Microphone

Works perfectly out of the box.

External Monitor

HDMI works out of the box (with audio). If you wish to use the laptop display at the same time as an external display, you must plug in the HDMI cable after X has started (also after resuming from suspend).

VGA works out of the box. But the internal screen has only one resolution setting (1600x900). This can be changed for the current session using e.g.

xrandr --newmode "1280x900_60.00"   95.00  1280 1360 1488 1696  900 903 913 934 -hsync +vsync
xrandr --addmode eDP1 1280x900_60.00

xrandr --newmode "1024x768_60.00"   63.50  1024 1072 1176 1328  768 771 775 798 -hsync +vsync
xrandr --addmode eDP1 1024x768_60.00

xrandr --newmode "1024x576_60.00"   46.50  1024 1064 1160 1296  576 579 584 599 -hsync +vsync
xrandr --addmode eDP1 1024x576_60.00

xrandr --newmode "800x600_60.00"   38.25  800 832 912 1024  600 603 607 624 -hsync +vsync
xrandr --addmode eDP1 800x600_60.00

You can copy these commands into a file, make it executable, and run it when you need to connect an external monitor:

#In your home dir:
nano xprofile
#Copy the commands into the file (shift+ctrl+V), and save (Ctrl+X)
chmod 0766 xprofile
./xprofile

This could be automated even more by producing an xorg.conf-file.

Ref.: https://wiki.ubuntu.com/X/Config/Resolution

SD card slot

Works perfectly out of the box.

Fan Control

Works perfectly out of the box.

Sensors (temps & fans)

Works by default however to (optionally) read the sensor data requires the package lm-sensors which is installed by:

sudo aptitude install lm-sensors
sudo tee -a /etc/modules <<-EOF
        coretemp
EOF

Power Optimizations

Kernel parameters

To get the most power efficient system with longer battery life and cooler CPU temperatures, the configuration recommended so far is to disable VT-d in the BIOS and boot kernel 3.2-rc6 or newer with the boot options:

i915.i915_enable_rc6=1 i915.semaphores=1 pcie_aspm=force

RC6 and semaphores are disabled by default in final kernel 3.2, so they should be forced on. FBC should not be enabled and has not shown any improvements. LVDS downclock does not have any effect on the ZenBook since it's eDP.

To disable VT-d, reboot your Zenbook, holding down the Esc-button while it starts up. Locate the VT-d setting in the BIOS menus and toggle it to disabled.

Occasional shutdowns still occur but the cause it yet unknown - it might be the ath9k driver or something related to RC6 or ASPM.

Note that this configuration trades off a bit of stability (unexpected shutdowns) for power efficiency. Without these RC6 settings, you will have less battery life etc., but the system will be perfectly stable (or so it seems).

possible patch: modifying the DSDT table seems to fully stabilize the system with RC6 active, acording to http://files.benesovi.eu/ux31e/

Power saving script

To apply all recommendations by powertop when on battery, put the following in a script (the name does not matter) in /etc/pm/power.d:

# Powertop tunables

case $1 in
        true)
                ## VM writeback timeout
                echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

                ## Autosuspend for USB devices

                ### USB2.0-CRW (Generic)
                echo auto > /sys/bus/usb/devices/1-1.7/power/level

                ### Bluetooth USB Host Controller (Atheros Communications)
                echo auto > /sys/bus/usb/devices/1-1.8/power/level

                ## Runtime PM for PCI devices

                ### Atheros Communications Inc. AR9485 Wireless Network Adapter
                echo auto > /sys/bus/pci/devices/0000:02:00.0/power/control

                ### Fresco Logic Device 1009
                #echo auto > /sys/bus/pci/devices/0000:03:00.0/power/control
                # Currently this turns the USB3 port off, awaiting response

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### 6 port SATA AHCI Controller
                echo auto > /sys/bus/pci/devices/0000:00:1f.2/power/control

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### USB Enhanced Host Controller #1
                # echo auto > /sys/bus/pci/devices/0000:00:1d.0/power/control
                # Causes machine to freeze on shutdown, should work with kernels 3.0.11, 3.1.3 or newer

                ### Intel Corporation 2nd Generation Core Processor Family
                ### DRAM Controller
                echo auto > /sys/bus/pci/devices/0000:00:00.0/power/control

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### MEI Controller #1
                echo auto > /sys/bus/pci/devices/0000:00:16.0/power/control

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### High Definition Audio Controller
                echo auto > /sys/bus/pci/devices/0000:00:1b.0/power/control

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### PCI Express Root Port 1
                echo auto > /sys/bus/pci/devices/0000:00:1c.0/power/control

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### PCI Express Root Port 2
                echo auto > /sys/bus/pci/devices/0000:00:1c.1/power/control

                ### Intel Corporation 6 Series/C200 Series Chipset Family
                ### PCI Express Root Port 4
                echo auto > /sys/bus/pci/devices/0000:00:1c.3/power/control

                ### Intel Corporation 2nd Generation Core Processor Family
                ### Integrated Graphics Controller
                echo auto > /sys/bus/pci/devices/0000:00:02.0/power/control

                ## SATA link power management
                echo min_power > /sys/class/scsi_host/host0/link_power_management_policy

                # 50% screen brightness on battery
                echo 5 > /sys/bus/pci/devices/0000:00:02.0/backlight/acpi_video0/brightness

                # Set powersave CPU governor
                for i in 0 1 2 3; do
                    echo powersave > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor
                done
        ;;
        false)
                # 90% screen brightness on AC
                echo 9 > /sys/bus/pci/devices/0000:00:02.0/backlight/acpi_video0/brightness

                # Set ondemand CPU governor
                for i in 0 1 2 3; do
                    echo ondemand > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor
                done
        ;;
esac

exit 0

How to upgrade kernel

If you want to upgrade to the newest kernel, which improves power use, wlan and a number of other issues which are solved from time to time, do the following:

1. Set kernel options

Edit the kernel options in grub (using nano, vi, gedit or any other editor):

sudo nano /etc/default/grub

And change the line starting with GRUB_CMDLINE_LINUX_DEFAULT to:

GRUB_CMDLINE_LINUX_DEFAULT="pcie_aspm=force quiet splash"

save and run update-grub:

update-grub

2. Download the kernel

Browse to http://kernel.ubuntu.com/~kernel-ppa/mainline/ to find the latest kernel (e.g. 'v3.2.2-precise', which is kernel version 3.2.2 and works also on Oneiric), and from that folder download 3 files:

linux-headers-<version>-<other stuff>_amd64.deb
linux-headers-<version>-<other stuff>_all.deb 
linux-image-<version>-<other stuff>_amd64.deb

3. Install the kernel

Open a terminal and change to the directory where you downloaded these files, and run

sudo dpkg -i linux-*.deb

(if you have older linux-*.deb files laying around in that folder, you should specify the new files explicitly instead of using wildcards). Reboot to run the new kernel. You can verify the kernel version from the grub menu selection, or by running

uname -a

How to recompile kernel for Ubuntu 12.04 and ux31e

1.Install some tools to compile: Code:

sudo su -
apt-get install fakeroot build-essential
apt-get install crash kexec-tools makedumpfile kernel-wedge
apt-get build-dep linux-image-$(uname -r)
apt-get install git libncurses5 libncurses5-dev libnewt-dev
exit

2. Create some directory somewhere where you'd like to store the source files you'll want to compile, I'm calling it "kernel". Cd into that directory and get the kernel sources via git. Code:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-oneiric.git  source

3. Download kernel last source from http://www.kernel.org/ and uncompress it.

http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.3-rc5.tar.bz2

4. Donwload felsi's bluetooth patch

wget http://fenski.pl/zenbook/bluetooth.patch

and apply patch on 3.3-rc5 folder.

patch -p1 < ../bluetooth.patch

5. Now you'll actually have to compile the source. This takes commands: Code:

make menuconfig
fakeroot make-kpkg clean
fakeroot make-kpkg --jobs=4 --initrd --append-to-version=-ux31custom --revision=`date +'%Y%m%d%H%M'` kernel_image kernel_headers modules_image

6. the compiled kernel packages will be in the parent folder. So make a "cd .." and install: Code:

sudo dpkg -i linux-*.deb

7. Just for safety, update grub Code:

sudo update-grub

Bugs and issues

Intel RC6 causes sudden shutdowns

Kernel developers are aware and working on an issue with DMAR+RC6.

However, Zenbboks experience sudden shutdowns with RC6 on and Intel IOMMU off.

The most stable configuration is to enable semaphores and turn off VTd in BIOS, see above.

However, this needs to be properly fixed in the kernel once RC6 gets enabled by default.

Status: Not an issue according to kernel developer feedback.

USB 3 / XHCI runtime PM disables port

In above power saving script, the "auto" setting for the Fresco controller causes the USB3-port on the right to disable, although cellphones etc still can be charged with it.

Status: Awaiting kernel developer feedback.

USB 2 / EHCI module needs to be unbound on suspend

The module needs to be unbound or the machine won't suspend, bound on resume.

Status: Awaiting kernel developer feedback.

Sentelic touchpad synaptics/multitouch

Reuben Bond has begun work on a synaptics driver for the Sentelic touchpad on https://github.com/ReubenBond/sentelic-multitouch but is awaiting further documentation from Sentelic regarding the multi touch.

Also, Oskari Saarenmaa has managed to get two finger scrolling working in his git repo at https://github.com/saaros/sentelic/, which Chris D aims to refine further in his fork at https://github.com/thaelim/sentelic.

Status: Work in progress.

Kernel 3.2 KMS

Commit dc22ee6fc18ce0f15424e753e8473c306ece95c1 in 3.2-rc1 causes the KMS to fail on the Zenbook graphics. 3.2-rc1 to 3.2-rc5 will therefore not boot without supplying kernel parameter i915.modeset=0, in which mode hardware acceleration is disabled.

Status: Fixed in 3.2-rc6 with commit ed4a51842a9d9e618d4f4c31349b15b974dba5df

EHCI power savings preventing shutdown

Status: Solved in kernels 3.0.11, 3.1.3 or newer.

Machine check events (MCE) errors reported in kernel log

power limit notification MCE errors have been confirmed to be harmless (see here

Status: Specific issue noted above may be safely ignored.

Machine won't boot

As of 21-Feb-2012 Grub2 seems to have problems booting Asus machines using UEFI, so use BIOS.