How to lock one mouse/keyboard pair to each screen?

16,125

Solution 1

One interesting possibility I forgot is what Tyler Szabo's answer to my question Multiseat gaming? @gaming.SE suggests:

I would use VMWare. This might be possible with just VMWare player (you will need to be able to allocate a mouse to a single VM), or you might need to try VMWare workstation (for which I'm quite sure it works). The hardware/software you will need is as follows:

  • Multiple sets of USB input (mice/keyboard/etc.)
  • A license for VMWare Workstation (or another VM system)

    1. Set up a VM as you normally would and power it down.
    2. Configure the USB Controller (found in "Edit virtual machine settings") to "Show all USB input devices"
    3. Start up the VM.
    4. In the menu Navigate to VM -> Removable Devices, and select the inputs to direct to the VM exclusively. (Now one of your keyboard/mouse combinations will only be directed to that VM.)

At this point you have a window that is fully isolated with a set of inputs that will go only to it. You can do this for as many VMs as you can handle (and for as many sets of input as you can handle - I only tested with 2). The only irritating thing that can happen is is you have only 2 sets of inputs (in my case my laptop keyboard, my USB keyboard and 2 USB mice). I set up a VM with my USB Keyboard/Mouse combo, and maximized that to one monitor (you need VMWare tools to do this). For the other I had a problem that my mouse could escape from one VM onto the other (a feature of tools); to get around that I put my second VM in "exculsive mode" thus caputuring my "host" input; I could also have had a second keyboard/mouse combo.

Best of this is, you don't even need multiple monitors, you could do it split-screen style with a bunch of VMs+keyboards+mice.

Solution 2

If I understood your needs you have to bind one screen, keyboard and one mouse to one ServerLayout and the others to the second one.

http://cambuca.ldhs.cetuc.puc-rio.br/multiuser/

Section "ServerLayout"
    Identifier "Layout0"
    Screen 0 "Screen0"
    InputDevice "Mouse0" "CorePointer"
    InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerLayout"
    Identifier "Layout1"
    Screen 0 "Screen1"
    InputDevice "Mouse0" "CorePointer"
    InputDevice "Keyboard0" "CoreKeyboard"
EndSection

This is, as far as I know, the only way to proceed.

Also Arch as one good tutorial:

https://wiki.archlinux.org/index.php/Xorg_multiseat

And Linux Toys show you even how to put in place a 6 seated setup

http://www.linuxtoys.org/multiseat/multiseat.html

Solution 3

Have you tried something like MDM? It looks like it can handle the keyboard/video/mouse mappings in its config file.

Solution 4

Look for multiseat and you will find the info you need. The linked Wikipedia article even describes where MDM fits in.

Im a Debian fan so check out Debian Wiki or the Ubuntu Community Docs. XORG has a good collection of multiseat info, including this detailed how-to.

Good Luck!

Solution 5

The other answers were certainly on the right path, but the MDM/multiseat documentation is quite lacking and disperse. Some of the links provided here were outdated, referencing XFree86, Xorg's predecessor. Some digging shows that most MDM configurations use Xephyr.

Here is a HOWTO on building Multiseat Xephyr configuration:

http://en.wikibooks.org/wiki/Multiterminal_with_Xephyr

Share:
16,125

Related videos on Youtube

Tobias Kienzler
Author by

Tobias Kienzler

Physicist.

Updated on September 17, 2022

Comments

  • Tobias Kienzler
    Tobias Kienzler over 1 year

    Using the ATI Catalyst Control Center (fglrx), I setup two desktops (the multidesktop option) via dual-head. Now I have two mice and keyboards (USB) attached which, using xinput can be put in two separate groups. Can I lock each group to one screen? And how can this be done permanently? Alternatively, instructions for turning this "lite multiseat" configuration into multiseat are appreciated as well.

    This is the xorg.conf as setup by the Catalyst Center:

    Section "ServerLayout"
        Identifier     "amdcccle Layout"
        Screen      0  "amdcccle-Screen[1]-0" 0 0
        Screen         "amdcccle-Screen[1]-1" 1400 0
    EndSection
    
    Section "Module"
        Load  "glx"
    EndSection
    
    Section "Monitor"
        Identifier   "0-CRT1"
        Option      "VendorName" "ATI Proprietary Driver"
        Option      "ModelName" "Generic Autodetecting Monitor"
        Option      "DPMS" "true"
        Option      "PreferredMode" "1400x1050"
        Option      "TargetRefresh" "60"
        Option      "Position" "0 0"
        Option      "Rotate" "normal"
        Option      "Disable" "false"
    EndSection
    
    Section "Monitor"
        Identifier   "0-DFP1"
        Option      "VendorName" "ATI Proprietary Driver"
        Option      "ModelName" "Generic Autodetecting Monitor"
        Option      "DPMS" "true"
        Option      "PreferredMode" "1400x1050"
        Option      "TargetRefresh" "60"
        Option      "Position" "0 0"
        Option      "Rotate" "normal"
        Option      "Disable" "false"
    EndSection
    
    Section "Device"
        Identifier  "Default Device"
        Driver      "fglrx"
    EndSection
    
    Section "Device"
        Identifier  "amdcccle-Device[1]-0"
        Driver      "fglrx"
        Option      "Monitor-DFP1" "0-DFP1"
        BusID       "PCI:1:5:0"
    EndSection
    
    Section "Device"
        Identifier  "amdcccle-Device[1]-1"
        Driver      "fglrx"
        Option      "Monitor-CRT1" "0-CRT1"
        BusID       "PCI:1:5:0"
        Screen      1
    EndSection
    
    Section "Screen"
        Identifier "Default Screen"
        DefaultDepth     24
        SubSection "Display"
        EndSubSection
    EndSection
    
    Section "Screen"
        Identifier "amdcccle-Screen[1]-0"
        Device     "amdcccle-Device[1]-0"
        DefaultDepth     24
        SubSection "Display"
            Viewport   0 0
            Depth     24
        EndSubSection
    EndSection
    
    Section "Screen"
        Identifier "amdcccle-Screen[1]-1"
        Device     "amdcccle-Device[1]-1"
        DefaultDepth     24
        SubSection "Display"
            Viewport   0 0
            Depth     24
        EndSubSection
    EndSection
    
    Section "DRI"
        Group        "vglusers"
        Mode         0660
    EndSection
    

    (the latter entry is from VirtualGL, see this question, it should be irrelevant here)

    • Tobias Kienzler
      Tobias Kienzler over 13 years
      Thank you all for your answers. I won't be able to test this for a while so I can't accept an answer yet, but I'll award tmow's answer for quoting a bit more
  • Tobias Kienzler
    Tobias Kienzler over 13 years
    thanks. however the first link is XFree86 related, does it still work with X11? Also, you miss-pasted the Arch link...
  • tmow
    tmow over 13 years
    Yes, sure, it applies also to X.org. Sorry for the mistake, I've fixed it and actually that link should explain you much better a multi-seat configuration
  • Tobias Kienzler
    Tobias Kienzler over 13 years
    this is the only solution I got working so far...