UPDATE February 2, 2013: In one of the comments, see here, applying the patch described below resulted in a disabled mouse/touchpad. Although the solution may work for you, please note that this can happen.
Furthermore I would suggest to keep an eye on the bug I mention in this blog since a fix seems to be on the way.


In my previous blog post I wrote about my first steps with a 64-bit distro, in my case Ubuntu 12.04 LTS. Initially my thoughts were that the issues I encountered were merely to blame on the fact that I was new to the “64-bit world”. Since then I have somewhat changed my thoughts about this. As I see it now some issues are simply caused by the fact that my hardware – a Dell Latitude E6430 – consists of bits and pieces that are not (yet) included within the OS software. My understanding btw is that this is not limited to Linux only.

Comment before reading on: In this post you will find several commands issued. In front of the command you will find either a $ or a #, this is done on purpose. The commands with a $ in front were issued as a “regular user”, the commands with a # in front were issued as root.

Touchpad

One of the things I noticed while working (although I have to admit I rarely use the touchpad) is that amongst others scrolling did not work. As with previous issues I had Google helped me find that it was not new that the touchpad was not being detected on a Dell laptop as can be read in Ubuntu bug #606238. To check whether or not your touchpad is detected run the following command “xinput list”. In my case the intial outcome was as follows (partial output):

$ xinput list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                          id=14    [slave  pointer  (2)]

As can be seen above the touchpad is seen as a PS/2 Generic Mouse. Another “hint” is the fact that in the “Mouse  and touchpad” settings in “System Settings” the touchpad tab is missing.

Reading through the earlier indicated bug I came across the comment #139 plus comment #141 indicating the suggested solution worked for a Dell E6530. Searching the web I came across more positive comments for the indicated solution so I decided to also give it a go. Unfortunately I have very little (t0 no) knowledge of git so I needed some help. Decided to ask for it (comment #154) and got it (comment #155).

In this post I will try to describe as clearly as possible what steps I have taken. First: I have a sub-directory called “git” in my home directory (~) in which I clone git repositories. So after opening a terminal I went into this directory:

$ cd ~/git

Next I cloned the linux repository of bgamari, went into the created subdirectory and checked out the alps (touchpad) section. Below are the commands and their feedback (please note that the cloning can take some time)

$ git clone git://github.com/bgamari/linux.git
Cloning into 'linux'...
remote: Counting objects: 2536596, done.
remote: Compressing objects: 100% (762977/762977), done.
remote: Total 2536596 (delta 2086838), reused 2186798 (delta 1748516)
Receiving objects: 100% (2536596/2536596), 836.31 MiB | 540 KiB/s, done.
Resolving deltas: 100% (2086838/2086838), done.

$ cd linux
Note: This takes me in my case into the ~/git/linux directory

$ git checkout origin/alps
Note: checking out 'origin/alps'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at 1527416... alps: Add support for Dell Latitude E6430 touchpad

Now I had to get a “base” configuration file and run make

$ cp /boot/config-$(uname -r) .
Note: the “variable” uname -r will resolve into your currently running kernel

$ make oldconfig

The latter command will “ask” a lot of questions, I just accepted all the default settings. Not sure if that is the correct or best way to do it, but it did the trick for me. ;-)

Once this was completed I had to go into the “mouse” subdirectory and “build” the touchpad part

$ cd drivers/input/mouse/
Note: This takes me in my case into the ~/git/linux/drivers/input/mouse directory

$ make -C /lib/modules/`uname -r`/build M=`pwd` psmouse.ko
make: Entering directory `/usr/src/linux-headers-3.2.0-30-generic'
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/psmouse-base.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/synaptics.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/alps.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/elantech.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/logips2pp.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/lifebook.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/sentelic.o
CC [M]  /home/rdrijsen/git/linux/drivers/input/mouse/trackpoint.o
LD [M]  /home/rdrijsen/git/linux/drivers/input/mouse/psmouse.o
MODPOST 1 modules
CC      /home/rdrijsen/git/linux/drivers/input/mouse/psmouse.mod.o
LD [M]  /home/rdrijsen/git/linux/drivers/input/mouse/psmouse.ko
make: Leaving directory `/usr/src/linux-headers-3.2.0-30-generic'

Next change to root and issue the following commands

# rmmod psmouse

# insmod ./psmouse.ko

Now change back to a “regular user” and see if the touchpad is now detected. In my case it resulted in (partial output displayed):

$ xinput list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse             id=11    [slave  pointer  (2)]
⎜   ↳ DualPoint Stick                             id=14    [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad            id=16    [slave  pointer  (2)]

As can be seen my touchpad is now detected and no longer seen as a generic mouse. Scrolling now worked plus I can set the settings for a touchpad in the System Settings.

ALPS Touchpad SettingsHowever, the above fix works for the current session. Once you reboot the touchpad is no longer detected. I have used the steps below to make the change persistent over reboots.

First create a backup of the original psmouse.ko file in a backup directory (mine is named Ubuntu_64)

$ sudo cp /lib/modules/`uname -r`/kernel/drivers/input/mouse/psmouse.ko ~/Ubuntu_64/psmouse.ko.backup

Next place the psmouse.ko file that we have build into the original location

$ sudo cp ~/git/linux/drivers/input/mouse/psmouse.ko /lib/modules/`uname -r`/kernel/drivers/input/mouse/psmouse.ko

Remove the original “settings” and replace them with the new ones

$ sudo modprobe -r psmouse

$ sudo modprobe psmouse

Now also after reboots the touchpad is still detected and the scrolling works as it is supposed to.

I am not a real expert in this area of compiling modules but AFAIK you will have to replace the psmouse.ko with each kernel change (provided it is not fixed by then). Furthermore, the solution is experimental and thus YMMV. In other words: “use at own risk” :D

Fingerprint reader

Another nifty item on my laptop is the “fingerprint reader”. IMHO a nice gadget, fun to have. However, unfortunately, the one that is installed in my laptop is the one for which a driver is not (yet) available. The one I have is:

$ lsusb | grep -i fingerprint
Bus 002 Device 004: ID 0a5c:5801 Broadcom Corp. BCM5880 Secure Applications Processor with fingerprint swipe sensor

As can be read in Ubuntu bug #602071 there is no way (yet) to get this gadget working.  :'(

Conclusion

As indicated in the start of this post, my initial perception was that I still had to find my way around “64-bit country”.  Currently I believe that the issues that I have are also to blame by some of the hardware I have and/or the lack of (open source) drivers for these bits of hardware. The challenges I blame to hardware currently are:

  • the nVidia Optimus technology (workaround found by using Bumblebee)
  • the ALPS Touchpad (workaround decribed in this post)
  • the Broadcom fingerprint reader (no solution so far)

I do hope that my post can help others as well to workaround this issue.

About these ads