USB Mouse on Sony VAIO running Linux

I have a Sony VAIO notebook, model number PCG-Z600LE. It's a very nice little notebook, purchased back in 2001. My particular one has a Pentium III processor at 700MHz, 192MB of RAM and a 15GB drive. Linux seems to run on it very nicely, and improving all the time. It's currently running RedHat Linux 7.3 (kernel 2.4.18-10) with Ximian GNOME. Recently I discovered that Conexant's site now has a driver for the built in WinModem, sorry LinModem, and that seems to work really nicely. You need the HSF version of the driver - see for more info.

The notebook is really neat at just 1.7KG and the 12.1" TFT screen is quite usable (at least to me it is). The bit that I've always disliked about it is how my thumbs passing over the mouse pad caused the cursor to shoot all over the place and overtype some other random part of whatever it was I was working on. Since the machine has no PS/2 bus exposed what-so-ever and the standard serial port is part of the connector panel extension that replaces the battery, neither was really an option for as vital a piece of extra stuff as a mouse. Thus began a very long and often fruitless search for a three button USB mouse. I scoured shops across the UK, Singapore and Australia but failed to find a suitable mouse. Eventually I visited Frys Electronics in California (can't remember if it was one of the L.A. ones or one in the Bay Area) where they had a Kensington 3-button USB mouse (model no 19430), and it was also really cheap (sub $10 I think).

Thus equiped, I've set to on trying to get the mouse to talk to my notebook and more importantly the X server. The initial install had not seen fit to bother installing any of the USB sub-system into the kernel, so that was the first task. Obviously you need to be root for this to work. Anyway, run:

and look at the listing generated. When I did this there was nothing with USB in it's name there at all. So first step is to install the absolutely basic USB modules. To do this do:
modprobe usbcore
modprobe usb-uhci
Next check the output of dmesg (as in dmesg | less and look for lines starting with USB) to check that the driver has indeed loaded and come online. At this point, I decided I'd like /proc/bus/usb to work and have appropriate entries in it, so I edited /etc/fstab to add the line:
none            	/proc/bus/usb           usbdevfs        defaults   0 0
After adding this I ran mount -a to ensure it was mounted. You can then use:
cat /proc/bus/usb/devices
to see what USB devices the machine can see. There always seem to be more than you think, but expect to find at least a USB Hub entry and an entry (on this particular Sony VAIO) for the memory stick reader. There might also be a mouse entry, but it is unlikely to be identified as such just yet. My Kensington mouse showed up as vendor 0x603 and device 0x712d.

At this point I became a little stuck as there didn't seem to be an obvious next module to add - I spoke to a colleague (thanks Wilf!) who pointed me in the direction of hid - Human Interaction Devices! There was indeed a hid module in the kernel, so in that went too - as in:

modprobe hid
Follow this by an lsmod and see what has appeared. Other web sites such as the Linux USB site had pointed me towards needing three more modules - hid, input and mousedev in order for things to work. The act of loading hid seemed to bring in input on my configuration, but not mousedev. Having used lsmod to check what had been added and what hadn't, I duely installed the mousedev too. I did this with:
modprobe mousedev
Another quick look at the output of dmesg confirmed that a mouse had indeed been found on the USB bus upon loading mousedev. At list point, I decided to run Kudzu, the device probe tool - this worked just fine and identified the mouse and set up appropriate links and devices for it in /dev/input.

With the mouse now set up and operating, all that remained was to tell X about it. Since RedHat 7.3 comes with XFree86 version 4.2.0, it uses the new XF86Config-4 file in preference to the older style. This file can be found in /etc/X11/XF86Config-4. Make a backup copy of it before editing! There are basically two additions that need to be made to this file, the first is near the top (at least in the anaconda authored file) in a section called "ServerLayout". You need to add a new line within the section saying:

	InputDevice	"USB Mice"	"SendCoreEvents"
NB:> yes, I do mean USB Mice not mouse!
Secondly, further down the file, I'd suggest just after the standard mouse entry (for the mousepad) which has Identifier "Mouse0" as it's title, you need to add the following:
Section "InputDevice"
	Identifier	"USB Mice"
	Driver		"mouse"
	Option		"Protocol"	"IMPS/2"
	Option		"Device"	"/dev/input/mice"
All that remains is to restart the X server so these settings can take effect. Just the act of logging out of your desktop environment usually restarts the X server. This done, the new mouse comes live. It does however seem to disconnect the old mousepad and buttons - something I wasn't actually expecting it to do. With my thumbs getting in the way all the time, I figured this was actually a good thing for me so I didn't investigate further! If booted without the mouse attached, kudzu prompts as to whether you wish to remove it; so long as you do not, it will start working as soon as it is attached again (well, ok, a few seconds later).

Comments? Suggestions? Corrections? Email me...

Back to about me

Bevis King <>
30th October 2002