Lenovo ThinkPad X230

From ArchWiki
Revision as of 10:43, 19 March 2015 by Orschiro (talk | contribs) (Improved touchpad configuration)
Jump to navigation Jump to search

Lenovo ThinkPad X230 comes with a wide range of available configurations. Since Lenovo's acquisition of the ThinkPad brand from IBM, it has received lots of negative criticism for not maintaining the original quality and compromising the brand itself. Regardless, ThinkPad still is one of the first preferences for many geeks, students (mainly due to student discounts) and Linux users. It is the standard option available in Lenovo's X Series under 12-13 inches display category.


Tested Configuration

Tip: Below were the tested configurations at the time. If you are interested in more details and review, see the gist A Hacker's Ongoing Review for Lenovo ThinkPad X230 for full details.
Feature Configuration
System X230 2306CTO
CPU Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
Graphics Intel HD 4000 - Ivy Bridge
Ram 3.5GB (Kingston)
Disk Crucial M4 120GB SSD
Display 12.5" IPS
Wireless 2x2 Centrino Wireless-N 2200
Built-in Battery 9 Cell
Additional Plugable Battery 6 Cell 19+
Backlit Keyboard No
ThinkLight Yes
Fingerprint Scanner Yes
Bluetooth Yes
Cam Yes

System Configuration

Fingerprint scanner

Works out of the box. See fprint article for installation instructions. No extrac actions are needed.


Note: You may want to run patched kernels instead of the default kernel to conserve power. See power saving section below
HOOKS="base udev autodetect block filesystems keyboard fsck"
options i915 enable_rc6=1 enable_fbc=1 lvds_downclock=1
options iwlwifi 11n_disable=1

The badblocks binary helps fix logical bad blocks if detected by fsck during system startup. The first line in modprobe.conf file enables different Intel HD power saving options. To see what each of the parameters does, issue the command modinfo i915. The second line disables the wifi N mode as the Intel wireless driver suffers connection loss due to possible bugs. You can comment out this line if you want to transfer data at wireless N speeds.

After saving the above files, make sure to regenerate your init ram image by the command mkinitcpio -p linux.

If you have the Linux-ck kernel installed, don't forget to regenerate the initcpio as well using mkinitcpio -p linux-ck.

Then, to update grub2 with the new kernels you have to run grub-mkconfig -o /boot/grub/grub.cfg.

Note: Using enable_rc6=1 will enable basic power saving with first stage of C-state 6 (sleeping state). The stages vary by the depth of sleep, that can be attained by setting the value of enable_rc6 between 1 to 7 in ascending order as can be seen in its documentation with modinfo i915 command shown above.
Warning: Keep in mind that c-state power saving always comes at performance sacrifice and setting a higher value can cause a jittery display or some other unexplained and unexpected misbehavior with i915 so you may want to experiment with different values to find out what suits your needs.

TrackPoint scrolling (wheel emulation)

Merge-arrows-2.pngThis article or section is a candidate for merging with TrackPoint.Merge-arrows-2.png

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Lenovo ThinkPad X230#)

To enable scrolling with the TrackPoint while holding down the middle mouse button, create a new file /etc/X11/xorg.conf.d/20-thinkpad.conf with the following content:

Section "InputClass"
    Identifier	"Trackpoint Wheel Emulation"
    MatchProduct	"TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device"
    MatchDevicePath	"/dev/input/event*"
    Option		"EmulateWheel"		"true"
    Option		"EmulateWheelButton"	"2"
    Option		"Emulate3Buttons"	"false"
    Option		"XAxisMapping"		"6 7"
    Option		"YAxisMapping"		"4 5"

There are more details about how this works on the Xorg page.


The original configuration renders the touchpad quite useless, as it behaves very jumpily. [Ubuntu Bugtracker] offers a solution for this issue. Add the following

Section "InputClass"
        Identifier "touchpad"
        MatchProduct "SynPS/2 Synaptics TouchPad"
        # MatchTag "lenovo_x230_all"
        Driver "synaptics"
        # fix touchpad resolution
        Option "VertResolution" "100"
        Option "HorizResolution" "65"
        # disable synaptics driver pointer acceleration
        Option "MinSpeed" "1"
        Option "MaxSpeed" "1"
        # tweak the X-server pointer acceleration
        Option "AccelerationProfile" "2"
        Option "AdaptiveDeceleration" "16"
        Option "ConstantDeceleration" "16"
        Option "VelocityScale" "20"
        Option "AccelerationNumerator" "30"
        Option "AccelerationDenominator" "10"
        Option "AccelerationThreshold" "10"
	# Disable two fingers right mouse click
	Option "TapButton2" "0"
        Option "HorizHysteresis" "100"
        Option "VertHysteresis" "100"

Setting e.g. the motion-acceleration value in dconf to 2.8 works nicely.

Backlight Control Keys

Note: On most X230 models, backlight works by default without any issues. Use below only in case of any problems.

Due to an issue with the firmware of several ThinkPads the backlight control keys (fn + F8/F9 on the X230) don't work correctly. Setting the brightness via e.g. the GNOME power control panel or altering the brightness value in sysfs is possible.

The issue can be temporarily and partially fixed in adding the acpi_osi="!Windows 2012" kernel parameter in

GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_osi=\"!Windows 2012\""

sudo grub-mkconfig -o /boot/grub/grub.cfg

The fix is partial in that only 8 steps are accessible via the keys.

For more information see https://bugzilla.kernel.org/show_bug.cgi?id=51231 .

Power Saving

Follow the main article: Power saving

Tip: The parameter pcie_aspm may not be needed in the more recent 3.9+ kernels. Don't enable pcie_aspm if dmesg | grep -i "doesn't support pcie aspm" is true because even if you do, kernel will still keep it disabled.
Tip: You can select a different patched kernel for desired speed vs performance requirement. See Kernels for details. There is also Power_saving wiki for reducing battery usage.

One option is to use Powerdown to save power. On this setup, it gave 14+ hours on a 9 cell battery and 6+ hours on plugable 6 cell external battery, with normal usage of cmus, firefox and thunderbird. Power saving kernel parameters in addition to graphics card power saving, are shown below.

grep GRUB_CMDLINE /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1 elevator=bfq"
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd pcie_aspm=force acpi_backlight=vendor"

The parameter elevator=bfq enables the Budget Fair Queueing storage IO scheduler, see http://algo.ing.unimo.it/people/paolo/disk_sched/ for details. pcie_aspm=force forcefully enables the PCIE Active State Power Management and acpi_backlight=vendor loads the vendor specific Backlight#ACPI driver (i.e. thinkpad_acpi) so the brightness keys (Fn + F8 and Fn + F9) work correctly. After editing the grub file, make sure to regenerate your grub configuration by the command grub-mkconfig -o /boot/grub/grub.cfg.

Note that the acpi_backlight=vendor kernel option also works with the standard Arch kernel (currently 3.7.10-1) and has the additional bonus that (Fn + spacebar) controls the keyboard lighting.


Users of TLP need to pay attention to a hardware bug according to which it is recommended to only use either the upper or lower charging threshold. The following configuration is recommended by the developer of TLP.[1]


Suspend to ram

Sleep/suspension and unsuspension can be easily managed by systemd without setting it up in Desktop Environment applet or pm-utils. But there are some modules that must be loaded off and on every time the system is put to sleep or is awaken. There's also a need to kill wpa_supplicant by adding systemctl restart wpa_supplicant.service in the sleep.sh file below. And it is quite fast with systemd anyway.

if [ "$1" = "pre" ]; then
	killall -9 wpa_supplicant #nm-applet bug's workaround

if [ "$1" = "post" ]; then
        /sbin/modprobe -rvf iwldvm
        /sbin/modprobe -rvf iwlwifi
	/sbin/modprobe -v iwldvm
	/sbin/modprobe -v iwlwifi


Put vboxdrv in it too, if you use VirtualBox. There is also an issue with system shutdown with power saving tools that cannot distinguish sys devices. You will need to add to the systemd shutdown trigger on this machine or else you'll get a system reboot when you shutdown the machine. Put this in /etc/rc.local.shutdown and update and enable its service, if not already.

# /etc/rc.local.shutdown: Local shutdown script.
# A script to act as a workaround for the bug in the runtime power management module, which causes thinkpad laptops to restart after shutting down. 
# Bus list for the runtime power management module.
buslist="pci i2c"
for bus in $buslist; do                                                             
  for i in /sys/bus/$bus/devices/*/power/control; do                              
    echo on > $i
Description=/etc/rc.local.shutdown Compatibility
After=rc-local.service basic.target


Suspend to ram fails

As of kernel 3.10 and 3.11 suspend may fail because the kernel tries to switch off the onboard ethernet device twice (see http://forums.fedoraforum.org/archive/index.php/t-293457.html).

A workaround is to unload the driver manually and reload it on wake.

# /usr/lib/systemd/system-sleep/e1000e-probe.sh
# handles e1000e driver suspend problems:
#	pci_pm_suspend(): e1000_suspend+0x0/0x20 [e1000e] returns -2
#	dpm_run_callback(): pci_pm_suspend+0x0/0x150 returns -2
#	PM: Device 0000:00:19.0 failed to suspend async: error -2
#	PM: Some devices failed to suspend

case "$1" in
   "pre") rmmod e1000e
   "post") modprobe e1000e