Lenovo ThinkPad X230
Template:Article summary start Template:Article summary text Template:Article summary end
Lenovo ThinkPad X230 comes off with a wide range of available configurations. Since Lenovo's acquisition of ThinkPad brand from IBM, it has received lots of negative critics 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.
Contents
Hardware
Below is the short list for this setup. After-market RAMs and SSD were bought because Lenovo is apparently charging a lot for these.
Tested Configuration
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 |
Compatibility
Everything works fine out-of-box except the biometric / fingerprint scanner cause of missing driver. X230 comes with a newer model of chip from Upek. Its manufacturer Authentec was contacted and we found that they only support Windows operating system. So for now, the Upek model with PCIE ID 147e:2020 or newer will remain unsupported in Linux until someone writes an open source driver.
System Configuration
Systemd
Configured as usual with readahead and the below services.
- NetworkManager
- cups
- slim
- sshd
- syslog-ng
- vnstat
- cronie
- atd
Boot time was as roughly ~4-5 seconds.
Kernel
If you really want to cut power then neither the stock kernel nor the Arch supplied kernel is optimized to run on any laptop efficiently. Try the patched kernels like linux-ck or linux-pf instead.
/etc/mkinitcpio.conf
MODULES="i915" BINARIES="badblocks" FILES="/etc/modprobe.d/modprobe.conf" HOOKS="base udev autodetect block filesystems keyboard fsck plymouth"
/etc/modprobe.d/modprobe.conf
options i915 i915_enable_rc6=1 i915_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. First line in modprobe.conf file enables different Intel HD power saving options. To see what each of the parameters does, issue a command modinfo i915
. The second line disables the wifi N mode as Intel wireless driver suffers connection loss due to possible bugs. You can comment on 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 command mkinitcpio -p linux && mkinitcpio -p linux-ck
.
TrackPoint
Pretty much self-explanatory.
/etc/X11/xorg.conf.d/20-thinkpad.conf
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" EndSection
Touchpad
The original configuration renders the touchpad quite useless, as it behaves very jumpy. [Ubuntu Bugtracker] offers a solution for this issue. Add the following
/etc/X11/xorg.conf.d/50-synaptics.conf
Section "InputClass" Identifier "touchpad" MatchProduct "SynPS/2 Synaptics TouchPad" 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" "32" EndSection
Setting e.g. the motion-acceleration value in dconf to 2.8 works nicely.
Backlight Control Keys
Due to an issue with the firmware of several ThinkPads the backlight control keys (fn + F7/F8 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
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_osi=\"!Windows 2012\"" sudo grub-mkconfig -o /boot/grub/grub.cfg
The fix is partially 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
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 as under.
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 Brain Fuck Scheduler written by Con Kolivas, part of Linux-ck and Linux-pf kernel forks. pcie_aspm=force
forcefully enables the PCIE Active State Power Management and apci_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 command grub-mkconfig -o /boot/grub/grub.cfg
.
Note that the apci_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.
Suspension
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 below sleep.sh
file. And it is quite fast with systemd anyway.
/usr/lib/systemd/system-sleep/sleep.sh
#!/bin/bash if [ "$1" = "pre" ]; then killall -9 wpa_supplicant #nm-applet bug's workaround fi if [ "$1" = "post" ]; then /sbin/modprobe -rvf iwldvm /sbin/modprobe -rvf iwlwifi /sbin/modprobe -v iwldvm /sbin/modprobe -v iwlwifi fi
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
#!/bin/bash # /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 done done
/usr/lib/systemd/system/rc-local-shutdown.service
[Unit] Description=/etc/rc.local.shutdown Compatibility ConditionFileIsExecutable=/etc/rc.local.shutdown DefaultDependencies=no After=rc-local.service basic.target Before=shutdown.target [Service] Type=oneshot ExecStart=/etc/rc.local.shutdown StandardInput=tty RemainAfterExit=yes