stafio
05-12-2007, 10:37 AM
Why multiseat?
Alot of the time, both my fiance and I would want to use the computer. What this usually meant, was that I was working on the desktop and she was using a laptop. In some cases I would be on a laptop and her on the desktop. I find using laptops to be uncomfortable for extended periods of time, so I wanted to do something about this.
I could have set up another desktop, but that would take up more space than I'd like, make more noise, and mean maintaining two systems. The multiseat solution means that there is more space available, less noise, and only one set of hardware/software to maintain. Now that I've gotten the reasons out of the way, let's get down to business.
There are some other howto multiseat articles online, linked at the bottom of this post, but I've taken a slightly different approach from the others, which I think allows for easier troubleshooting if you were to run into problems.
My setup
Motherboard: Asus K8N
Processor: AMD Athlon 64 3000+
1024MB Ram
EVGA GeForce FX 5200 AGP 128MB
EVGA GeForce FX 5200 PCI 128MB
PS2 Mouse
PS2 Keyboard
USB Mouse
USB Keyboard
SB Live!
OS: Linux Mint Bianca
Again, for simplicity of maintenance, I went with the same make and model of video card so I would only have to maintain one driver. Things might get complicated if you had two cards by the same manufacturer that need different drivers. I'm not sure how that would work.
I would recommend making a file in your home folder to store information needed for the xorg.conf file. For the purposes of this howto, I'll call it xinfo.txt. Also, make a backup of your /etc/X11/xorg.conf file.
Step 1 - Dual Monitor Display
The first thing that I did was make sure that I could get both monitors up and working off of the separate video cards at the same time. For this, we'll need to make some additions to /etc/X11/xorg.conf.
You'll need to create Monitor and Screen sections for each seat. There are a few ways to do this.
1) Connect your first monitor to your primary video card and run "sudo dpkg-reconfigure xserver-xorg"
Save the configuration file and copy the Monitor and Screen Sections to your xinfo.txt file.
Disconnect your primary monitor, connect your secondary monitor and repeat the reconfigure and record the info.
2) I did the same reconfigure of X, but using Adminmenu in Libranet. I still have a small partition that I have Libranet sitting on. :) Out of all of the distros I've used, none have provided a more accurate, more detailed detection of my monitor/resolution settings than Libranet.
3) If your comfortable enough with xorg.conf, you can probably figure out the details for these sections on your own and fill them in.
Now it's time to get the information about the video cards. Video cards are identified by their address on the PCI bus. We can list the hardware on the PCI buses using the lspci command. On my system, the lspci command gives the following result:
lspci | grep VGA
Output from mine:
01:00.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1)
02:0a.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1)
Record this info in your xinfo.txt file. You'll need to convert the BusID to decimal for the xorg.conf entries. This should be easy enough to do, so I'm not going to document it here.
At this point, you can restore the backup of your original xorg.conf file, as it's time to make the first revisions to the file. At this stage, we need to add the Video card entries as well as the Monitor and Screen sections. Ensure that each receives a unique Identifier. I would recommend naming your screens Screen0 and Screen1 for a two-seat system. Assign your primary video card and monitor to Screen0 and your secondary video card and monitor to Screen1. Here are the entries from my xorg.conf:
##### VIDEO CARDS #####
Section "Device"
Identifier "NVIDIA Corporation NV34 [GeForce FX 5200] 1"
Driver "nvidia"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "NVIDIA Corporation NV34 [GeForce FX 5200] 2"
Driver "nvidia"
BusID "PCI:2:10:0"
EndSection
##### MONITORS #####
Section "Monitor"
Identifier "Samsung SyncMaster 750(M)s(T)"
VendorName "Samsung"
ModelName "Samsung SyncMaster 750(M)s(T)"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
Option "DPMS"
EndSection
Section "Monitor"
Identifier "Samsung Samtron 75(M)E (Plus)"
VendorName "Samsung"
ModelName "Samsung Samtron 75(M)E (Plus)"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
Option "DPMS"
EndSection
##### SCREENS #####
Section "Screen"
Identifier "Screen0"
Device "NVIDIA Corporation NV34 [GeForce FX 5200] 1"
Monitor "Samsung SyncMaster 750(M)s(T)"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "NVIDIA Corporation NV34 [GeForce FX 5200] 2"
Monitor "Samsung Samtron 75(M)E (Plus)"
DefaultDepth 24
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
To test, modify the ServerLayout section and add Screen 1 as done here:
Section "ServerLayout"
Identifier "Seat0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" LeftOf "Screen0"
InputDevice "PS2Mouse" "CorePointer"
InputDevice "PS2Keyboard" "CoreKeyboard"
EndSection
Restart your X server by hitting ctrl-alt-backspace. If all went well, you should be able to login and have a dual monitor display working.
Step 2 - Configuring input devices
The next thing to do is add the USB keyboard and mouse to your xorg.conf file.
The mice are easy to locate. Each mouse has an entry in the /dev/input directory. An ls can identify the mice.
ls /dev/input/mouse*
Output from mine:
/dev/input/mouse0 /dev/input/mouse1
For the keyboards, we'll need some information from /proc/bus/input/devices. From a terminal, run cat /proc/bus/input/devices
Output from mine:
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input0
H: Handlers=kbd event0
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 f2ffffdf ffefffff ffffffff ffffffff
B: MSC=10
B: LED=7
I: Bus=0003 Vendor=15ca Product=00c3 Version=0512
N: Name="USB Optical Mouse"
P: Phys=usb-0000:00:02.1-1/input0
S: Sysfs=/class/input/input1
H: Handlers=mouse0 event1 ts0
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
I: Bus=0003 Vendor=1267 Product=0103 Version=0101
N: Name="HID 1267:0103"
P: Phys=usb-0000:00:02.1-2/input0
S: Sysfs=/class/input/input2
H: Handlers=kbd event2
B: EV=120003
B: KEY=10000 7 ff800000 7ff febeffdf f3cfffff ffffffff fffffffe
B: LED=7
I: Bus=0003 Vendor=1267 Product=0103 Version=0101
N: Name="HID 1267:0103"
P: Phys=usb-0000:00:02.1-2/input1
S: Sysfs=/class/input/input3
H: Handlers=kbd event3
B: EV=f
B: KEY=c0002 400 0 0 1 c00 78000 2639fa d841d7ad 9e0000 0 0 0
B: REL=40
B: ABS=1 0
I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/class/input/input4
H: Handlers=kbd event4
B: EV=40001
B: SND=6
I: Bus=0011 Vendor=0002 Product=0005 Version=0000
N: Name="ImPS/2 Generic Wheel Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input5
H: Handlers=mouse1 event5 ts1
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
Some USB keyboards will have two entries, as mine does: event2 and event3. That's ok because we'll be using the Physical address rather than the event in the X configuratin file. The event associated with my USB keyboard is not always the same when I boot up, making it unreliable to use for the multiseat setup.
Add the keyboard and mouse entries to your xorg.conf file. Again, make sure each keyboard and mouse has a unique Identifier. To keep things straightforward, I used PS2Keyboard, USBKeyboard, PS2Mouse, and USBMouse as my Identifiers.
Here are the entries in my xorg.conf:
##### KEYBOARDS #####
Section "InputDevice"
Identifier "PS2Keyboard"
Driver "evdev"
Option "Device" "/dev/input/event0" ### event device according to /proc/bus/input/devices
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "USBKeyboard"
Driver "evdev"
Option "Phys" "usb-0000:00:02.1-2/input0" ### physical address according to /proc/bus/input/devices
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection
##### MICE #####
Section "InputDevice"
Identifier "PS2Mouse"
Driver "mouse"
Option "Device" "/dev/input/mouse1"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
Section "InputDevice"
Identifier "USBMouse"
Driver "mouse"
Option "Device" "/dev/input/mouse0"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
I had problems using the original kbd driver for the PS2 keyboard, so I had to change it to use evdev, along with the USB keyboard. I will detail some of the problems I had setting up the keyboards in my next post. For now, I've focused on what worked.
Now it's time to test the keyboards and mice. Add the additional keyboard and mouse to the ServerLayout Section, but comment them out by placing a # prior to them.
The ServerLayout Section will now look something like this:
Section "ServerLayout"
Identifier "Seat0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" LeftOf "Screen0"
InputDevice "PS2Mouse" "CorePointer"
InputDevice "PS2Keyboard" "CoreKeyboard"
# InputDevice "USBKeyboard" "CoreKeyboard"
# InputDevice "USBMouse" "CorePointer"
EndSection
Restart the X server. If X fails to start, double check all of your settings to make sure that Identifiers are matched appropriately. Also, refer to my keyboard section in the next post and all of the links at the bottom of this post. Assuming everything worked, comment out the PS2 Keyboard and Mouse and un-comment the USB keyboard and mouse in the ServerLayout. Restart X and ensure that all is working.
Once any keyboard/mice issues are sorted out and you can get X working with each set, you should be very close to having a multi-seat system up and running. You'll need to create a second ServerLayout section and assign one set of keyboard and mouse to each. I used Seat0 and Seat1 as my Identifiers. Here are my ServerLayout entries:
Section "ServerLayout"
Identifier "Seat0"
Screen 0 "Screen0" 0 0
InputDevice "PS2Mouse" "CorePointer"
InputDevice "PS2Keyboard" "CoreKeyboard"
EndSection
Section "ServerLayout"
Identifier "Seat1"
Screen 0 "Screen1" 0 0
InputDevice "USBMouse" "CorePointer"
InputDevice "USBKeyboard" "CoreKeyboard"
EndSection
Step 3 - Set up two X servers
The next step is to modify gdm.conf so both X servers start up when you boot.
sudo gedit /etc/gdm/gdm.conf
Locate the servers section and set up two entries. I renamed my existing Standard0 to be something more meaningful and added a second server.
[servers]
# These are the standard servers. You can add as many you want here and they
# will always be started. Each line must start with a unique number and that
# will be the display number of that server. Usually just the 0 server is
# used.
0=XServer0
1=XServer1
Now define the servers. I commented out the original definition and created two new entries. Use the Identifiers from your xorg.conf file for the values after -layout.
# Definition of the standard X server.
##### HERE'S THE ORIGINAL ###############
##[server-Standard0]
##name=Standard server
##command=/usr/X11R6/bin/X -br -audit 0
##flexible=true
####### END ORIGINAL ####################
[server-XServer0]
name=Standard server
command=/usr/X11R6/bin/X -nolisten tcp -novtswitch -sharevts -layout seat0
flexible=true
[server-XServer1]
name=Standard server
command=/usr/X11R6/bin/X -nolisten tcp -novtswitch -sharevts -layout seat1
flexible=true
Reboot and if all went well, you should see your primary monitor come on first and your secondary monitor a few seconds later, each running their own X! Sometimes my mice get mismatched with the keyboard and monitor. If this happens, I reboot and things match up the way they should. I'm going to try and fix this in the next couple of days.
Resources that I used:
http://www.linuxtoys.org/multiseat/multiseat.html
http://gentoo-wiki.com/HOWTO_Multiseat_X
http://netpatia.blogspot.com/2006/09/multiseat-computer-with-ubuntu.html
http://blog.chris.tylers.info/index.php?/categories/6-X-Window-System-X11
Alot of the time, both my fiance and I would want to use the computer. What this usually meant, was that I was working on the desktop and she was using a laptop. In some cases I would be on a laptop and her on the desktop. I find using laptops to be uncomfortable for extended periods of time, so I wanted to do something about this.
I could have set up another desktop, but that would take up more space than I'd like, make more noise, and mean maintaining two systems. The multiseat solution means that there is more space available, less noise, and only one set of hardware/software to maintain. Now that I've gotten the reasons out of the way, let's get down to business.
There are some other howto multiseat articles online, linked at the bottom of this post, but I've taken a slightly different approach from the others, which I think allows for easier troubleshooting if you were to run into problems.
My setup
Motherboard: Asus K8N
Processor: AMD Athlon 64 3000+
1024MB Ram
EVGA GeForce FX 5200 AGP 128MB
EVGA GeForce FX 5200 PCI 128MB
PS2 Mouse
PS2 Keyboard
USB Mouse
USB Keyboard
SB Live!
OS: Linux Mint Bianca
Again, for simplicity of maintenance, I went with the same make and model of video card so I would only have to maintain one driver. Things might get complicated if you had two cards by the same manufacturer that need different drivers. I'm not sure how that would work.
I would recommend making a file in your home folder to store information needed for the xorg.conf file. For the purposes of this howto, I'll call it xinfo.txt. Also, make a backup of your /etc/X11/xorg.conf file.
Step 1 - Dual Monitor Display
The first thing that I did was make sure that I could get both monitors up and working off of the separate video cards at the same time. For this, we'll need to make some additions to /etc/X11/xorg.conf.
You'll need to create Monitor and Screen sections for each seat. There are a few ways to do this.
1) Connect your first monitor to your primary video card and run "sudo dpkg-reconfigure xserver-xorg"
Save the configuration file and copy the Monitor and Screen Sections to your xinfo.txt file.
Disconnect your primary monitor, connect your secondary monitor and repeat the reconfigure and record the info.
2) I did the same reconfigure of X, but using Adminmenu in Libranet. I still have a small partition that I have Libranet sitting on. :) Out of all of the distros I've used, none have provided a more accurate, more detailed detection of my monitor/resolution settings than Libranet.
3) If your comfortable enough with xorg.conf, you can probably figure out the details for these sections on your own and fill them in.
Now it's time to get the information about the video cards. Video cards are identified by their address on the PCI bus. We can list the hardware on the PCI buses using the lspci command. On my system, the lspci command gives the following result:
lspci | grep VGA
Output from mine:
01:00.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1)
02:0a.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1)
Record this info in your xinfo.txt file. You'll need to convert the BusID to decimal for the xorg.conf entries. This should be easy enough to do, so I'm not going to document it here.
At this point, you can restore the backup of your original xorg.conf file, as it's time to make the first revisions to the file. At this stage, we need to add the Video card entries as well as the Monitor and Screen sections. Ensure that each receives a unique Identifier. I would recommend naming your screens Screen0 and Screen1 for a two-seat system. Assign your primary video card and monitor to Screen0 and your secondary video card and monitor to Screen1. Here are the entries from my xorg.conf:
##### VIDEO CARDS #####
Section "Device"
Identifier "NVIDIA Corporation NV34 [GeForce FX 5200] 1"
Driver "nvidia"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "NVIDIA Corporation NV34 [GeForce FX 5200] 2"
Driver "nvidia"
BusID "PCI:2:10:0"
EndSection
##### MONITORS #####
Section "Monitor"
Identifier "Samsung SyncMaster 750(M)s(T)"
VendorName "Samsung"
ModelName "Samsung SyncMaster 750(M)s(T)"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
Option "DPMS"
EndSection
Section "Monitor"
Identifier "Samsung Samtron 75(M)E (Plus)"
VendorName "Samsung"
ModelName "Samsung Samtron 75(M)E (Plus)"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
Option "DPMS"
EndSection
##### SCREENS #####
Section "Screen"
Identifier "Screen0"
Device "NVIDIA Corporation NV34 [GeForce FX 5200] 1"
Monitor "Samsung SyncMaster 750(M)s(T)"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "NVIDIA Corporation NV34 [GeForce FX 5200] 2"
Monitor "Samsung Samtron 75(M)E (Plus)"
DefaultDepth 24
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
To test, modify the ServerLayout section and add Screen 1 as done here:
Section "ServerLayout"
Identifier "Seat0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" LeftOf "Screen0"
InputDevice "PS2Mouse" "CorePointer"
InputDevice "PS2Keyboard" "CoreKeyboard"
EndSection
Restart your X server by hitting ctrl-alt-backspace. If all went well, you should be able to login and have a dual monitor display working.
Step 2 - Configuring input devices
The next thing to do is add the USB keyboard and mouse to your xorg.conf file.
The mice are easy to locate. Each mouse has an entry in the /dev/input directory. An ls can identify the mice.
ls /dev/input/mouse*
Output from mine:
/dev/input/mouse0 /dev/input/mouse1
For the keyboards, we'll need some information from /proc/bus/input/devices. From a terminal, run cat /proc/bus/input/devices
Output from mine:
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input0
H: Handlers=kbd event0
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 f2ffffdf ffefffff ffffffff ffffffff
B: MSC=10
B: LED=7
I: Bus=0003 Vendor=15ca Product=00c3 Version=0512
N: Name="USB Optical Mouse"
P: Phys=usb-0000:00:02.1-1/input0
S: Sysfs=/class/input/input1
H: Handlers=mouse0 event1 ts0
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
I: Bus=0003 Vendor=1267 Product=0103 Version=0101
N: Name="HID 1267:0103"
P: Phys=usb-0000:00:02.1-2/input0
S: Sysfs=/class/input/input2
H: Handlers=kbd event2
B: EV=120003
B: KEY=10000 7 ff800000 7ff febeffdf f3cfffff ffffffff fffffffe
B: LED=7
I: Bus=0003 Vendor=1267 Product=0103 Version=0101
N: Name="HID 1267:0103"
P: Phys=usb-0000:00:02.1-2/input1
S: Sysfs=/class/input/input3
H: Handlers=kbd event3
B: EV=f
B: KEY=c0002 400 0 0 1 c00 78000 2639fa d841d7ad 9e0000 0 0 0
B: REL=40
B: ABS=1 0
I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/class/input/input4
H: Handlers=kbd event4
B: EV=40001
B: SND=6
I: Bus=0011 Vendor=0002 Product=0005 Version=0000
N: Name="ImPS/2 Generic Wheel Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input5
H: Handlers=mouse1 event5 ts1
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
Some USB keyboards will have two entries, as mine does: event2 and event3. That's ok because we'll be using the Physical address rather than the event in the X configuratin file. The event associated with my USB keyboard is not always the same when I boot up, making it unreliable to use for the multiseat setup.
Add the keyboard and mouse entries to your xorg.conf file. Again, make sure each keyboard and mouse has a unique Identifier. To keep things straightforward, I used PS2Keyboard, USBKeyboard, PS2Mouse, and USBMouse as my Identifiers.
Here are the entries in my xorg.conf:
##### KEYBOARDS #####
Section "InputDevice"
Identifier "PS2Keyboard"
Driver "evdev"
Option "Device" "/dev/input/event0" ### event device according to /proc/bus/input/devices
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "USBKeyboard"
Driver "evdev"
Option "Phys" "usb-0000:00:02.1-2/input0" ### physical address according to /proc/bus/input/devices
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection
##### MICE #####
Section "InputDevice"
Identifier "PS2Mouse"
Driver "mouse"
Option "Device" "/dev/input/mouse1"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
Section "InputDevice"
Identifier "USBMouse"
Driver "mouse"
Option "Device" "/dev/input/mouse0"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
I had problems using the original kbd driver for the PS2 keyboard, so I had to change it to use evdev, along with the USB keyboard. I will detail some of the problems I had setting up the keyboards in my next post. For now, I've focused on what worked.
Now it's time to test the keyboards and mice. Add the additional keyboard and mouse to the ServerLayout Section, but comment them out by placing a # prior to them.
The ServerLayout Section will now look something like this:
Section "ServerLayout"
Identifier "Seat0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" LeftOf "Screen0"
InputDevice "PS2Mouse" "CorePointer"
InputDevice "PS2Keyboard" "CoreKeyboard"
# InputDevice "USBKeyboard" "CoreKeyboard"
# InputDevice "USBMouse" "CorePointer"
EndSection
Restart the X server. If X fails to start, double check all of your settings to make sure that Identifiers are matched appropriately. Also, refer to my keyboard section in the next post and all of the links at the bottom of this post. Assuming everything worked, comment out the PS2 Keyboard and Mouse and un-comment the USB keyboard and mouse in the ServerLayout. Restart X and ensure that all is working.
Once any keyboard/mice issues are sorted out and you can get X working with each set, you should be very close to having a multi-seat system up and running. You'll need to create a second ServerLayout section and assign one set of keyboard and mouse to each. I used Seat0 and Seat1 as my Identifiers. Here are my ServerLayout entries:
Section "ServerLayout"
Identifier "Seat0"
Screen 0 "Screen0" 0 0
InputDevice "PS2Mouse" "CorePointer"
InputDevice "PS2Keyboard" "CoreKeyboard"
EndSection
Section "ServerLayout"
Identifier "Seat1"
Screen 0 "Screen1" 0 0
InputDevice "USBMouse" "CorePointer"
InputDevice "USBKeyboard" "CoreKeyboard"
EndSection
Step 3 - Set up two X servers
The next step is to modify gdm.conf so both X servers start up when you boot.
sudo gedit /etc/gdm/gdm.conf
Locate the servers section and set up two entries. I renamed my existing Standard0 to be something more meaningful and added a second server.
[servers]
# These are the standard servers. You can add as many you want here and they
# will always be started. Each line must start with a unique number and that
# will be the display number of that server. Usually just the 0 server is
# used.
0=XServer0
1=XServer1
Now define the servers. I commented out the original definition and created two new entries. Use the Identifiers from your xorg.conf file for the values after -layout.
# Definition of the standard X server.
##### HERE'S THE ORIGINAL ###############
##[server-Standard0]
##name=Standard server
##command=/usr/X11R6/bin/X -br -audit 0
##flexible=true
####### END ORIGINAL ####################
[server-XServer0]
name=Standard server
command=/usr/X11R6/bin/X -nolisten tcp -novtswitch -sharevts -layout seat0
flexible=true
[server-XServer1]
name=Standard server
command=/usr/X11R6/bin/X -nolisten tcp -novtswitch -sharevts -layout seat1
flexible=true
Reboot and if all went well, you should see your primary monitor come on first and your secondary monitor a few seconds later, each running their own X! Sometimes my mice get mismatched with the keyboard and monitor. If this happens, I reboot and things match up the way they should. I'm going to try and fix this in the next couple of days.
Resources that I used:
http://www.linuxtoys.org/multiseat/multiseat.html
http://gentoo-wiki.com/HOWTO_Multiseat_X
http://netpatia.blogspot.com/2006/09/multiseat-computer-with-ubuntu.html
http://blog.chris.tylers.info/index.php?/categories/6-X-Window-System-X11