ThinkPad X250 on CentOS 7
Wow, almost a year since the last post. Definitely time to reboot the blog.
Got to replace my aging ThinkPad X201 with a lovely shiny new ThinkPad X250 over the weekend. Specs are:
- CPU: Intel(R) Core(TM) i5-5300U CPU @ 2.30GHz
- RAM: 16GB PC3-12800 DDR3L SDRAM 1600MHz SODIMM
- Disk: 256GB SSD (swapped out for existing Samsung SSD)
- Display: 12.5" 1920x1080 IPS display, 400nit, non-touch
- Graphics: Intel Graphics 5500
- Wireless: Intel 7265 AC/B/G/N Dual Band Wireless and Bluetooth 4.0
- Batteries: 1 3-cell internal, 1 6-cell hot-swappable
A very nice piece of kit!
Just wanted to document what works and what doesn't (so far) on my standard OS, CentOS 7, with RH kernel 3.10.0-229.11.1. I had to install the following additional packages:
- iwl7265-firmware (for wireless support)
- acpid (for the media buttons)
Working so far:
- media buttons (Fn + F1/mute, F2/softer, F3/louder - see below for configuration)
- wifi button (Fn + F8 - worked out of the box)
- keyboard backlight (Fn + space, out of the box)
- sleep/resume (out of the box)
- touchpad hard buttons (see below)
- touchpad soft buttons (out of the box)
Not working / unconfigured so far:
- brightness buttons (Fn + F5/F6)
- fingerprint reader (supposedly works with
fprintd
)
Not working / no ACPI codes:
- mute microphone button (Fn + F4)
- application buttons (Fn + F9-F12)
Uncertain/not tested yet:
- switch video mode (Fn + F7)
To get the touchpad working I needed to use the "evdev" driver rather than the
"Synaptics" one - I added the following as /etc/X11/xorg.conf.d/90-evdev.conf
:
Section "InputClass" Identifier "Touchpad/TrackPoint" MatchProduct "PS/2 Synaptics TouchPad" MatchDriver "evdev" Option "EmulateWheel" "1" Option "EmulateWheelButton" "2" Option "Emulate3Buttons" "0" Option "XAxisMapping" "6 7" Option "YAxisMapping" "4 5" EndSection
This gives me 3 working hard buttons above the touchpad, including middle-mouse- button for paste.
To get fonts scaling properly I needed to add a monitor section as
/etc/X11/xorg.conf.d/50-monitor.conf
, specifically for the DisplaySize
:
Section "Monitor" Identifier "Monitor0" VendorName "Lenovo ThinkPad" ModelName "X250" DisplaySize 276 155 Option "DPMS" EndSection
and also set the dpi properly in my ~/.Xdefaults
:
*.dpi: 177
This fixes font size nicely in Firefox/Chrome and terminals for me.
I also found my mouse movement was too slow, which I fixed with:
xinput set-prop 11 "Device Accel Constant Deceleration" 0.7
(which I put in my old-school ~/.xsession
file).
Finally, getting the media keys involved installing acpid and setting up
the appropriate magic in 3 files in /etc/acpid/events
:
# /etc/acpi/events/volumedown event=button/volumedown action=/etc/acpi/actions/volume.sh down # /etc/acpi/events/volumeup event=button/volumeup action=/etc/acpi/actions/volume.sh up # /etc/acpi/events/volumemute event=button/mute action=/etc/acpi/actions/volume.sh mute
Those files capture the ACPI events and handle them via a custom script in
/etc/acpi/actions/volume.sh
, which uses amixer
from alsa-utils
. Volume
control worked just fine, but muting was a real pain to get working correctly
due to what seems like a bug in amixer - amixer -c1 sset Master playback toggle
doesn't toggle correctly - it mutes fine, but then doesn't unmute all
the channels it mutes!
I worked around it by figuring out the specific channels that sset Master
was muting, and then handling them individually, but it's definitely not as clean:
#!/bin/sh # # /etc/acpi/actions/volume.sh (must be executable) # PATH=/usr/bin die() { echo $* exit 1 } usage() { die "usage: $(basename $0) up|down|mute" } test -n "$1" || usage ACTION=$1 shift case $ACTION in up) amixer -q -c1 -M sset Master 5%+ unmute ;; down) amixer -q -c1 -M sset Master 5%- unmute ;; mute) # Ideally the next command should work, but it doesn't unmute correctly # amixer -q -c1 sset Master playback toggle # Manual version for ThinkPad X250 channels # If adapting for another machine, 'amixer -C$DEV contents' is your friend (NOT 'scontents'!) SOUND_IS_OFF=$(amixer -c1 cget iface=MIXER,name='Master Playback Switch' | grep 'values=off') if [ -n "$SOUND_IS_OFF" ]; then amixer -q -c1 cset iface=MIXER,name='Master Playback Switch' on amixer -q -c1 cset iface=MIXER,name='Headphone Playback Switch' on amixer -q -c1 cset iface=MIXER,name='Speaker Playback Switch' on else amixer -q -c1 cset iface=MIXER,name='Master Playback Switch' off amixer -q -c1 cset iface=MIXER,name='Headphone Playback Switch' off amixer -q -c1 cset iface=MIXER,name='Speaker Playback Switch' off fi ;; *) usage ;; esac
So in short, really pleased with the X250 so far - the screen is lovely, battery life seems great, I'm enjoying the keyboard, and most things have Just Worked or have been pretty easily configurable with CentOS. Happy camper!
References:
- https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X250
- http://vimtips.org/2015/02/20/ubuntu-1410-and-lenovo-thinkpad-x250/
- http://askubuntu.com/questions/586648/how-to-enable-physical-trackpoint-buttons-in-lenovo-x250
- https://www.reddit.com/r/thinkpad/comments/2ysing/experiences_with_the_x250_and_ubuntu/