Thursday, June 18, 2009

Multiseat in Ubuntu 9.04

Multiseat configuration in Ubuntu 9.04 is very similar to that of Ubuntu 8.04. Some software components have been updated, so the overall system has some improvements over the previous version, while other problems are still remaining.





The computer is just identical to that used in the previous version:
Pentium 4 at 3GHz, 512MB of RAM and a 80GB hard disk. The video card is an ATI Radeon X300 PCIe by Gigabyte with two outputs (VGA and DVI). On the DVI output we have a DVI to VGA converter so we can connect two simple VGA analog monitors. The monitors are just two generic TFT/LCD displays with a resolution of 1280x1024.

1.- We install the Ubuntu 9.04 version on the computer. You can do this using a live-media, such as a live-CD/live-DVD or a live-USB. Since most of the computers today support booting from USB, we recommend you to choose the USB option. The installation process will be much faster compared to installing from a CD/DVD.

2.- Update your system to the latest available packages. You can do that either using the graphical tools (update manager / synaptic) or using the command line in a terminal:
$ sudo apt-get update


3.- Install some additional components (xserver-xephyr and wmctrl). These are not included in the default installation, but they are in the official repositories. These packages are necessary in order to obtain the desired multiseat system.

$ sudo apt-get install xserver-xephyr wmctrl


Before starting any modifications related to the multiseat configuration, you should do the necessary adjustments and setup for your particular scenario (network configuration, user creation, etc). Some tools and applications related to Gnome configuration do not work when the user is logged in a multiseat session, because the operating system detect multiple gnome-sessions and some of the system configuration tools are not able to create the necessary locks.

It is very convenient to maintain a copy of the original configuration of the two files (/etc/X11/xorg.conf and /etc/gdm/gdm.conf) that are going to be modified, since they can be necessary if you want to come back to the initial configuration.

Once configured your network and created your users (we suggest you creating something like user1/user2, uleft/uright if you are going to have generic users) you can proceed with the process of multiseat setup.



Initially, after the default installation, the system will start with the two displays in "clone" mode.
If we have a look at the output of the xrandr command, we will see the details about our current setup. In our particular case, we obtain this output:

$ xrandr -q
Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1280 x 1200
VGA-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.0*+ 75.0 60.0*
1152x864 75.0
1024x768 75.0 60.0
832x624 74.6
800x600 75.0 60.3
640x480 75.0 59.9
720x400 70.1
DVI-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.0*+ 75.0 60.0*
1152x864 75.0
1024x768 75.0 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3
640x480 75.0 72.8 59.9
720x400 70.1
S-video disconnected (normal left inverted right x axis y axis)


Next thing, we edit /etc/X11/xorg.conf to indicate how to obtain an "extended desktop" configuration. If you have any doubts on this topic, you can find additional information on the official Ubuntu wiki: manual multihead setup.

On recent Linux versions, several things related to device management are being changed and moved to other parts of the system, such as hal and udev, so we can see that there is no need to indicate anything related to keyboard and mouse in the xorg.conf file.

After having done a backup of the original xorg.conf file, we modify it in order to indicate the new setup with two monitors. We also include some convenient options (section "ServerFlags") in a multiseat system.

Section "Device"
Identifier "Card0"
BoardName "ATI Technologies Inc RV370 5B60 [Radeon X300 (PCIE)]"
Driver "ati"
BusID "PCI:1:0:0"
Option "Monitor-VGA-0" "Mon-VGA"
Option "Monitor-DVI-0" "Mon-DVI"
EndSection

Section "Monitor"
Identifier "Mon-VGA"
Option "DPMS"
EndSection

Section "Monitor"
Identifier "Mon-DVI"
Option "DPMS"
Option "Below" "Mon-VGA"
EndSection

Section "Screen"
Identifier "Screen-base"
Device "Card0"
Monitor "Mon-VGA"
DefaultDepth 24
Subsection "Display"
Depth 24
Modes "1280x1024"
Virtual 1280 2048
EndSubSection
EndSection

Section "ServerFlags"
# Even if mouse detection fails, X will start
Option "AllowMouseOpenFail" "yes"

# VT switching is disabled
Option "DontVTSwitch" "yes"

# X restart (Ctrl+Alt+Backspace) is disabled
Option "DontZap" "yes"
EndSection


Notice that this time, we have defined a vertical setup of the monitors. This is just to test if 3D acceleration works with horizontal and vertical dimensions of the virtual screen lower (or equal) than 2048 pixels. If you feel more comfortable with an horizontal setup, just use leftOf or rightOf instead of below, and change the virtual size to the proper one according to the desired layout.

After having done this change, if we restart the X server we will see a vertical desktop with these characteristics:

$ xrandr -q
Screen 0: minimum 320 x 200, current 1280 x 2048, maximum 1280 x 2048
VGA-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.0*+ 75.0 60.0*
1152x864 75.0
1024x768 75.0 60.0
832x624 74.6
800x600 75.0 60.3
640x480 75.0 59.9
720x400 70.1
DVI-0 connected 1280x1024+0+1024 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.0*+ 75.0 60.0*
1152x864 75.0
1024x768 75.0 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3
640x480 75.0 72.8 59.9
720x400 70.1
S-video disconnected (normal left inverted right x axis y axis)


Once we have modified the xorg.conf file and having already obtained a big desktop covering the two monitors (either with an horizontal or with a vertical layout), the next thing is to configure gdm to launch two Xephyr sessions, one for every seat.

Previously, you will need to obtain the information related to the input events on your system.

$ ls -la /dev/input/by-path/ | grep event | grep kbd
lrwxrwxrwx 1 root root 9 2009-06-18 13:11 pci-0000:00:1d.2-usb-0:2:1.0-event-kbd -> ../event5
lrwxrwxrwx 1 root root 9 2009-06-18 13:11 platform-i8042-serio-0-event-kbd -> ../event3

$ ls -la /dev/input/by-path/ | grep event | grep mouse
lrwxrwxrwx 1 root root 9 2009-06-18 13:11 pci-0000:00:1d.2-usb-0:1:1.0-event-mouse -> ../event4
lrwxrwxrwx 1 root root 9 2009-06-18 13:11 platform-i8042-serio-1-event-mouse -> ../event8


In this case, we have a set of PS2 keyboard + mouse for one seat, and a pair of USB keyboard + mouse for the second one. The values that you are obtaining here will be used to configure the corresponding input device for every seat.

The next step is to create a launcher in order to execute Xephyr with the proper parameters and input events. To achieve that, we create a file that will be used as a launcher script. You can name the file and place it as you consider most appropriated. We have chosen to create it as /usr/sbin/Xephyr-path.sh

Use your favorite editor (vi, gedit, ...) to create it, and do not forget to make it executable by root (the file owner).

$ sudo gedit /usr/sbin/Xephyr-path.sh
$ sudo chmod 744 /usr/sbin/Xephyr-path.sh


You should create a file with something like these contents (change the xkblayout parameter according to your language):

$ cat /usr/sbin/Xephyr-path.sh


#!/bin/bash

# 200906 - josean
# http://netpatia.blogspot.com/

trap "" usr1

XEPHYR=/usr/bin/Xephyr
DISPLAY=:0
XAUTHORITY=/var/lib/gdm/:0.Xauth

args=()

while [ ! -z "$1" ]; do
if [[ "$1" == "-kbdpath" ]]; then
shift
if [ ! -z "$1" ]; then
args=("${args[@]}" "-keybd")
args=("${args[@]}" "evdev,,device=/dev/input/by-path/$1,xkbrules=xorg,xkbmodel=evdev,xkblayout=es")
fi
elif [[ "$1" == "-mousepath" ]]; then
shift
if [ ! -z "$1" ]; then
args=("${args[@]}" "-mouse")
args=("${args[@]}" "evdev,,device=/dev/input/by-path/$1")
fi
else
args=("${args[@]}" "$1")
# echo "+++ args $1 +++" >> /tmp/logXephyr
fi
shift
done

# Next line is just to create a log file with the invocation parameters, for debug purposes
echo $XEPHYR "${args[@]}" >> /tmp/logXephyr
exec $XEPHYR "${args[@]}"


After the creation of this script, you can proceed with the modifications to the /etc/gdm/gdm.conf file.
On the [servers] section of gdm.conf, we comment out the rules corresponding to the original layout and define the new one. We modify the file to create the base X server and two Xephyr sessions (one for every seat) over the base X.

# ****************************************************************************

[servers]

# 0=Standard
#
# Means that DISPLAY ":0" will start an X server as defined in the
# [server-Standard] section.

# ****************************************************************************

# Multiseat setup (200906)

0=Xephyr0
1=Xephyr1
2=Xephyr2

[server-Xephyr0]
name=Xephyr0
command=/usr/bin/X -br -dpms -s 0
handled=false
flexible=false

[server-Xephyr1]
name=Xephyr1
command=/usr/sbin/Xephyr-path.sh -br -screen 1280x1024 -kbdpath platform-i8042-serio-0-event-kbd -mousepath platform-i8042-serio-1-event-mouse
handled=true
flexible=false

[server-Xephyr2]
name=Xephyr2
command=/usr/sbin/Xephyr-path.sh -br -screen 1280x1024 -kbdpath pci-0000:00:1d.2-usb-0:2:1.0-event-kbd -mousepath pci-0000:00:1d.2-usb-0:1:1.0-event-mouse
handled=true
flexible=false

# ****************************************************************************


Notice that this is the script where you will have to indicate what the input devices (their physical connections) are for every seat.

The second change to the gdm.conf file is related to the greeter. There are still things that need to be done manually.

We encounter the already known problem of having every Xephyr window properly placed (one Xephyr session appearing on every display). The current Xephyr version does not support the geometry parameter that most X applications include, so it is not possible to place the Xephyr window in the desired place. In order to circumvent this problem, we create a script that will be called instead of doing a direct call to the session greeter. Such script invokes some command line tools in order to place every Xephyr window just in the place where we want to have it. We will use the following command line tools: xwininfo, wmctrl to move one of the Xephyr sessions to the second monitor, so that they do not overlap anymore. That is the reason why we installed the wmctrl package.

In the [daemon] section of gdm.conf change the reference to the original greeter for a reference to a new script. This script, apart for invoking the greeter, will place properly every Xephyr window:

# ****************************************************************************

[daemon]

# The greeter for attached (non-xdmcp) logins. Change gdmlogin to gdmgreeter
# to get the new graphical greeter.
# Greeter=/usr/lib/gdm/gdmgreeter
Greeter=/usr/sbin/Xephyr-login.sh

# ****************************************************************************


We will have to create the script responsible of the greeter/login (in our case, /usr/sbin/Xephyr-login.sh). This script will be executed by the gdm user, so we create a file owned by gdm and give execution permission just for that user.

$ sudo gedit /usr/sbin/Xephyr-login.sh
$ sudo chown gdm:gdm /usr/sbin/Xephyr-login.sh
$ sudo chmod 744 /usr/sbin/Xephyr-login.sh


After the creation of such script, it should look like this:

$ cat /usr/sbin/Xephyr-login.sh

#!/bin/bash
# /usr/sbin/Xephyr-login.sh

XAUTH_BASE=/var/lib/gdm/:0.Xauth
DISPL_BASE=:0

XEP=$(XAUTHORITY=$XAUTH_BASE xwininfo -root -children -display :0 | grep "Xephyr on :1" --max-count=1)
echo ${XEP} >> /tmp/logXephyrLogin

# assign values to positional parameters to obtain the id (first parameter) of the Xephyr window
set ${XEP}
DISPLAY=$DISPL_BASE XAUTHORITY=$XAUTH_BASE wmctrl -i -r $1 -e 0,0,1024,-1,-1
# echo $1 >> /tmp/logXephyrLogin_1

/usr/lib/gdm/gdmlogin


In our case, we move one of the sessions 1024 pixels vertically (remember that our layout consists of two 1280x1024 displays vertically aligned).

As you can see, when the greeter is expected to be invoked, the wrapper script (including greeter invocation) is executed instead. The user(s) finally sees every greeter in a different display and the rest of the process is almost unnoticeable.

The last comment is about the greeter. The old style gdmlogin was some time ago replaced by a more modern gdmgreeter. There is something wrong about screen size detection with this default gdm greeter (gdmgreeter). It always try to start at a resolution of 1600x1200, so we had to change to the old greeter (gdmlogin) which detects properly the screen resolutions of the Xephyr sessions.

Maybe gdmgreeter uses xrandr to detect the resolution of every Xephyr session, since 1600x1200 is the max output reported by xrandr on every Xephyr session. The Xephyr windows are in fact resizable by means of xrandr, so we are not sure if this is a bug of xrandr that sould only report the current size, or a bug of gdmgreeter assuming that it must change the window size to the biggest available.

$ DISPLAY=:1 xrandr -q
Screen 0: minimum 160 x 160, current 1280 x 1024, maximum 1600 x 1200
default connected 1280x1024+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1600x1200 0.0
1400x1050 0.0
1280x960 0.0
1280x1024 0.0*
1152x864 0.0
1024x768 0.0
832x624 0.0
800x600 0.0
720x400 0.0
480x640 0.0
640x480 0.0
640x400 0.0
320x240 0.0
240x320 0.0
160x160 0.0


In order to avoid this problem, we use gdmlogin instead of gdmgreeter.

The Ubuntu 9.04 version of the multiseat setup, achieves some improvements over previous versions:
* Mouse wheel works properly.
* Keyboard led indicators are not messed up.

Updated 2009/06/22: Some minor changes
Updated 2009/07/16: Some changes in Xephyr-path.sh and Xephyr-login.sh
Access control is now enabled in both Xephyr sessions. The previous configuration had access control disabled (-ac option).

91 comments:

aaylnx said...

Great howto! Thanks!

How does sound work for this kind of setup? Are you able to have two or more users make use of different sound cards simultaneously?

Thanks again.

josean said...

Since this setup is intended for an office environment, we have not done any work related to sound.

It is possible to have computers with more than one sound card in linux, but I have no idea of how to assign a sound card to a given user.

yaarnick said...

Is this python code is same for all machines? ( for different VGA's)

josean said...

The code is not python, but just shell script.

Different VGA chip makers (nvidia, ati, intel) use different names to refer the video output of their cards.

You can obtain the names used by the chip maker having a look at the output of the xrandr command (xrandr -q)

Samir said...

There is an error when I use any tool of GIMP so back to the login screen.

If you use VGA / DVI with the Nvidia GPU, you need to use the nvidia-settings with Separate Screen X option?

yaarnick said...

I have successfully configured multiseat on 8.04 by using;

VendorName "Silicon Integrated Systems [SiS]"
BoardName "315PRO PCI/AGP VGA Display Adapter"

and

VendorName "nVidia Corporation"
BoardName "NV34GL [Quadro NVS 280 PCI]"

But I can't configure them in ubuntu 8.10 or 9.04.

Please help me on this..

Thanks

josean said...

I have made a multiseat system with Ubuntu 9.04 using a nVidia Quadro NVS 290 PCIe card and the proprietary nVidia drivers.

I was not able to setup properly the video card until I used the nvidia-settings tool. I do not have tested the option of Separate screen X, so I can not comment about such option.

May be I will soon post a blog entry covering the topic of achieving a multiseat system using a nVidia card.

Shice1982 said...

great work, but I cant fix the xephyr-problem

after rebooting the system i just see a "cloned"(?) login screen.

Anonymous said...

The above configuration works with my system:

GeForce6100PM-M2
AMD LE-1620 (2.4 GHz, single core)
2GB memory
Radeon HD 3450 (VGA, DVI, HDMI)

From initial observation, memory usage is around 425MB (browsing, watching YouTube in both). CPU hovers between 45~95%.

I'm using two different monitors (CRT, LCD). While I'm using the LCD with aspect ratio matching the CRT's resolution, I plan to do some modification to use its native resolution (1366x768).

Nice tutorial and thanks.

Screenshots:
http://i32.tinypic.com/npnfit.png
http://i32.tinypic.com/30mquxv.png

Arie Skliarouk said...

Excellent howto!

I have setup dual-seat using ATI RV370 5B60 card.

There are several issues with the setup though:
* Any 3D requiring game now aborts with following error message:
Error : Screen mode creation failed
Reason : Couldn't find matching GLX visual
If I run glxgears, I get
Error: couldn't get an RGB, Double-buffered visual

* When a video is played inside of totem player, any movement of mouse on top of the video leaves squares trail, and I can see the original desktop through them. That does not happen when using mplayer.

Also, is there a way to use different video resolutions for the different seats?

josean said...

Different video resolutions should be possible without any problem.

You just have to put the right numbers in xorg.conf (virtual tag), and in the scripts launching and moving the xephyr sessions.

I did some tests on a netbook with an integrated intel card. It almost worked, except that the intel driver seems to have some bugs when dealing with big resolutions.

Finally, I was able to have the first screen (LVDS) at 800x480 and the second one (VGA) at 1280x1024

Arie Skliarouk said...

The single card multiseat setup lacks OpenGL. The fact needs to be highlighted in the howto.

How can I use two different ATI VGA cards so that each user have acceleration?

josean said...

This multiseat setup based in just one card has OpenGL support.

According to the Xephyr documentation, the current version already routes the openGL calls to the base X, so the Xephyr sessions do support openGL.

The problem may be located in the ATI drivers. I have recently done a setup based on one nVidia card, and the openGL works properly (glxgears, gl screen savers, ...)

I will try to create a new entry covering the topic of the nVidia setup and the openGL support.

Cy6erBr4in said...

Hello.

Thanks a lot for the post.

I've tried to make the same configuration, but I didn't success :( It works just fine, if I start the X server and two copies of the Xephyr manually, but gdm configuration doesn't work at all.

Only one window appears with error message, it's something about wrong configuration of the X server (so strange, because it works if I start it by hand). If I have a look at the processes list, there's no any Xephyr process.

Could you advice me somehow please.

Thanks in advance!

/Regards,
Alexander

Arie Skliarouk said...

To Cy6erBr4in:
Send your gdm.conf to my email skliarie"the at sign"gmail.com and I will try to help you.

josean said...

Cy6erBr4in, be sure to have this changed in the daemon section of gdm.conf

[daemon]
# Greeter=/usr/lib/gdm/gdmgreeter
Greeter=/usr/sbin/Xephyr-login.sh

You should invoke the Xephyr script instead of the normal greeter/login launcher.

Cy6erBr4in said...

Hello again.

It works now! I don't know what I did, but it works :)

Thanks!

Anonymous said...

josean, is there's a dualhead card (pci, pci-e) that has 2 distinct BusID?

josean said...

I think that old Matrox multihead cards did have different bus IDs, but I do not know about current products from Matrox.

On the other side, nVidia (at least the Quadro series) can be configured as separated X screens. I have not tested such option, but as far as I know, you need to have different pci bus id's in order to have independent X servers. So, may be the nVidia Quadro offers what you want, but I remark: I have not tested it!

Anonymous said...

josean, I have ordered a PNY VCGFX522PEB card that has 2 D-SUB:

http://www.newegg.com/Product/Product.aspx?Item=N82E16814133233

I hope it's like the Matrox card you mentioned with 2 distinct BusID. I will write about it when I get and configure it.

josean said...

The card mentioned above is just a dual head nVidia card.
I do not know if this card will provide two bus IDs.
Anyway, you do not really need two separate bus IDs if you pretend to obtain a dual seat computer following this method.

Arie Skliarouk said...

I am using the multiseat setup for two weeks now, and besides of no video acceleration my users complain on occasional inability to share audio card. Looks like pulseaudio instance of the first logged in user grabs the audio card for itself, even when not in use.

I have no problem to stick another audio card into the computer, but I don't know how to arbitrate pulseaudio instance between the cards...

Arie Skliarouk said...

Looks like there is no good solution for assigning sound cards to users. There is an workaround described here to prevent users locking each other.

josean said...

Thanks for the information. I had been looking for a solution based on polkit permissions but without success so far.

z12 said...

Yes with the the right hardware, a bit of luck, and lots of patience you can if you're lucky

1. Easy (automated & graphical) configuration
2. Diverse hardware support (e.g., onboard and single-chip dual head video cards)
3. high performance (Xypher, xnest etc. have very poor performance)
4. Audio & USB key support
5. Multi-seat features (Turn one PC into 2)
6. Free for personal use.

Userful Multiplier has all these things. You can install it directly from Ubuntu Multiverse:

Arie Skliarouk said...

Looks like currently there is no Userful packages for Ubuntu 9.04. Am I right?

How do Userful arbitrate audio cards?

josean said...

To z12:

Please, have a look at my answer to your comments in another multiseat related blog entry.

Matthias said...

hello, i use a nvidia card. my problem is that i only see a screen on the primary screen. on the sec. screen i see only a mouse curser.
what is my mistake?
thanks

Cy6erBr4in said...

Hello Matthias,

I have working nvidia configuration at home. I can provide you with configuration this evening, when I'm back home. Any way, you could send a e-mail to me, and I'll replay with all necessary information.

my e-mail: cy6erbr4in [ at ] gmail [ dot ] com

/Regards,
Alexander

josean said...

Did you try with the nvidia-settings tool?

Are you using the proprietary drivers (nvidia-glx-180)?

Matthias said...

i use the nvidia tool. and twinview with one x server work great.
i use driver Version: 185.18.31

ajaz said...

Great work! 2 seater is working perfect!
But 4 seater is not working for me.Initially when I try to add Serverlayouts only one Serverlayout is detected..Others are ignored! But 4 screens are coming up when using a single ServerLayout.But still what are the changes required in the scripts for running 2 Xservers?

josean said...

Ajaz, I can't help you. All my experience is limited to just one card and one X server instance.
In our particular case, we need just two seats per computer, so we haven't done any further testing.

delete said...

excellent howto! thanks a lot. i tried it on my box (Celeron 2.8GHz, GeForce MX 4000 with D-Sub and TV-Out) with a freshly installed debian 5.02a stable, using the nv driver and the DualHead option. everything works great apart from mouse wheels, which do nothing atm. will google around and see if i find a solution.

cheers!

Anonymous said...

I confirm that this how-to works with Archlinux. The only additional software that I installed is wmctrl (pacman -S wmctrl). Also, instead of editing gdm.conf, you edit custom.conf (in same directory). Multiseating with Archlinux is noticeably faster than Ubuntu. Thanks josean.

josean said...

Nice to hear such a thing about Archlinux. These are excelent news!

bastafidli said...

Here is the summary page for multiseat in Ubuntu

http://help.ubuntu.com/community/MultiseatX

Anonymous said...

josean, the same user trying to log at different seats leads to gdm shutting down and logging off a user who is already logged. Is there's some code or script preventing that (i.e. "This user is already logged.")?

josean said...

This is an issue pending to be resolved. At the moment, the users should be careful and avoid logging more than once.

Kacper said...

@josean thanks for ur effort - this version of howto works on dualhead double dvi nvidia 9600GT but 3d acceleration is unavailable and additionaly sound isn't working. Is there anything that could go wrong in those manners?

Regards,
kacperpl1@gmail.com

josean said...

Thanks for your interest in this setup, Kacper. This dual head configuration is mainly intended for an office environment (the applications used are just Firefox, OpenOffice.org, Thunderbird, browsing shared folders and not much more).

In our company, we have this setup in 18 computers (so, we have 36 seats) and most of them do not even have speakers. I have not worked on multimedia related topics (no games, sound nor 3D applications), so I'm affraid that I can not contribute much more in this area (at least right now, may be in the future...)

Kacper said...

I know there is a way to do this and there is a guy showing off effects of this on youtube channel "multiseat"
The idea is to set all displays as one continuus space and cut it by ratpoison desktop manager into smaller spaces fitting screens and run greeters inside them. I didnt got to far with it because of lack of knowledge about xorg and the author of the config is making it for cash and setting up cheap internet cafe's etc. the proof of the possibility:
http://www.youtube.com/watch?v=6o92RoCV8RU
howether i couldnt get two instances of gnome running at same time. if you get some time for this lemme know what did u found.

Anonymous said...

josean, you mentioned this how-to works with onboard ATI video cards. I have seen some mobos with onboard VGA and DVI. Do those onboard cards work with pci/pcie cards? What would be a working combination; onboards with pci, or with pcie? Thanks.

Cy6erBr4in said...

Hello All,

I've faced a problem with hot-pluggable devices (for example flash drives). I couldn't open it in Gnome via clicking on drive icon on the desktop. It's possible to mount it only via shell, by mount command.

Could anybody help me with it? It's very annoying problem for me.

Thanks in advance!

/Regards,
Alexander

josean said...

Have a look at authorizations (Policy kit + Console Kit). With the default configuration, only active sessions are allowed to mount usb storage devices.

The problem is that in multiseat environment, in most cases the session is marked as non active session. This is an issue that I still do not know how to solve. Meanwhile, you can edit authorizations (polkit) in order to allow non active sessions to mount flash drives.

Cy6erBr4in said...

Hello Josean,

thanks! It's a great hint! It suits me, I'll do it in this way!

/Regards,
Alexander

alvinB said...

do you know how to make 4 users using radeon video card in ubuntu 9.04? please, inform me how to do it.

Arie Skliarouk said...

Today I tried to upgrade my ubuntu 9.04 (jaunty) to ubuntu 9.10 (karmic) and learned that it is not possible to use multiseat in ubuntu 9.10 due to the fact that GDM 2.22 (karmic has 2.28) dropped support for configuring multiple local servers via configuration files. One can read all the gory details here.

Arie Skliarouk said...

There is a good news as well: after I downgraded and pinned gdm back to version 2.20.10-0ubuntu2 (taken from jaunty), and made sure that multiseat works again, I discovered that Xephyr in the karmic supports OpenGL. That makes supertux work again!

Kacper said...

does this mean you have full opengl acceleration with xephyr or its only software rendered? Could you tell us ur hardware spec and glxgears output?

Arie Skliarouk said...

# lspci | grep Display
01:00.1 Display controller: ATI Technologies Inc RV370 [Radeon X300SE]
#glxgears
7383 frames in 5.0 seconds
Both with Xephyr and in single seat Xinerama setup.
CPU usage (of one of two 3.40GHz cores) is 100% during the test.
For some reason gimp takes about a minute to start (only the first time), but at least Xephyr does not crash on "Eraser tool" use as reported here.

Anonymous said...

It's frustrating that in one release, GDM (ver. [b]2.20[/b]) supports multiseat, while in another release (ver. [b]2.22[/b]) it doesn't. KDE isn't modular as Gnome, and for that you have to install upto 1GB of software in order to use KDM. Not to mention, configuring KDM is complicated (I have yet to find a working how-to). I think both GDM/KDM should be ditched, and efforts channeled to hack a working how-to of lightweight display managers such as xdm, slim, etc.

josean said...

I have installed Ubuntu 9.10 beta in a couple of computers right now. I will try to find a solution to make multiseat work on such version.

I will keep you informed in case that I can find a solution.

Fábio Figueiredo said...

What I have tested for solving the crashes with Gimp in Jaunty (9.04) was temporarily include karmic entry in /etc/apt/sources.list and update just a few packages related to "xserver-xephyr" (in my case, 4 packages). As far as I tested, I see no crashes related to gimp anymore.

For example, I updated "xserver-xephyr" from version 2:1.6.0-0ubuntu14 to 2:1.6.3-1ubuntu7, along with 3 other packages. Gimp is finally working with Xephyr now. I did not test Inkscape.

Do not forget to remove the karmic entry from sources.list to avoid mixing other packages' versions besides Xephyr.

josean said...

Thanks a lot, Fábio, for your suggestion

Anonymous said...

josean, I'm having a small issue with wired/wireless input devices (mouse, keyboard). Each work fine until I plug it out from the USB port. If I try to plug it again, it doesn't work again unless I restart the computer. Also, if I plug it in a different USB port and restart the computer, it doesn't work. In the case of wireless input devices, it would be convenient to conserve the batteries by turning off the mouse/keyboard when not using it. Is there's a workaround? Thanks.

josean said...

That is due to the way hotplug works. Every time when you plug a device, a different device identifier is assigned, even if it is the same device.

I experienced this issue with a keyboard having a bad contact on the USB cable, causing sporadic disconnections. The computer with such keyboard had to be reset frequently in order to get the keyboard working again.

You can configure some aspects in the way that hotplug works, but I thing that this is one of the things that it is going to change in Ubuntu 9.10

I will have a look to see if that can be solved in the upcoming Ubuntu release.

Anonymous said...

josean, thanks for the update. I've discovered that instead of resetting/rebooting the computer, restarting gdm fixes the problem. I've also discovered that instead of taking out the wireless receiver from the USB port, turning off (on/off button) the keyboard/mouse will suffice without needing to restart gdm.

Anonymous said...

Would this work on a laptop with a vga output??

Anonymous said...

josean; can you provide this solution in xdm?

josean said...

I'm afraid that, right now, I just can help with gdm. I am not experienced enough with xdm to provide useful information related to this topic.

Jakob Lenfers said...

Thanks for this great howto. Just tried this out after upgrading to Ubuntu 9.10. It seems that the GDM configuration changed massively, someone figured out already how to make it work with 9.10?

TIA,
Jakob

Arie Skliarouk said...

Jacob, see my message from October 04, 2009 5:16 PM regarding multiseat in ubuntu 9.10 (karmic).

josean said...

I will have a look at Ubuntu 9.10 as soon as possible. The idea is to have the multihead setup working just with the included packages (avoiding backports or similar if possible).

Anyway, I am experiencing several problems (slow boot times, problems with codecs, and others reported by users) on all my computers (I have three computers at home) upgraded from 9.04 to 9.10. Many people out there just recommends a clean 9.10 install.

I will inform you as soon as I have some useful or valuable to tell you.

Jakob Lenfers said...

Thanks Arie, perhaps I'll try to downgrade gdm as well, should be allright for now. And it seems there is work going on in GDM+ConsoleKit to enable multiseat even in newer gdm versions.

Bernie Thompson said...

It's also possible to implement Multiseat with all-USB devices (including for graphics), and make it fully plug and play.

Has the same issues with GDM versions 2.20 -> 2.28, though.

Here's a post with the instructions.

http://plugable.com/2009/11/16/setting-up-usb-multiseat-with-displaylink-on-linux-gdm-up-to-2-20/

Sergio de la Cruz said...

I have successfully followed this guide in an Acer One netbook. Not every pair of resolutions behave well in its Intel graphic card. You would have to try a little bit until it works.

Some issues yet to be solved:

* The Gimp/Inkscape problem making X server crash. (See Fábio Figueiredo comment above).
* The pulseaudio issue. (Also happens with the webcam).
* The built-in mouse doesn't work.
* When you need to unplug one of the USB peripherals (e.g. to insert a flash drive) and you plug it back again it is not recognized and you have to restart gdm

I have also installed the lightweight LXDE desktop environment and it works pretty well.

Thanks everybody!

Arie Skliarouk said...

Xephyr supplied in karmic (9.10) does not have the bug that causes it to crash on gimp or Inkscape:
https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/351251

josean said...

Arie, this is excellent news!
I hope to have soon a bit of free time to test multiseat on Ubuntu 9.10

josean said...

Sergio, did you test with Ubuntu 9.04 or with 9.10?

The driver for intel cards seems to have changed a lot from 9.04 to 9.10

^poort said...

seems to work in 9.10
http://www.youtube.com/watch?v=YLR0swDfAAU

Anonymous said...

Hi all

I'm using this guide as a guideline for a multiseat environment using Suse. The multiseat is working like a charm, i haven't been able to get 2 things working that apparently were fixed on ubuntu:

* Mouse wheel works properly.
* Keyboard led indicators are not messed up.

What has changed so that these two things work properly?

Thank you for this, it has been most helpfull, and i'm living proof that it is portable to the Suse distro with only minor differences.

Btw, anyone was able to get multiseat with 3D acceleration yet?

Hugs
Hartimer

SaperPL said...

Thats the point i've been fighting for. 3D acceleration still doesn't work on multiseat configs and they probably won't work for xephyr solution and useful multiplier. I think that could work on old xorg config starting multiple layouts at once but i dont have sli motherboard to test thos configs. Still if you want to have 3D acceleration on multiple stations like for gaming net cafe' you could wait for microsoft's multipoint server 2010. Hope they won't fail the job and it won't cost too much.

João Peixoto said...

Hartimer again (now logged in)

Managed to get mouse wheel working on Suse. It was a major pain in the but*. It was required to recompile the xorg-X11-server rpm.

Xephyr comes with an hardcoded 3 button limitation for mice. Had to change the file hw/src/kdrive/kinput.c, simply changing the line "nButtons=3" to "nButtons=5". It did the trick! :D

To go:

* Kayboard media keys
* 3D acceleration

Thanks for all your help

zarej said...

Is it possible to setup with two separated screens in xorg.conf instead of clone view? My monitors must have different resolutions and its impossible with clone view.

Arie Skliarouk said...

to zarej: Yes, different resolutions can be used. You need to specify correctly offset for the screens in Xephyr-login.sh and /etc/gdm/custom.conf.

João Peixoto said...

Any tips on how to get media keys to work? please? :X

I'm associating the keyboards with Xephyr as said in the guide:

command=/usr/sbin/Xephyr-path.sh -br -screen 1920x1080 -kbdpath pci-0000:00:1d.0-usb-0:1.6.2:1.0-event-kbd -mousepath pci-0000:00:1d(...)

I understand that a multimedia keyboard has two "event buffers" (cat /proc/bus/input/devices), but how to reference that second buffer? (I'm guessing that is what it is missing)

Hugs

João Peixoto said...

I'm trying to get this working with 3 seats.

I have an ATI quad-head, am using only 3 at the moment.

The Xephyr-login.sh script seems to lack extensibility for more than 2 seats... i've tried multiple compinations of things, including the inclusion of a counter system to multiply the coordinate of the movement. But so far no success...

Has anyone tried this with 3 (or more) seats?

Arie Skliarouk said...

I have upgraded my ubuntu from 9.10 to 10.04 and many things are not working properly... Wait couple days until I clear the mess and post nice summary on the affair.

Arie Skliarouk said...

Ubuntu 10.04 shipped gdm 2.30, which not includes multiseat support. There are here. For now one must downgrade to gdm 2.20 (with breaking dependencies)...
I will post here once there is progress on the issue.

Pro said...

hello there,

nice tutorial you have here, I plan to apply it to my internet cafe's computer. But there are a few things I would like to ask. First, I'd like to know if it's possible to have an onboard video plus dual head PCIe card, making total three seat. I knew some mainboards (for example, Biostar MCP6P3) support the usage of onboard and PCIe simultaneously. Is there any difference in configuration?
I'd also like to know how to assign an USB sound (or onboard sound) to each user.

Thanks for the reply.

josean said...

Hello Yosan,

I am not sure, but I do not think that you system would be able to recognize the two video cars simultaneously.

Anonymous said...

In Mic****** Wind***, the cards can be detected simultaneously using the board I specified and setting the BIOS to enable the onboard while PCIe exists (available only in few mainboards, usually Biostar), and I'm able to make three seats using Thinsoft Betwin software. The problem is classic, the price of the softwares, so I want to make it three seats using Ubuntu.

Yosan

CHAMACOS DEL ARBOL said...

Multiseat for ubuntu 10.04?

Paulo Roberto said...

Hello!
man I'm trying to accomplish the task of multiterminal but I can not could you send me email copies of files gdm.conf Xephyr xorg-path.sh and so I can compare live in Brazil and here is very precarious information about the subject ...
Grateful
paulo.caricartoon @ gmail.com

grek said...

HY you try setup it on ubuntu 10.10 ?
there is no file
/usr/lib/gdm/gdmlogin and /etc/gdm/gdm.conf so how to setup it ?

Anonymous said...

i got display 0 having VGA and DVI resolution types.... but in that case there are no display 1.... what shall i do??? or what did i miss?

josean said...

Since Ubuntu 9.10, there has been important changes in gdm, so this approach is not valid with this version of gdm (and above).

You can find on the net tutorials for systems having multiple video cards.

As soon as I find (if possible) a solution for systems having just one card (with multiple outputs) working with the current gdm version, I will publish here!

Vivi said...

Nice Post!
I like it!
But,
How to disable double login in gdm greeter? and how to enable sound for each user?

josean said...

Hello Vivi,

I am not sure if I did understand whet you mean...

Disable double login? That is just what we pretend with this setup: Two users can log in to the system!

Vivi said...

Hi, josean...
I created two users, user_1 and user_2.
When I logged in as user_1, I can still log in as user_1 in other desktop. I don't want it.. :(
I've tried doubleloginwarning=true, but I can't remove the Login anyway button.
Can you help me, please? :D