"Después del juego es antes del juego"
Sepp Herberger

martes, 31 de mayo de 2016

2x1: multiseat en las aulas (Parte I)

Tengo algunos equipos con tanta potencia y memoria de sobra que da vergüenza ponerlos como PC para un único usuario. Podría utilizarlos como hasta ahora, con servidores LTSP o bien servidores x2go, pero eso ya está hecho y había que rizar el rizo.

Mi compañero del IES Bembézar me había hablado de multiseat, gracias al cual podemos convertir 1 PC en dos (o cuatro, o n) puestos de usuario conectando 2 monitores, 2 teclados y 2 ratones = 2 "seat". 2x1. ¿Sería fácil de montar con Xubuntu 14.04?, pues me puse manos a la obra para comprobarlo.

Me he guiado principalmente por esta página de Ubuntu, aunque la mayoría de información viene de posts de foros y preguntas en stackoverflow y sitios similares....

1. Hardware que necesitamos.

Nos hacen falta 1 PC, 2 teclados, 2 ratones y 2 monitores. Para esta implementación, que es la mas sencilla y rápida, también necesitamos que en el PC haya 2 tarjetas VGA, una para cada "seat".

Si queremos que haya sonido independiente en cada seat debemos tener también 2 tarjetas de sonido. Por supuesto los periféricos deben ser compatibles con los conectores que tenga nuestro PC: no podemos poner 2 teclados PS2 si solo hay una salida PS2, claro está. Ídem para los monitores: usaremos cables y conectores VGA, DVI, HDMI, etc en función de lo que haya.

2. Preparando el entorno.

Bueno, pues para preparar esto tenemos que empezar añadiendo un repositorio ppa:
# sudo add-apt-repository ppa:ubuntu-multiseat/ppa
Que nos añadirá:
# cat /etc/apt/sources.listd.d/ubuntu-multiseat-ppa-trusty.list 
deb http://ppa.launchpad.net/ubuntu-multiseat/ppa/ubuntu trusty main
# deb-src http://ppa.launchpad.net/ubuntu-multiseat/ppa/ubuntu trusty main
Y actualizamos los paquetes, especialmente los relaciones con las X para soporte multiseat :
# sudo apt-get update
# sudo apt-get upgrade
Tambien hay que editar
# cat /etc/lightdm/lightdm.conf
[LightDM]
logind-load-seats=true
Para que lightdm reconozca la configuración de los seat y abra una sesión en cada monitor, con todo el hardware asociado.

Tampoco viene mal quitar el paquete light-locker. Hemos observado que produce pantallas en negro y bloqueos especialmente en el seat secundario. Si tenemos pkgsync lo mejor es ponerlo en maynothave.

3. Comandos básicos.

Antiguamente la configuración era mas pedestre, editando a mano fichero en /etc/udev/rules.d para asignar el hardware a los distintos dispositivos. Ahora es mas sencillo, primero veremos cómo listar los seat configurados:
 # loginctl list-seats
SEAT            
seat0           

1 seats listed.
Como se ve, por defecto solo hay un seat, el seat0. Todos los dispositivos están asociados a él, vamos a listarlos. El comando para listar los dispositivos asociados a un seat determinado es (los colores son aportación mía para identificar los componentes mejor, ojo: esto es mi máquina, en la tuya saldrán otras cosas):
 # loginctl seat-status seat0
seat0
Sessions: *c2 c1
 Devices:
   ├─/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input1
   │ input:input1 "Power Button"
   ├─/sys/device...XSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
   │ input:input0 "Power Button"
   ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0
   │ drm:card0
   ├─/sys/device...0:00/0000:00:01.0/0000:01:00.0/drm/renderD128
   │ drm:renderD128
   ├─/sys/device...000:00/0000:00:01.0/0000:01:00.0/graphics/fb0
   │ [MASTER] graphics:fb0 "radeondrmfb"
   ├─/sys/device...0000:00/0000:00:01.0/0000:01:00.1/sound/card1
   │ sound:card1 "HDMI"
   │ └─/sys/device...000:00:01.0/0000:01:00.1/sound/card1/input7
   │   input:input7 "HDA ATI HDMI HDMI/DP,pcm=3"
   ├─/sys/devices/pci0000:00/0000:00:1a.0/usb3
   │ usb:usb3
   ├─/sys/devices/pci0000:00/0000:00:1a.1/usb4
   │ usb:usb4
   ├─/sys/devices/pci0000:00/0000:00:1a.2/usb5
   │ usb:usb5
   ├─/sys/devices/pci0000:00/0000:00:1a.7/usb1
   │ usb:usb1
   │ └─/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-3
   │   usb:1-3
   ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0
   │ sound:card0 "Intel"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input10
   │ │ input:input10 "HDA Intel Line"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input11
   │ │ input:input11 "HDA Intel Line Out Front"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input12
   │ │ input:input12 "HDA Intel Line Out Surround"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input13
   │ │ input:input13 "HDA Intel Line Out CLFE"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/soundosdosd/card0/input14
   │ │ input:input14 "HDA Intel Line Out Side"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input15
   │ │ input:input15 "HDA Intel Front Headphone"
   │ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input8
   │ │ input:input8 "HDA Intel Front Mic"
   │ └─/sys/devices/pci0000:00/0000:00:1b.0/sound/card0/input9
   │   input:input9 "HDA Intel Rear Mic"
   ├─/sys/devices/pci0000:00/0000:00:1c.0/0000:05:00.0/drm/card1
   │ drm:card1
   ├─/sys/device...0:00/0000:00:1c.0/0000:05:00.0/drm/renderD129
   │ drm:renderD129
   ├─/sys/device...000:00/0000:00:1c.0/0000:05:00.0/graphics/fb1
   │ [MASTER] graphics:fb1 "nouveaufb"
   ├─/sys/devices/pci0000:00/0000:00:1d.0/usb6
   │ usb:usb6
   │ ├─/sys/device...-1/6-1:1.0/0003:0458:003A.0001/input/input3
   │ │ input:input3 "Genius Optical Mouse"
   │ ├─/sys/device...-2/6-2:1.0/0003:046D:C316.0003/input/input5
   │ │ input:input5 "Logitech Logitech USB Keyboard"
   │ └─/sys/device...-2/6-2:1.1/0003:046D:C316.0004/input/input6
   │   input:input6 "Logitech Lde configuraciónogitech USB Keyboard"
   ├─/sys/devices/pci0000:00/0000:00:1d.1/usb7
   │ usb:usb7
   ├─/sys/devices/pci0000:00/0000:00:1d.2/usb8
   │ usb:usb8
   │ └─/sys/device...-1/8-1:1.0/0003:0458:003A.0002/input/input4
   │   input:input4 "Genius Optical Mouse"
   ├─/sys/devices/pci0000:00/0000:00:1d.7/usb2
   │ usb:usb2
   ├─/sys/device...1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sr0
   │ block:sr0
   ├─/sys/device...a2/host1/target1:0:0/1:0:0:0/scsi_generic/sg1
   │ scsi_generic:sg1
   ├─/sys/devices/platform/i8042/serio0/input/input2
   │ input:input2 "AT Translated Set 2 keyboard"
   └─/sys/devices/virtual/misc/kvm
     misc:kvm

Los colores (recordemos: puestos por mi a mano para que quede clarito) tienen el siguiente significado:
  • Rojo: ratones. 
  • Verde: teclados. 
  • Azul: hub usb externo.
  • Naranja: tarjetas VGA.
  • Morado: tarjetas sonido.
Bueno, pues ahi estan las tarjetas gráficas, teclados, ratones, botones de todo tipo (el de apagado, reset, etc), puertos usb y tarjetas de sonido asociados al seat.

Veamos el hardware con el que estoy trabajando en mi caso (nótese que el teclado PS2 no sale ya que ni lsusb ni lspci lo muestran):
# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 002: ID 0458:003a KYE Systems Corp. (Mouse Systems) NetScroll+ Mini Traveler / Genius NetScroll 120
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 003: ID 046d:c316 Logitech, Inc. HID-Compliant Keyboard
Bus 006 Device 002: ID 0458:003a KYE Systems Corp. (Mouse Systems) NetScroll+ Mini Traveler / Genius NetScroll 120
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 05e3:0716 Genesys Logic, Inc. USB 2.0 Multislot Card Reader/Writer
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
# lspci | grep -i vga
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV620 LE [Radeon HD 3450]
05:00.0 VGA compatible controller: NVIDIA Corporation G72 [GeForce 7300 LE] (rev a1)
# lspci | grep -i audiodos
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] RV620 HDMI Audio [Radeon HD 3400 Series]
Como se puede apreciar, para mi PC yo tengo 2 teclados (1 USB y 1 PS2), 2 ratones (ambos USB), 2 tarjetas VGA y HUB externo USB conectados al puesto donde voy a configurar el multiseat.

En el caso de que no identifiquemos algun dispositivo en la aparatosa lista que muestra seat-status, podemos probar a desconectarlo y hacer un:
 # loginctl seat-status seat0 > antes.txt
Luego conectarlo y otra vez:
# loginctl seat-status seat0 > despues.txt
# diff antes.txt despues.txt
Y así en las diferencias entre ambos ficheros veremos la parte que describe dicho dispositivo.

Antes de seguir en el siguiente post debemos analizar tranquilamente la información que nos da nuestro hardware particular y tener claro qué es cada dispositivo y como vamos a repartirlo entre los ambos seat, dejando algunos en seat0 y moviendo otros a seat-1.

Seguimos en breve en otro post...


No hay comentarios:

Publicar un comentario