Second Mouse in X mini-HOWTO

Greg Wierzchowski

2001-07-18

Revision History
Revision 1.22001-11-17Revised by: GW
Corrected for the Wheel Mouse in XFree 3.x.
Revision 1.12001-07-21Revised by: GW
Added "Alternatives" section.
Revision 1.02001-07-18Revised by: GW
Initial Release.

Quick instructions to enable a second mouse in X.


Table of Contents
1. Introduction
2. Copyright and License
3. Mouse Protocols
4. XFree 3.x
5. XFree 4.x
6. Alternatives
7. Credits

1. Introduction

This mini-HOWTO was created by gathering the information already available on the internet, in newsgroups and other HOWTOs. I needed to hook up an USB mouse in addition to the built-in trackpoint on my Thinkpad laptop.

Examples in this mini-HOWTO pertain to my particular hardware configuration, which is PS/2 mouse as a primary pointer and USB wheel mouse as an additional one. It should be pretty straightforward to implement another combination, say, a PS/2 and a serial mice. Two things that would have to be changed are the mouse protocol and the mouse device. Wherever possible, I try to provide appropriate examle.

The instructions for X are divided into two sections, one for XFree version 3 and one for XFree 4. The format of the XF86Config file has significantly changed between versions and requires slightly different approach. In XFree 3.x, the second mouse has to appear in an Xinput section, which has slightly different syntax than the regular Pointer section. In XFree 4.x, it's just another pointer.


2. Copyright and License

This document is copyright 2001 by Greg Wierzchowski and is released under the terms of the GNU Free Documentation License, which is hereby incorporated by reference. Send feedback to greg.wierzchowski@usa.net.


3. Mouse Protocols

Two most important parameters in the XF86Config file, ones that are crucial to the mouse working properly are the Protocol and Device.

As far as Protocol is concerned, it seems that gpm uses compatible protocol names, so please look there for the detailed information. Here is the excerpt taken from the gpm info page (just the few most commont types):

Table 1. Most Common Mouse Protocols in X

Protocol NameDescription
MicrosoftStandard Microsoft mice.
MouseSystemsThis is the standard protocol for three-button serial devices.
MMSeriesTitle says it all. This mouse decoder accepts standard serial options, although they should not be needed.
LogitechThis is the protocol used by old serial Logitech mice.
BusMouseSome bus devices use this protocol, including those produced by Logitech.
PS/2The protocol used by most busmice.
IMPS/2"IntelliMouse" on the ps/2 port. Also works with USB mice


4. XFree 3.x

In XFree 3.x, additional pointing devices, like mice or tablets, are defined through the use of an Xinput section. The primary mouse is defined as usual:

Section "Pointer"
    Protocol    "PS/2"
    Device      "/dev/mouse"
EndSection
In the case above, it's a regular three-button PS/2 mouse, which works for the trackpoint as well. Now, for the USB mouse:
    Section "Xinput"
  SubSection "Mouse"
    DeviceName "USB Mice"
    Protocol "IMPS/2"
    ZAxisMapping 4 5
    Port "/dev/input/mice"
    Alwayscore
  EndSubSection
EndSection
My mouse is a wheel mouse, thus the protocol is IMPS/2. ZAxisMapping line is also needed for the wheel to work. I also want the mouse to always work alongside the other one, and this is achieved through the AlwaysCore option. If. for example, this was a serial mouse, the Port would read "/dev/ttyS0" for COM1.


5. XFree 4.x

With XFree 4.x the task is even easier. First, the primary mouse, usually present in the config file already:

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Device" "/dev/mouse"
        Option      "Protocol" "PS/2"
        Option      "Emulate3Buttons" "off"
        Option      "ZAxisMapping" "4 5"
EndSection
To add another mouse just copy the above section and modify it, so that it reads:
Section "InputDevice"
        Identifier  "Mouse1"
        Driver      "mouse"
        Option      "Device" "/dev/input/mice"
        Option      "Protocol" "IMPS/2"
        Option      "Emulate3Buttons" "off"
        Option      "ZAxisMapping" "4 5"
EndSection
Well, this way you can define as many additional pointers as you wish, and the same applies to joysticks and tablets.

To make both mice work together, there's one more change to be made to the XF86Config file. There is a section called ServerLayout where all the components are specified. Here's how it looks before adding a second mouse:

Section "ServerLayout"
        Identifier "XFree86 Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
And after adding the second mouse:
Section "ServerLayout"
        Identifier "XFree86 Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Mouse1" "AlwaysCore"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection


6. Alternatives

Another way to use two (or more) mice at the same time is to use a program such as MultiMouse by Takashi Manabe. It's a daemon multiplexing several mice and making them available through the special device /dev/mumse as a MouseSystems compatible mouse.

According to the author: "This program allows you to use multiple mice at the same time. This program is developed for a subnote user who want to use both a pre-mounted pointing device and a external serial mouse."

I'm not sure if the program supports second mouse other than serial, but the advantage is that the second mouse works in console mode too. MultiMouse can be found at Sunsite (sunsite.unc.edu /pub/Linux/system/Misc) and Tucows (www.tucows.com Linux Console -> Utilities).


7. Credits

Special thanks to all the people who contribute to the Linux community and who made this HOWTO possible.