Lenovo X1 Carbon 2015 3rd gen 20 BS - trackpoint, clickpad and wifi

I have got a brand new Lenovo X1 Carbon 2015 with IPS Display which is really a great laptop. But when installing ubuntu there are some problems I have already solved and some I have not. I put this all in one questions as this might be a good reference for other users.

I have installed a fresh copy of ubuntu 14.04.02

Wifi is disconnecting

Wifi works first but is disconnecting after less than five minutes. If it disconnects it can't see the SSID anymore.

lspci | grep Wireless

04:00.0 Network controller: Intel Corporation Wireless 7265 (rev 3b)

Clickbuttons are not working at all

The Touchpad and trackpoint are working fine. The clickbuttons do not work. In some Programs they do a scroll down/scroll up.

Vertical Scrolling

After fixing the clickbuttons with psmouse proto=imps the trackpoint in combination with the middle button does no vertical scrolling

Special Keys (like Brightness)

Some keys like Volume up/down work out of the box, most don't (mute, Brightness, Wifi).

Screen Characters scrambled on 14.10

On 14.10 sometimes most characters on the screen are just simply gone or scrambled. It looks really weired.

UNRESOLVED: Trackpoint Sensitivity

With other thinkpad models you can control the sensitivity of the trackpoint with /sys/devices/platform/i8042/serio1/serio2/sensitivity

This file ist not available for me. I searched /sys/devices for a file called sensitivity without success.


Solution 1:

I recently purchased an X1 Carbon 3rd generation. I fought the issues you mention plus a few more. I kept a text log of all of the fixes and post as follows -

TrackPad Buttons:

  • /etc/modprobe.d/touchpad.conf:

    options psmouse proto=imps
    
  • update-initramfs -u

vertical and horizontal scrolling

http://www.thinkwiki.org/wiki/How_to_configure_the_TrackPoint#Configuration_using_xinput

create /usr/share/xsessions/mouse.sh (sudo chmod +x mouse.sh) with the following content:

xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation" 1
xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation Button" 2
xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation Timeout" 200
xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation Axes" 6 7 4 5

Backlight Brightness

http://ppa.launchpad.net/indicator-brightness/ppa/ubuntu/pool/main/i/indicator-brightness/

  • /etc/default/grub:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=vendor"
    
  • update-grub

  • sudo gedit /etc/rc.local

  • echo 167 > /sys/class/backlight/intel_backlight/brightness

fingerprint reader

http://www.saltycrane.com/blog/2014/12/setting-lenovo-thinkpad-x1-carbon-2nd-gen-fingerprint-reader-ubuntu-1404/

$ sudo apt-get install libmagickcore-dev
$ sudo apt-get install libusb-1.0.0-dev libnss3-dev libglib2.0-dev
$ sudo apt-get install libxv-dev
$ sudo apt-get install libtool
$ sudo apt-get install fprintd
$ sudo apt-get install automake
$ cd ~/Downloads
$ unzip fprint_vfs5011-faa090818200ca3ea6bfac8bb510e5e01a246c34.zip
$ cd fprint_vfs5011-faa090818200ca3ea6bfac8bb510e5e01a246c34
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo cp /lib/udev/rules.d/40-libfprint0.rules /etc/udev/rules.d/
$ sudo vi /etc/udev/rules.d/40-libfprint0.rules
# Validity VFS5011
SUBSYSTEM=="usb", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0017", ATTRS{dev}=="*", ATTR{power/control}="auto", MODE="0664", GROUP="plugdev"
$ sudo apt-add-repository ppa:fingerprint/fingerprint-gui
$ sudo apt-get update
$ sudo apt-get install libbsapi policykit-1-fingerprint-gui fingerprint-gui
$ fingerprint-gui

wifi disable 11N

  • add the following line in /etc/modprobe.d/iwlwifi.conf:

    options iwlwifi 11n_disable=1
    

Solution 2:

Wifi is disconnecting

Open a Terminal with Ctrl + Alt + T and enter

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
update-initramfs -u
reboot

You can try to use "11n_disable=8" to gain more speed as suggested in a comment. For me it didn't work as my wifi is unstable with "11n_disable=8" but your mileage may vary. I have no speed problems and no interrupt problems with "11n_disable=1".

Clickbuttons are not working at all

Open a Terminal with Ctrl + Alt + T and enter

sudo su
echo "options psmouse proto=imps" > /etc/modprobe.d/psmouse.conf
echo thinkpad_acpi > /etc/modules-load.d/thinkpad_acpi.conf
echo "options thinkpad_acpi force_load=1" > /etc/modprobe.d/thinkpad_acpi.conf 
update-initramfs -u
reboot

With this your buttons are working again. But you can't click on the complete touchpad anymore. Just the bottom of the touchpad recognizes clicks. But that's fine for me.

But the vertical scrolling with the middle button/trackpoint is not working. See below.

Special actions on Function keys

Open a Terminal with Ctrl + Alt + T and enter

sudo su
echo thinkpad_acpi > /etc/modules-load.d/thinkpad_acpi.conf
echo "options thinkpad_acpi force_load=1" > /etc/modprobe.d/thinkpad_acpi.conf 
update-initramfs -u
reboot

The special actions like Volume, Brightness, Beamer and Wifi toggle on F1-F8 are working now as expected. Special actions on F9-F12 are not working.

By the way: "FnLk" on the Esc Key means "Function Lock". You can activate the Function Lock with pressing Fn + Esc.

The brightness setting is not retained after a reboot.

Vertical Scrolling

Open a Terminal with Ctrl + Alt + T and enter

sudo su
export FILE="/etc/X11/Xsession.d/99trackpoint"
echo 'xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation" 1' > $FILE
echo 'xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation Button" 2' >> $FILE
echo 'xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation Timeout" 200' >> $FILE
echo 'xinput set-prop "PS/2 Synaptics TouchPad" "Evdev Wheel Emulation Axes" 6 7 4 5' >> $FILE
reboot

After rebooting you have vertical and horizontal scrolling with trackpoint and middle button.

Screen characters scrambled

Open a Terminal with Ctrl + Alt + T and enter

sudo su
mkdir /etc/X11/xorg.conf.d/
cd /etc/X11/xorg.conf.d/
echo 'Section "Device"'                      > 20-intel.conf
echo '    Identifier  "Intel Graphics"'     >> 20-intel.conf
echo '    Driver      "intel"'              >> 20-intel.conf
echo '    Option      "AccelMethod"  "uxa"' >> 20-intel.conf
echo 'EndSection'                           >> 20-intel.conf
reboot

Screen characters are not scrambled anymore.

Solution 3:

I'd just post this as a comment but don't have the rep. I've been making tweaks based on this post since I got the 2015 X1 Carbon, but hadn't solved everything. I started over yesterday with a completely fresh Vivid install and was pleasantly surprised to find zero issues, as in "just works."

In particular, the click buttons and trackpad are recognized and configurable under "Mouse and Touchpad" settings. Middle-click touchpoint and two-finger touchpad scroll work as expected.

This doesn't exactly solve the OP's problems with 14.04, but may be helpful to others who find this post.

Solution 4:

Here is my solution to the brightness issue:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(int args, char **argv)
{
    FILE *f;
    int cur_br, new_br;

    char cmd[256] = { 0, };
    if (args <= 1 || strnlen(argv[1], 256) >= 256) {
            printf("Set the screen brightness:\n\tbr 0-852 or [+-]\n\n");
            exit(1);
    }
    f = fopen("/sys/class/backlight/intel_backlight/brightness", "r+");
    if (f) {
            fscanf(f, "%d", &cur_br);
            fprintf(stderr, "%d\t%s", cur_br, argv[1]);
            if (strncmp(argv[1], "-", 1) == 0) {
                    new_br = (int)((float)cur_br / 1.1);
            } else if (strncmp(argv[1], "+", 1) == 0) {
                    new_br = (int)((float)(cur_br + 1) * 1.1);
            } else {
                    new_br = atoi(argv[1]);
            }
            if (new_br < 0) {
                    new_br = 0;
            } else if (new_br > 852) {
                    new_br = 852;
            }
            fprintf(stderr, "\t%d\n", new_br);
            fprintf(f, "%d", new_br);
            fclose(f);
    }
    return 0;
}

I have no idea why 852 is the magic number for max brightness (deduced it via trial and error). I bound my brightness keys to call this executable (has suid set) with either + or - as args. If you accidentally set brightness to 0 :D you can always execute with 500 (or 852) as the param.