Installing Ubuntu 10.04 (Lucid Lynx) on a ThinkPad X61 Tablet

From ThinkWiki
Jump to: navigation, search

This is a notes page for now. It will improve with time I have blatantly copied the 9.04 page as a template.

Introduction

This page covers the additional hardware setup required after installing Ubuntu 10.04 (Lucid Lynx) to make the Thinkpad X61 Tablet Fully Functional.

What Works

Tested

Audio Buttons, Brightness Fn Buttons, Radio Fn Button, Suspend Fn Button, Tablet L/R/U/D Buttons, Tablet Enter Button, Tablet Esc Button, NumberLock Fn Button, Tablet Pen, Wireless Radio,

Assumed Working

Forward / Back Buttons, Power Fn Button, Lock Fn Button, Hibernate Fn Button, Media Fn Buttons Bluetooth Radio,

What Almost Works

Tablet Toolbox Button - causes lock or suspend, Tablet Touch – Requires Calibration.

What Does Not Work

Tablet Control-Alt-Delete Button, Tablet Rotate Button, Middle Mouse Button, ThinkVantage Button, Magnify Fn Button, Fingerprint Reader, Automatic Screen Rotation, ThinkVantage ActiveProtection,

Setup Stylus and Rotate

This is the easiest and most reliable way I found out how to get it working. Quick and Easy.

Stylus:

In order to prevent the stylus from sending clicks when the tip isn’t touching the screen and map the single button to a left-click.

Source: Peterbn on Wordpress

Add the following to the 10-wacom.conf file (Identifier "Wacom serial class"):

  • Option "TPCButton" "on"
  • Option "Button2" "3"
sudo gedit /usr/share/X11/xorg.conf.d/10-wacom.conf 

This is how the section should look like:

Section "InputClass"
Identifier "Wacom serial class"
MatchProduct "Serial Wacom Tablet"
Driver "wacom"
Option "ForceDevice" "ISDV4"
Option "TPCButton" "on"
Option "Button2" "3"
EndSection

Rotate:

Rotate the screen and the pen with the rotation button.

Source:

First install wacomrotate:

sudo add-apt-repository ppa:thjaeger/tabletpc
sudo apt-get update
sudo apt-get install wacomrotate

Create a file to store the current rotation data:

sudo gedit /usr/bin/rotationmode

fill this file with:

0

and make it editable, but not executable

sudo chmod 666 /usr/bin/rotationmode

Now we will write the script to rotate the screen

sudo gedit /usr/bin/rotatebutton

And fill it with:

mode=`cat /usr/bin/rotationmode`
if test 0 = $mode
then
echo 1 > /usr/bin/rotationmode
xrandr -o right
fi
if test 1 = $mode
then
echo 2 > /usr/bin/rotationmode
xrandr -o inverted
fi
if test 2 = $mode
then
echo 3 > /usr/bin/rotationmode
xrandr -o left
fi
if test 3 = $mode
then
echo 0 > /usr/bin/rotationmode
xrandr -o normal
fi

Make it executable:

sudo chmod +x /usr/bin/rotatebutton

Now typing rotatebutton in terminal should go through all of the rotations. To map the command to the button go to System>Preferences>Keyboard Shortcuts, click the Add button at the bottom, name it whatever you want and use the command rotatebutton. Then bind the key by clicking in the shortcut column and pressing the tablet rotate key.

PS: I prefer only to have normal and inverted rotation in my button, in which occasion you can modify the script to something like:

mode=`cat /usr/bin/rotationmode`
if test 0 = $mode
then
echo 1 > /usr/bin/rotationmode
xrandr -o inverted
fi
if test 1 = $mode
then
echo 0 > /usr/bin/rotationmode
xrandr -o normal
fi

Fixing Touch

Works out of the box, just needs some calibration.

xsetwacom

It took me some time to find this one. So, i'll post it here so you won't have to spend time finding it. These numbers calibrate touch for my X61. I hope it will be the same for other X61's.

#!/bin/sh
xsetwacom set "Serial Wacom Tablet touch" topy "85"
xsetwacom set "Serial Wacom Tablet touch" topx "51"
xsetwacom set "Serial Wacom Tablet touch" bottomx "933"
xsetwacom set "Serial Wacom Tablet touch" bottomy "957"

The numbers where acquired using xinput_calibrator.

If you are getting "Unknown parameter name" errors then try this notation:

xsetwacom set "Serial Wacom Tablet touch" Area 51 85 947 943

xinput_calibrator

http://www.freedesktop.org/wiki/Software/xinput_calibrator

Using this tool you can find the numbers to calibrate your touchscreen. It's a pity it is still not in the repositories (as of 24/06/2010)

Install as per instructions on the freedesktop site.

Then run:

xinput_calibrator_x11 --device "Serial Wacom Tablet touch"

The tool does not actually calibrate the tablet. It merely shows you the numbers needed for calibration. Work in progress, i guess.

Wacomcpl (Will not work because HAL is missing)

(I think, it isn't working, because we haven't got wacomcpl in 10.04.)


Wacomcpl is no longer available in 10.04. The new package is xserver-xorg-input-wacom. How to calibrate the screen is being looked into. The xsetwacom command is still intact to set the calibrations though.


The Wacom Tablet in the X61t is a serial Wacom tablet. It can be configured by using wacomcpl. Wacomcpl is part of the wacom-tools package and can be retrieved in apt:

sudo apt-get install wacom-tools

After this wacomcpl can be run by typing:

wacomcpl

in Terminal.

Helping wacomcpl

Unfortunately HAL assigns names to wacom devices in a way that the recent wacomcpl from jaunty cant find them, to help wacomcpl to find them:

Open a terminal and type:

sudo gedit /etc/init.d/wacomtohal

and paste this code in:

#! /bin/sh
## find any wacom devices
for udi in `hal-find-by-property --key input.x11_driver --string wacom`
do
type=`hal-get-property --udi $udi --key input.x11_options.Type`
## rewrite the names that the Xserver will use
hal-set-property --udi $udi --key info.product --string $type
done

then run :

sudo chmod +x /etc/init.d/wacomtohal
sudo update-rc.d wacomtohal defaults 27


now reboot and launch wacomcpl

Making Wacomcpl Settings Restore on Reboot

If you lose your calibration after reboot:

In terminal:

sudo gedit ~/.xinitrc

Find the line that says:

. /etc/X11/xinit/xinitrc

and change it to

#. /etc/X11/xinit/xinitrc

Save and exit.

Go to System>Preferences>Startup Applications and create a new entry named whatever you want.

The command should be:

sh /home/yourusername/.xinitrc

Your wacomcpl settings will now restore on reboot

Fixing the Tablet Toolbox Button

This key needs to be set to a keycode. Pick any empty one (241 is usually empty)

sudo setkeycodes 68 241

Now you can bind this key to any command.

Setup the Tablet Control-Alt-Delete Button

This key needs to be set to a keycode. Pick any empty one (242 is usually empty)

sudo setkeycodes 67 242

Now you can bind this key to any command.

Setup the Tablet Rotate Button

This key needs to be set to a keycode. Pick any empty one (240 is usually empty)

sudo setkeycodes 6c 240

Now you can bind this key to any command. (It should be possible to write a script to interact with the autorotate given on this page)

Setup the Middle Button Scrolling

The easy apt-get way

sudo apt-get install gpointing-device-settings


The hard way

Which probably will not work because it depends op HAL.

Open a terminal and run each of the following for vertical scrolling:

xinput set-prop 'TPPS/2 IBM TrackPoint' "Evdev Wheel Emulation" 1
xinput set-prop 'TPPS/2 IBM TrackPoint' "Evdev Wheel Emulation Button" 2
xinput set-prop 'TPPS/2 IBM TrackPoint' "Evdev Wheel Emulation Timeout" 200

Add the following if you want horizontal scrolling:

xinput set-prop 'TPPS/2 IBM TrackPoint' "Evdev Wheel Emulation Axes" 6 7 4 5

If you do not want to run these commands every time you restart your computer, copy them to a script file.

In Ubuntu, create a new file in your Home directory called "Mouse_Wheel.sh". Using gedit, paste the commands into the file and save.

Open the terminal and type:

chmod +x Mouse_Wheel.sh

Go to System > Preferences > Startup Applications. Click on "Add", in the Name box type "Mouse Wheel" and in the Command box type "./Mouse_Wheel.sh".


In Kubuntu, place the script file in ~/.kde/Autostart.


HAL has been deprecated so the following might still work but is not suggested: Create a new file called /etc/hal/fdi/policy/mouse-wheel.fdi typing:

sudo gedit /etc/hal/fdi/policy/mouse-wheel.fdi

And fill it with this code:

<?xml version="1.0" encoding="UTF-8"?> 

 <match key="info.product" string="TPPS/2 IBM TrackPoint">
 <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
 <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
 <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
 <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
 <merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge>
 <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>


Reboot

Setup ThinkVantage Button

The ThinkVantage button does not work only in that it is not bound to anything. To bind it go to System>Preferences>Keyboard Shortcuts and set it to perform any command.

Setup Magnify Fn Button

No Solution Yet.

Setup Fingerprint Reader

The Thinkfinger driver works fine on the X61. The following is the paraphrased commands from the installing thinkfinger page that are relevant to the X61 and Ubuntu 9.04.

In terminal, add a key:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com F2A12FABE936A7BBDC4EA33351DB180D1323E149

Add the PPA repositories to your sources.list (/etc/apt/sources.list):

deb http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main

Update installer:

sudo apt-get update

And install:

sudo apt-get install thinkfinger-tools libpam-thinkfinger

Now the driver is installed and should be working. You can try it (as root) with

sudo tf-tool --acquire 

and

sudo tf-tool --verify 

This will ask you to swipe your finger three times, save the fingerprint to /tmp/test.bir and then verify your fingerprint with the bir-file.

Setup Pam:

sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable

Add user:

tf-tool --acquire $USERNAME

Optional: Change the login screen to allow keyboard-less login:

Go to: System>Administration>Login Window

Click on the 'Local' tab.

Set the drop-down boxes to: 'Themed with face browser' and 'Selected Only' and choose 'Human List' from the list of logins.

Note: it may take some time for the reader to startup, give it 5 seconds before use and before pressing enter to initiate login.

Setup Automatic Screen Rotation

Automatic Switching from Laptop to Tablet mode

The following was inspired by Installing Ubuntu 8.10 (Intrepid Ibex) on an X61 Tablet, with some minor additions:

  • put the following in /etc/acpi/events/lenovo-rotate-normal
# /etc/acpi/events/lenovo-rotate-normal
# This is called when the user rotates the screen to laptop mode

event=ibm/hotkey HKEY 00000080 0000500a
action=/etc/acpi/thinkpad-rotatescreen.sh right
  • put the following in /etc/acpi/events/lenovo-rotate-tablet
# /etc/acpi/events/lenovo-rotate-tablet
# This is called when the user rotates the screen to tablet mode

event=ibm/hotkey HKEY 00000080 00005009
action=/etc/acpi/thinkpad-rotatescreen.sh normal
  • put the following in /etc/acpi/thinkpad-rotatescreen.sh and make it executable
#!/bin/sh
#
# This script rotates the display in TabletPCs when screen is changed from
# laptop to tablet mode, or when rotation button is pressed

test -f /usr/share/acpi-support/key-constants || exit 0

. /usr/share/acpi-support/power-funcs

# i'm not trusting this ...
#if [ -f /var/lib/acpi-support/screen-rotation ] ; then
#  ROTATION=`cat /var/lib/acpi-support/screen-rotation`
#fi

# ... and thus calling this with a parameter
ROTATION="$1" # this should be called "ROTATION_FROM"

case "$ROTATION" in
	right)
	NEW_ROTATION="normal"
	NEW_WACOM="none"
	;;
	*)
	NEW_ROTATION="right"
	NEW_WACOM="cw"
	;;
esac

for x in /tmp/.X11-unix/*; do
	displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
	getXconsole;
	if [ x"$XAUTHORITY" != x"" ]; then
	    export DISPLAY=":$displaynum"           
	    /usr/bin/xrandr -o $NEW_ROTATION && echo $NEW_ROTATION > /var/lib/acpi-support/screen-rotation

	    # rotate the stylus
	    for type in "Serial Wacom Tablet eraser" "Serial Wacom Tablet touch" "Serial Wacom Tablet"  ; do
		/usr/bin/xsetwacom set "$type" rotate $NEW_WACOM
	    done

	    # rotate the arrow keys
	    case "$NEW_ROTATION" in
		right)
			xmodmap - <<END
keycode 114 = Up NoSymbol Up NoSymbol Up
keycode 111 = Left NoSymbol Left NoSymbol Left
keycode 116 = Right NoSymbol Right NoSymbol Right
keycode 113 = Down NoSymbol Down NoSymbol Down
END
			;;
		*)
			xmodmap - <<END
keycode 111 = Up NoSymbol Up NoSymbol Up
keycode 113 = Left NoSymbol Left NoSymbol Left
keycode 114 = Right NoSymbol Right NoSymbol Right
keycode 116 = Down NoSymbol Down NoSymbol Down
END
			;;
	    esac
	fi
done


Note: check the output of

xsetwacom list dev

to identify the devices to put in the line

for type in "Serial Wacom Tablet eraser" "Serial Wacom Tablet touch" "Serial Wacom Tablet" ; do

My system has a touch and a cursor device.

Automatic rotating of display in Tablet mode

Install Karol Krizka's AutoRotate daemon.

sudo add-apt-repository ppa:kkrizka/thinkpad-x61t
sudo apt-get update
sudo apt-get install python-glib python-dbus python-xrandr autorotate

Set up the daemon to start with Gnome

sudo gedit /etc/gdm/Init/Default

Add the following line before the last "exit"

auto-rotate.py &

Save your work before restarting Gnome

sudo /etc/init.d/gdm restart

You're all set. Note that there is also a manual-rotate.py script that comes with AutoRotate that can be bound to the special function Rotate key. See the author's site above for help with setting the keyboard shortcuts.

Setup ThinkVantage ActiveProtection

sudo cp /etc/modules /etc/modules_backup
sudo aptitude install tp-smapi-source
sudo module-assistant prepare tp-smapi
sudo module-assistant auto-install tp-smapi
sudo modprobe tp-smapi
sudo aptitude install hdapsd
echo 'tp-smapi' | sudo tee -a /etc/modules


You can set the activeprotection sensivity:

cd /etc/default/
gedit hdapsd
# sensitivity
SENSITIVITY=25


Now you can try, if the modules are loaded yet. Do so with

lsmod | grep hdaps

if not perform:

sudo modprobe -a thinkpad_ec tp_smapi hdaps

If the installation of hdapsd succeeded, you can test it by typing this into your terminal:

sudo hdapsd -d sda -s 15 -a -v -y 

If you suddenly move your laptop the output will change! (stop it with pressing Ctr + C)

Useful Task: Disable Bluetooth on Startup

These instructions will disable the bluetooth radio being activated during the boot. The radio can then be activated at the users discretion using Fn F5 (Radio Fn Button).

edit /etc/rc.local and add:

chmod 666 /proc/acpi/ibm/bluetooth 
echo "disable" > /proc/acpi/ibm/bluetooth

before the 'exit 0' line

  • note chmod 666 makes this file editable by everyone, this may compromise security, try different settings to find the one that suits your needs (655 may work)
  • note proc is depreciated and may not work in future releases

Useful Task: Enable Laptop Mode

Laptop mode is a power saving tool that allows the hard drive to spin down to conserve battery power. This is disabled by default as it has been known to cause problems on some computers, but it appears to work on the X61t.

  • Warning: Laptop mode stores data in ram teporarily until it needs to write to disk. Power Loss in laptop mode could lead to significant data loss.
  • Warning: Excessive spin-up spin-down cycles will wear out your hard drive much more quickly than normal use. Be careful when configuring laptop mode settings.
  • Warning: Do Not Use Laptop Mode if you have a SSD. It is for platter drives only.

Edit /etc/default/acpi-support

sudo gedit /etc/default/acpi-support

Set: "ENABLE_LAPTOP_MODE=true"

Configure Laptop Mode

sudo gedit /etc/laptop-mode/laptop-mode.conf

Optional Task: Adjusting Trackpoint Settings

If you find that your trackpoint pointer is too slow, use control-trackpoint to adjust your settings.

To install, install sysfsutils first, as per tpctl's documentaton

 sudo apt-get install sysfsutils

then install the .deb from sourceforge (the graphical installer worked for me). Once installed, run:

 sudo configure-trackpoint

Sources

The above is a compilation of my notes from when I installed Jaunty on my X61t. The code and many of the instructions come from various pages and sources around the Internet. I will attempt to document them when time permits. If you see anything that should be added or wish to cite a source I missed, please edit the page.