Installing Debian Linux on the Thinkpad T450s

I just finished installing Debian Linux (Jessie 8.5) on my Thinkpad T450s and wanted to share my experience so it will benefit others.

Here are the specs for my machine:

  • Thinkpad T450s (20BX001PUS)
  • Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
  • Samsung K4B8G1646B-MYK0 4GB DDR3 1.35V 1600MHz RAM
    (I added an additional Crucial 8GB RAM stick)
  • Seagate ST500LM021-1KJ152 500GB 6GB/s 7mm SATA harddrive
  • SanDisk U110 16GB M.2 SATA 22x42mm caching SSD
  • Innolux N140FGE-EA2 TN 1600×900 matte screen
    (I replaced this with a InnoLux N140HCE-EAA IPS 1920×1080 matte screen)
  • Intel 7265 Wireless (WiFi and Bluetooth)
  • Realtek RTS5227 PCI Express Card Reader
  • Chicony webcam
  • Validity Sensors VFS5011 fingerprint reader (ID: 138a:0017)

The installation went smoothly except that the Intel 7265 Wireless card requires the proprietary firmware-iwlwifi driver, which can be installed from the Debian non-free repository. If you are like me and are using WiFi for your internet connection, then download the firmware-iwlwifi package for Jessie and place it on a USB memory stick. When the Installation Wizard  fails to activate the wireless device for internet access, an error message will appears and ask you if you have the driver. Stick the USB pendrive in the computer and install it.

If you don’t install it that way, then after finishing the install, you can install it from the Debian repos if you have an internet connection through an ethernet cable:

su
apt-get install firmware-iwlwifi

If you don’t have an ethernet cable, then you can install it manually from the downloaded .deb package file:

su
dpkg -i firmware-iwlwifi_0.43_all.deb

Upgrading the kernel
After installing, I found that the 3.16 kernel used by Debian Jessie doesn’t support hibernation in the T450s, so I installed the 4.6 kernel from the Backports repository which does support hibernation:

1. Edit the file /etc/apt/sources.list and add the line:

deb http://http.debian.net/debian/ jessie-backports main contrib non-free

2. Then, update the package list:

apt-get update

3. Then install the latest kernel in the Backports repo:

apt-get install -t jessie-backports linux-image-amd64 linux-headers-amd64

To get hardware video acceleration with the new kernel, a new Intel graphics driver will also need to be installed from Backports:

apt-get -t jessie-backports install xserver-xorg-video-intel

4. If needing to control which packages are loaded from the jessie-backports repository, then set the pinning by creating the /etc/apt/preferences.d/backports file with the following content:

Package: linux-image-*
Pin: release a=jessie-backports
Pin-Priority: 1001

Package: linux-headers-*
Pin: release a=jessie-backports
Pin-Priority: 1001

Package: *
Pin: release a=jessie-backports
Pin-Priority: 499

Updating the kernel will fix hibernation, but it also break the wifi and bluetooth, because a more recent driver is needed for kernel 4.6. If you install the firmware-iwlwifi package from the testing repo, the WiFi will only work sporadically. If you run dmesg, you will see error messages that the driver is looking for the intel/ibt-hw-37.8.10-fw-1.10.3.11.e.bseq firmware for bluetooth and the  iwlwifi-7265D-21-ucode firmware for wifi:

[    7.333496] Bluetooth: hci0: read Intel version: 370810011003110e00
[    7.333784] bluetooth hci0: firmware: failed to load intel/ibt-hw-37.8.10-fw-1.10.3.11.e.bseq (-2)
[    7.333840] bluetooth hci0: Direct firmware load for intel/ibt-hw-37.8.10-fw-1.10.3.11.e.bseq failed with error -2
[    7.333842] Bluetooth: hci0 failed to open Intel firmware file: intel/ibt-hw-37.8.10-fw-1.10.3.11.e.bseq(-2)
[    7.364960] bluetooth hci0: firmware: direct-loading firmware intel/ibt-hw-37.8.bseq
[    7.364967] Bluetooth: hci0: Intel Bluetooth firmware file: intel/ibt-hw-37.8.bseq
[    7.368487] Bluetooth: hci0: Intel Bluetooth firmware patch completed
[    7.463694] Intel(R) Wireless WiFi driver for Linux
[    7.463696] Copyright(c) 2003- 2015 Intel Corporation
[    7.464889] iwlwifi 0000:03:00.0: firmware: failed to load iwlwifi-7265D-21.ucode (-2)
[    7.464949] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-7265D-21.ucode failed with error -2

The bluetooth can enabled by installing the firmware-iwlwifi package from jessie-backports or from sid:

apt-get install -t jessie-backports firmware-iwlwifi

However, the wifi will still not work reliably, because this package installs the iwlwifi-7265D-16-ucode firmware, which cuts out frequently. The solution I found is to go to the iwlwifi web site and download the iwlwifi-7265D-21-ucode firmware. Then, copy it into the /lib/firmware directory:

cp iwlwifi-7265D-21.ucode /lib/firmware/

This is the first time in 15 years of using Linux that I had to hunt down the firmware outside the repositories of my Linux distribution. I use Debian, because it encourages people to only use free software, but still includes a “non-free” repository when you need it. Debian doesn’t make it convenient to download and install proprietary drivers like Ubuntu or simply include them by default like Mint, so I think it strikes a happy medium, between making a point and helping people to find the right driver to run their hardware.

While I believe in Richard Stallman’s call to use a totally free operating system, it is very hard to find a laptop which doesn’t require some proprietary firmware in the wireless card. If looking for a wireless card without proprietary firmware, there are none for which support 802.11ac, and for 802.11n, only the Atheros AR9462 chipset is dual band and can be found with an M.2 package that fits in the T450s.

Upgrading the kernel will also break the installation of Virtualbox. To solve this problem, first uninstall virtualbox, then install it from jessie-backports:

apt-get purge virtualbox
apt-get install -t jessie-backports virtualbox

Touchpad
The touchpad is acceptable in GNOME 3 Shell, but jumps all over the place when I’m typing in the Cinnamon desktop. It appears that recent Linux kernels are not able to get information about the finger width  from the Synaptics touchpad in the T450s, so palm detection does not work. At least I assume this is the problem because turning on palm detection with synclient does nothing:

synclient PalmDetect=1 PalmMinZ=100

A patch has been created to fix the problem, but it requires recompiling the kernel, so for now I am using syndaemon to turn off the mouse for a second while I type :

syndaemon -i 1.0 -d -K -R

I have added this command to the list of “Startup Applications” in Cinnamon so it is executed automatically on each new login. The mouse has frozen on the screen several times when I have been running syndaemon. The only workaround I have found is to enter the following commands in a terminal to reload the psmouse kernel module:

su
modprobe -r psmouse; modprobe psmouse

This problem has occurred so often, that I decided to make it as easy as possible to execute. First, I created a configuration file for the Synaptics touchpad at /etc/X11/Xsession.d/80synaptics with the following content:

#https://wiki.archlinux.org/index.php/Touchpad_Synaptics
#Palm dimension
synclient PalmDetect=1
synclient PalmMinWidth=3
synclient PalmMinZ=50

#Touchpad sensibility (move)
#synclient FingerLow=10
#synclient FingerHigh=20

#Click detection
#synclient MaxTapTime=180
#synclient MaxTapMove = 242
#synclient MaxDoubleTapTime = 180

synclient TapButton1=1
synclient TapButton2=3
synclient TapButton3=2
synclient ClickFinger1=1
synclient ClickFinger2=3
synclient ClickFinger3=2
#2 finger = right click
#synclient TapButton2=0
#3 finger = middle click
#synclient TapButton3=2
#click corners
#synclient RBCornerButton=0 MaxTapTime
#synclient RTCornerButton=0
#synclient LTCornerButton=0
#synclient LBCornerButton=0

#Oval instead of rectangular
#synclient CircularPad=1

#TapAndDragGesture
#synclient TapAndDragGesture=1

#scroll in sides
synclient VertEdgeScroll=1
synclient HorizEdgeScroll=1
synclient CornerCoasting=1

#2 finger scroll
#synclient VertTwoFingerScroll=1
#synclient HorizTwoFingerScroll=0

#Disable Touchpad on start
#synclient TouchpadOff=1

synclient MaxSpeed=2
synclient AccelFactor=0.05

Then, I created a script file named /usr/local/bin/restart-mouse with the following code:

modprobe -r psmouse
modprobe psmouse
sleep 1
sh /etc/X11/Xsession.d/80synaptics
syndaemon -i 1 -K -R

I added the sleep command, because found that I had to wait one second after reloading the psmouse module before configuring the mouse. Then, I edited my sudoers file:

visudo

And added the line:

amos ALL=NOPASSWD: /usr/local/bin/restart-mouse

where “amos” is the name of my user. Now, I can restart my mouse from the terminal with the command:

sudo restart-mouse

For greater convenience, I also added shortcut key combination to restart the mouse. In Menu > Preferences > Keyboard, I went to the “Keyboard shortcuts” tab and the “Custom Shortcuts” category. There I clicked on “Add custom shortcut” and added the command “sudo restart-mouse” which I tied to Ctrl+Alt+m. Now I can easily restart my mouse.

At the end of the day, I don’t recommend upgrading your kernel unless you need  hibernation, because it will introduce a number of problems.

Audio
The audio at 100% volume in Linux is not as loud as in Windows. This post suggests using pacmd to increase the volume.

However when I execute the command:

pacmd set-sink-volume 0 102400

The following error message is displayed:

Daemon not responding.

However, the volume control applet can increase the volume to 125%, which works well enough and VLC can be used to increase the volume 150%.

I bought a Jam Bluetooth speaker to get better audio. I can pair with my smartphone over Bluetooth, but it fails with the speaker. I could see the speaker and pair with it, but I couldn’t connect to it. The solution is to install the Bluetooth Manager and PulseAudio’s Bluetooth module:

apt-get install blueman pulseaudio-module-bluetooth

Running blueman makes the Bluetooth applet appear in the Cinnamon panel. The following command makes it possible to see the speaker without rebooting:

pactl load-module module-bluetooth-discover

Fingerprint Reader
The fingerprint reader does not work with fprintd, but it is possible to use it by compiling an experimental driver. Although I see little point in fingerprint readers, since I always configure my laptops to automatically login without a password, I compiled and installed fingerprint-gui and fprint_vfs5011 to test out the fingerprint reader. It seems to function, but I could never get fingerprint-gui to verify my fingerprint after I had registered it. No matter how many times I swiped it, I never could get my fingerprint to match. It seems that you have to swipe in exactly the same position and at the same speed. In the Windows configuration for the fingerprint reader, you can register 5 different swipes in different directions and speeds, so the finger recognition is decent. However, fingerprint-gui only allows you to swipe a finger once and you have to perfectly match that one swipe.

I could not figure out how to configure lightdm to use the fingerprint reader. It is probably a PAM configuration problem. I’m not going to bother fiddling with this, because the Linux software is so poor. Besides, I don’t worry about other people using my computer, so I edited /etc/lightdm/lightdm.conf and add two lines to get automatic login without a password:

autologin-user=amos
autologin-user-timeout=0

Keys and Indicator lights
The webcam and microphone works perfectly using Cheese. The media card reader can read SD cards. Most of the Fn+F* keys work, except for: Fn+F4 (Mute/Unmute microphone), Fn+F9 (Open Control Panel), Fn+F10 (Open search dialog) and Fn+F11 (view list of opened programs). In Cinnamon Fn+F12 opens the user’s home directory in the file manager, whereas in Windows it opens the Computer in the File Explorer.

The Fn+F1 (Mute/Unmute audio) does work, but it does not turn on the LED indicator light in the key. I fixed the indicator light by editing the file /etc/default/grub and changing the line from:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

to:

GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_osi=linux"

Then, to update the boot loader, I issued the command:

update-grub

Rants
I’m still angry at Lenovo for taking away the LED indicator lights for the harddrive, wifi and bluetooth, plus the key caps light, but at least I now have two out of the three of the LED lights working on the keyboard.

While I’m ranting,  I should mention that I still don’t like grub2, just like I don’t like gdm3. I often wonder if Linux programmers just change stuff for the sake of changing stuff. Systemd seems like a bad idea in its efforts to unify everything, which breaks the modular philosophy of UNIX, but at least I could see some justification for faster booting. I really can’t figure out the point of GNOME 3 rewriting every protocol and backend system.

Since I have started to vent, I might as well and talk about how much I detest the changes in GNOME 3. I used GNOME 3 shell for almost 2 years and its limitations caused me so much stress. I installed extension after extension, trying to find solutions but they never worked the way I wanted. I got angry every time I looked at the design decisions made by the GNOME developers.

I tried XFCE for a while, but it also proved to be a real hassle, since I often had to revert to the command line to do simple things like change the date/time of my sistem. I have been using Debian for so long, that I was reluctant to switch to Mint, despite all the good things I have been reading online about it. When Cinnamon was finally included in Debian 8, I installed it as my default desktop environment. I was shocked to find that the Cinnamon developers had pre-configured the desktop exactly the way I like it. With GNOME 2, I had to spend roughly 30 minutes after every install reconfiguring the desktop to have a single panel at the bottom of the screen with all the essential applets that I need.

Nemo, which is the default file manager for Cinnamon, is simply a delight to use. I used to get angry every time I looked at how the GNOME developers had stripped away essential functionality from Nautilus. I am so glad to get those functions back in Nemo.

All I can say is that Cinnamon and Nemo have given me back my sanity when I work. The only problem is that Cinnamon is not very stable. Simple things like plugging in a smartphone with ATB debugging enabled causes the desktop to get screwed up, so the windows switcher buttons in the panel don’t contain graphics and I can’t see the graphics for the programs when I press ALT+TAB to switch between programs. Sometimes I can bring back the desktop by pressing Alt+F2 and entering the command “r”. At other times, the only way to restore the desktop is to press CTRL+ALT+F1 and login as root. Then, issue the command to start a new login session:

service lightdm restart

The other major problem is the fact that Cinnamon doesn’t display a warning message when the battery gets low. Several times I have been working away and suddenly the laptop dies. Cinnamon is configured to go into hibernation if it sleeps when there is a low battery, but this doesn’t work when I’m using the computer. I still haven’t found an adequate program to alert me about a low battery. I need a big message to appear on the screen and probably a warning bell to sound.

Another annoyance of Cinnamon is the system bell, which is difficult to turn off. In GNOME terminal, I went to Edit > Profile Preferences > General and unmarked the Terminal bell option.

In Firefox, I entered: about:config in the address bar and set:

accessibility.typeaheadfind.enablesound   false

So far I haven’t heard that evil bell in any other programs. If it appears anywhere else, I have a whole list of other things I can try:
1. Create a file named /etc/modprobe.d/pcspkr.conf and add the following command to it:

blacklist pcspkr

2. Add the file ~/.config/gtk-3.0/settings.ini with the content:

[Settings]
gtk-error-bell = 0

3. Edit the file ~/.bashrc and add the line:

xset b off

Yes, all this configuration can be a pain, but it is also the price of computing freedom. At work I frequently have to write documentation on how to install software in Windows systems. Every time I use Windows in a virtual machine or via remote desktop, I bless my lucky stars that I have the technical skill to install Linux on my laptop. I first installed Linux in 1999 and now using Windows feels like I’m entering a prison, where everything is walled off and I can’t touch anything. I understand why people who don’t have much technical skill or people who don’t want to take the time might use Windows, since it comes preinstalled on your machine and seems to “just work”.

If you have every installed Windows from scratch, hunted down drivers on the internet and hand edited the registry, you know that Windows isn’t that easy to configure either. The difference with Windows is that the engineers at Lenovo, HP, Dell, etc. have spent hundreds of hours getting everything to just work. However, if you ever try to install a different version of Windows, where there are no drivers on the manufacturer’s website to download for your model of PC, you will find that Windows is much harder to configure.

When I am confronted with  problem in Windows, I just randomly install stuff and cross my fingers, hoping that it will work. With Linux, I have to read a lot and learn more about the system, but then my attempts to fix a problem make a lot more sense. If I don’t understand what something does, I can read the documentation and even hunt through the source code if necessary, but everything is discoverable. Most of the time I decide not to take the time to truly understand how the system works, but it is so liberating and empowering when I do take the time to learn what is happening under the hood.

Advertisements

One thought on “Installing Debian Linux on the Thinkpad T450s

  1. amosbatto Post author

    Today, I made the mistake of trying to upgrade my Thinkpad T450s to Debian Testing. After the upgrade, I found that I could not login to with LightDM. Reading online, I found several other people also have problems logging in with LightDM 1.18.2-2 found in Testing. I upgraded to LightDM 1.18.2-3 found in Sid and downgraded to LightDM 1.10.3-3 found in Jessie, but it proved impossible to login to X windows. When I tried installing gdm3, it borked the system, so I ended up having to reinstall everything. The moral of the story is don’t try to upgrade unless you have a backup copy of your important files.

    Like

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s