ASUS Zenbook Prime UX31A
This page contains instructions, tips, pointers, and links for installing and configuring Arch Linux on the ASUS Zenbook UX31A and UX21A Ultrabooks. Most of it should also hold for UX32VD.
See previous generation ASUS Zenbook UX31E page that has mostly orthogonal information to those here (may be only partially applicable to UX31A)
- 1 Installation
- 2 Function keys
- 3 Solid State Drive
- 4 Graphics
- 5 Touchpad
- 6 HDMI plugged at boot
- 7 Powersave management
- 8 Hardware and Modules
- 9 See also
- 10 Additional resources
To install Arch Linux on UX31A, you can follow the official Installation guide. Since the UX31A uses UEFI and GPT, make sure to also read the UEFI, GPT and UEFI Bootloaders pages. To prepare a UEFI USB device, read UEFI#Create UEFI bootable USB from ISO.
Boot from USB medium
Escape to get into the boot menu. If the USB bootable device is not listed, enter the configuration menu and directly press
F10 to save. Press
Escape again on reboot: This time the USB bootable device should appear in the menu.
Make sure to boot the USB in EFI-Mode, to easily install the bootloader later.
xevwhen the key combination is pressed OR that the functionality is built in and "just works". It does not means that the keymap is linked to the functionality. For that it is often necessary to add a keyboard shortcut by the method of your choice or to use a desktop shell with built-in shortcut support for the keycode in question. For some of the keys the function operates on a BIOS level and no shortcut is needed.
This table shows the function keys, their intended function, what keycode (if any) X recognizes and whether the function key operates at the BIOS level or if it needs a shortcut.
|Keys||Function||X sees||shortcut needed|
||Turn off WLAN and Bluetooth||XF86WLAN & XF86Bluetooth||no|
||Dim keyboard backlight||XF86KbdBrightnessDown||yes|
||Brighten keyboard backlight||XF86KbdBrightnessUp||yes|
||Dim LCD backlight||XF86MonBrightnessDown||no|
||Brighten LCD backlight||XF86MonBrightnessUp||no|
||Turn off LCD||No named key||no|
||Audio volume down||XF86AudioLowerVolume||yes|
||Audio volume up||XF86AudioRaiseVolume||yes|
||Ambient light sensor||m:0x0 + c:248||yes|
||Switch display profiles||XF86Launch1||yes|
||Switch power profiles||XF86Launch6||yes|
Screen backlight should work with any recent kernel (after 3.7). The brightness is managed via hardware, so it should work across all DE's.
Keyboard backlight should work automatically with any recent kernel. Desktop environments that use UPower, like GNOME or KDE, work out the box and don't need any tool or script to register the keys and change the keyboard brightness.
Manually setting the brightness
The easiest way to change the keyboard brightness is to use the UPower D-Bus interface. This even works without root.
# Get current brightness dbus-send --type=method_call --print-reply=literal --system --dest="org.freedesktop.UPower" /org/freedesktop/UPower/KbdBacklight org.freedesktop.UPower.KbdBacklight.GetBrightness # Set brightness to 2 dbus-send --type=method_call --print-reply=literal --system --dest="org.freedesktop.UPower" /org/freedesktop/UPower/KbdBacklight org.freedesktop.UPower.KbdBacklight.SetBrightness int32:2
You can also control the brightness of the keyboard backlight through the
brightness file in
/sys/devices/platform/asus-nb-wmi/leds/asus::kbd_backlight/ by writing a value to it. This needs root. You can retrieve the maximum from
# get maximum brightness value cat /sys/class/leds/asus::kbd_backlight/max_brightness
# set to a particular value: echo 2 > /sys/class/leds/asus::kbd_backlight/brightness
Using asus-kbd-backlight from AUR
AUR from the AUR is a convenient way to manage the backlight brightness, if one doesn't want to use UPower. To allow users to change the brightness, write:
# asus-kbd-backlight allowusers
Users of systemd can use the unit file included in the package.
# systemctl daemon-reload # systemctl start asus-kbd-backlight.service # systemctl enable asus-kbd-backlight.service
Now you can easily change keyboard backlight in terminal:
$ asus-kbd-backlight up $ asus-kbd-backlight down $ asus-kbd-backlight max $ asus-kbd-backlight off $ asus-kbd-backlight night $ asus-kbd-backlight 2 $ asus-kbd-backlight show
You can then set the XF86KbdBrightnessDown and XF86KbdBrightnessUp keys to the above functions. See Extra keyboard keys in Xorg.
Ambient Light Sensor (ALS)
The Zenbook has an ambient light sensor which enables adjustment of the keyboard and LCD backlights based on the light environment in which the Zenbook finds itself. The AUR contains packages to build the necessary kernel module and userspace programs to change keyboard and backlights and to turn the sensor on and off. The kernel module package is als-driver-git and the userspace programs in als-controller-git.
The ALS driver is a module named
als. The resulting device is represented in sysfs in the directory
/sys/bus/acpi/devices/ACPI0008:00. The ambient light sensor is enabled by writing a "1" to the file
# echo "1" > /sys/bus/acpi/devices/ACPI0008:00/enable
However, it is better to use the userspace controller described below. Note that the module will need to be rebuilt with every kernel update.
If the sensor is not visible at
/sys/bus/acpi/devices/ACPI0008:00, you should set
acpi_osi='!Windows 2012' at the end of
/etc/default/grub and then rebuild
sudo grub-mkconfig -o /boot/grub/grub.cfg and reboot.
als-controller package will build the als-controller program and an example userspace script.
The als-controller program is installed as
If the programs is run as root and without parameters it will start the als-controller daemon and create a pidfile and socket for it in
The als can then be enabled and disabled by running als-controller as an unprivileged user with the appropriate parameter (
-d. To enable:
$ /usr/share/als-controller/service/als-controller -e
and to disable
$ /usr/share/als-controller/service/als-controller -d
The project, which seems to be Ubuntu-centric, doesn't yet include a systemd service file. I use the following (overly verbose) one:
[Unit] Description=Ambient Light Sensor Daemon [Service] User=root Group=root PIDFile=/var/run/als-controller.pid ExecStart=/usr/share/als-controller/service/als-controller Restart=on-failure [Install] WantedBy=multi-user.target
The sample userspace script is installed as
/usr/share/als-controller/example/switch.sh. The script is designed to be run by being bound to a key combination. It requires that
libnotify be installed to have OSD confirmation of state change appear.
If you wish to bind enabling/disabling to the same [Fn]+[a] combination as in Windows, the relevant keycode under X is 248. If you are using
xbindkeys, add the following to your
# Ambient Light Sensor (ALS) Toggle [Fn a] "/usr/share/als-controller/example/switch.sh" m:0x0 + c:248
More information can be found in the project's README file.
Solid State Drive
If you're using a SSD, make sure to read Solid State Drives.
Multifinger taps work out of the box.
To enable multitouch gestures like those under Windows, one can install
touchegg will require disabling some input-handling that is done by the synaptics input driver. Edit your
Section "InputClass" Identifier "touchpad catchall" Driver "synaptics" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Option "TapButton1" "1" Option "TapButton2" "0" Option "TapButton3" "0" Option "ClickFinger2" "0" Option "ClickFinger3" "0" Option "HorizTwoFingerScroll" "0" Option "VertTwoFingerScroll" "0" Option "ClickPad" "true" Option "EmulateMidButtonTime" "0" Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0" EndSection
An alternative to X.org configuration files is to use the
synclient command within the
.xinitrc script. This method will limit changes to your desktop environment.
synclient TapButton2=0 TapButton3=0 ClickFinger2=0 ClickFinger3=0 HorizTwoFingerScroll=0 VertTwoFingerScroll=0
touchegg will need to be autostarted for multitouch gestures to be activated. This can be done with
touchegg & in your
.xinitrc, or using the autostart/startup applications functionality of your desktop environment.
~/.config/touchegg/touchegg.conf can then be configured as necessary.
Multi-tap, two-finger scrolling doesn't work
Check "xinput list" and see whether the Elantech touchpad was recognized as an Elantech Click-pad. If so, brenix's comment in psmouse-elantech AUR fixed it for me.
Multitouch gestures in Gnome 3
GNOME 3's gnome-shell does its own mouse-handling, which can interfere with synaptics and touchegg settings unless the appropriate plugin is disabled.
gsettings set org.gnome.settings-daemon.plugins.mouse active false
Note that disabling this plugin will cause the the current settings within the Mouse & Touchpad section of System Settings to be ignored.
Disable Touchpad While Typing
One of the criticisms this laptop gets (see reviews at Amazon) is that the placement of the touchpad results in frequent touchpad brushing during typing. You should use whatever touchpad disabling method you prefer. See Touchpad Synaptics#Disable trackpad while typing.
HDMI plugged at boot
There seems to be a problem whereby having an HDMI device plugged in at boot results in the screens being switched and also the laptop screen not coming on. To make this more bearable you can automate switching HDMI on with the following udev rule and script:
Add the following script as root:
#!/bin/bash export XAUTHORITY=/home/$USER/.Xauthority export DISPLAY=:0 /usr/bin/xrandr -display :0 --output eDP1 --auto --output HDMI1 --auto --above eDP1
then make it executable
# chmod +x /usr/local/share/hdmi-plugged-startup
And add the following udev rule:
# echo 'ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/share/hdmi-plugged-startup"' >> /etc/udev/rules.d/10-local.rules
Suspending, unplugging the HDMI cable, and resuming is a way to enable the Zenbook's screen without rebooting if it was booted with the cable plugged in.
Hardware and Modules
|Intel Corporation 3rd Gen Core processor DRAM Controller||8086:0154||ivb_uncore|
|Intel Corporation 3rd Gen Core processor Graphics Controller||8086:0166||i915|
|Intel Corporation Device||8086:0153||none|
|Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller||8086:1e31||xhci_hcd|
|Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1||8086:1e3a||mei_me|
|Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2||8086:1e2d||ehci_hcd|
|Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller||8086:1e20||snd_hda_intel|
|Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1||8086:1e10||pcieport|
|Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2||8086:1e12||pcieport|
|Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1||8086:1e26||ehci_hcd|
|Intel Corporation HM76 Express Chipset LPC Controller||8086:1e59||lpc_ich|
|Intel Corporation 7 Series Chipset Family 6-port SATA Controller||8086:1e03||ahci|
|Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller||8086:1e22]||i2c_i801|
|Intel Corporation 7 Series/C210 Series Chipset Family Thermal Management Controller||8086:1e24||none|
|Intel Corporation Centrino Advanced-N 6235||8086:088e||iwlwifi|
|Chicony Electronics Co., Ltd Asus 720p CMOS webcam||04f2:b330||uvcvideo|
|Intel Corporation [Bluetooth Device]||8087:07da||btusb|
|Realtek Semiconductor Corp. RTS5139 Card Reader Controller||0bda:0139||rtsx_usb|
Other Devices and Drivers
If you know what you are doing and want to use the i7 MEI, you need the Intel Local Manageability Service. You can find it as intel-lms in the AUR.
The chipset also has an hardware watchdog:
root@asarum chris]# wdctl Device: /dev/watchdog Identity: iTCO_wdt [version 0] Timeout: 30 seconds Timeleft: 2 seconds FLAG DESCRIPTION STATUS BOOT-STATUS KEEPALIVEPING Keep alive ping reply 0 0 MAGICCLOSE Supports magic close char 0 0 SETTIMEOUT Set timeout (in seconds) 0 0
Activating the watchdog under systemd is trivial, as systemd author Lennart Poettering explains in this blog post.
All you do is go into /etc/systemd/system.conf, uncomment the RuntimeWatchdogSec=0 line and change zero to how long the watchdog should go without receiving a ping before it reboots the system. I used 30s, which is the default setting for iTCO_wdt and seemed sane.
Check after next boot:
[root@asarum chris]# journalctl | grep -i watchdog Oct 06 06:36:27 asarum kernel: iTCO_wdt: Intel TCO WatchDog Timer Driver v1.10 Oct 06 06:36:27 asarum systemd: Hardware watchdog 'iTCO_wdt', version 0 Oct 06 06:36:27 asarum systemd: Set hardware watchdog to 30s.
Problem with ACPI and gpio_ich
The gpio_ich module causes the following error:
ACPI Warning: 0x0000000000000428-0x000000000000042f SystemIO conflicts with Region \PMIO 2 (20120711/utaddress-251) ACPI Warning: 0x0000000000000500-0x000000000000053f SystemIO conflicts with Region \GPIO 1 (20120711/utaddress-251) ACPI Warning: 0x0000000000000500-0x000000000000053f SystemIO conflicts with Region \GP01 2 (20120711/utaddress-251) lpc_ich: Resource conflict(s) found affecting gpio_ich ACPI Warning: 0x000000000000f040-0x000000000000f05f SystemIO conflicts with Region \SMB0 1 (20120711/utaddress-251) ACPI Warning: 0x000000000000f040-0x000000000000f05f SystemIO conflicts with Region \_SB_.PCI0.SBUS.SMBI 2 (20120711/utaddress-251)
In this case an lsmod shows that the gpio_ich module doesn't wind up being loaded
# lsmod | grep gpio #
I then rebooted with apci_enforce_resources=lax. A cat /proc/ioports showed the conflict:
0420-042f : ACPI GPE0_BLK 0428-042f : gpio_ich
0500-057f : pnp 00:05 0500-053f : gpio_ich
In contrast, here's the same lines without acpi_enforce_resources=lax:
0420-042f : ACPI GPE0_BLK
0500-057f : pnp 00:05
So, net/net, there's no real problem.