¿Cómo puedo configurar varios asientos con una sola tarjeta gráfica física?

16

Tengo una computadora Ubuntu con 16.04, y solo tengo una tarjeta gráfica.

Especificaciones

Mi hermano y yo constantemente peleamos por quién puede usarlo, así que estoy tratando de hacer un favor a todos e instalar multiseat.

  • Sería seat0, con el puerto VGA, un mouse, un teclado y las tomas de auriculares en la parte posterior de la computadora.

  • Sería seat1, con el puerto DVI-D, un mouse, un teclado y las tomas de auriculares en la parte frontal de la computadora.

  • Compartimos el dongle de Wi-Fi para conectarse a Internet.

Estoy completamente perdido en cómo hacer esto. ¿Qué archivos creo, a dónde van y qué pongo en ellos? Una respuesta bien formateada (no una guía en línea) estaría bien.

La salida de lspci:

00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 05)
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 05)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 05)
00:1c.0 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #1 (rev d5)
00:1c.1 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #2 (rev d5)
00:1c.2 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #3 (rev d5)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 05)
00:1f.0 ISA bridge: Intel Corporation C220 Series Chipset Family H81 Express LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (rev 05)
00:1f.3 SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller (rev 05)
01:00.0 PCI bridge: PLX Technology, Inc. PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA (rev ba)
01:00.1 System peripheral: PLX Technology, Inc. PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA (rev ba)
02:01.0 PCI bridge: PLX Technology, Inc. PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA (rev ba)
02:05.0 PCI bridge: PLX Technology, Inc. PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA (rev ba)
02:07.0 PCI bridge: PLX Technology, Inc. PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA (rev ba)
02:09.0 PCI bridge: PLX Technology, Inc. PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA (rev ba)
03:00.0 USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
04:00.0 USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
05:00.0 USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
06:00.0 USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
08:00.0 USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
09:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

La salida de ls /dev/input/by-path/:

pci-0000:00:14.0-usb-0:1:1.2-event-kbd
pci-0000:00:14.0-usb-0:2:1.0-event-kbd
pci-0000:00:14.0-usb-0:7:1.0-event-mouse
pci-0000:00:14.0-usb-0:1:1.2-event-mouse
pci-0000:00:14.0-usb-0:3.1:1.0-event-mouse
pci-0000:00:14.0-usb-0:7:1.0-mouse
pci-0000:00:14.0-usb-0:1:1.2-mouse
pci-0000:00:14.0-usb-0:3.1:1.0-mouse
platform-eeepc-wmi-event
Soren
fuente
1
Nunca lo intenté, pero ¿ miraste el WIKI ?
ridículo
@ridgy Eso es para tarjetas múltiples
Soren
1
Hay algunas soluciones más (como Xephyr, mira la respuesta a esta pregunta ). Pero para las aplicaciones intensivas de GPU como los juegos, ninguno de estos será lo suficientemente preformado, por lo que veo, ni los servidores X remotos ya que no pueden usar la GPU de la computadora que ejecuta el cliente X para renderizar.
ridículo
xdmcp utilizará el motor de renderizado local y se mostrará de forma remota, aunque es posible que no obtenga algunas de las extensiones más modernas y elegantes como el glamour para trabajar
Amias

Respuestas:

7

Así que esta es una guía antigua, pero aún puede funcionar. MultiSeatOneCard .

Algunas notas antes de comenzar a traer instrucciones:

  • gdmEs posible que ni siquiera sea necesaria toda la configuración que quiere que haga. Si tienes GNOME, ya tienes gdm(y una versión mucho más nueva). Unity usa lightdm, lo que parece que puede no funcionar. Debe instalarlo gdmy usarlo para probar esta guía.

  • Solo otra advertencia: GUÍA ANTIGUA. Puede que no funcione, puede romper Ubuntu, puede hacer estallar su máquina (no realmente, por supuesto). Por favor, tenga cuidado y respalde las cosas.

Ahora para la guia

La wiki sugiere deshabilitar la pantalla de inicio con lo siguiente. No sé si el procedimiento aún funciona o no.

Muchas cosas pueden salir mal con esta configuración y la elegante pantalla de bienvenida durante el arranque no ayuda. Para deshabilitarlo (tal vez temporalmente) edite / etc / default / grub y cambie la asignación GRUB_CMDLINE_LINUX_DEFAULT de splash silencioso a nomodeset noplymouth. Luego ejecute sudo update-grub.

La siguiente parte, sobre "escritorio expandido", probablemente también se puede omitir. Simplemente conecte ambos monitores y configúrelos en "modo extendido" en la configuración de su monitor.

Ahora, para alguna configuración.

Primero, busque en /etc/gdm/gdm.conf, en la sección [servidores], una línea que comience con 0 = .... (sin # al comienzo de la línea). Pon un # delante de él.

Eso debería ser posible sin muchos problemas.

Luego edite /etc/gdm/gdm.conf-custom. Busque la sección [seguridad] y agregue una línea PamStack = gdm-2.20.

Aquí es donde podría tener un problema. En lugar de 2.20, es posible que deba probar 3.18 (esto es para 16.04).

busque la sección [xdmcp] y agregue una línea Enable = true.

Eso no debería causar problemas.

XDMCP no es un protocolo particularmente seguro, por lo que es una buena idea hacer que gdm rechace las conexiones desde otras computadoras. Agregue una línea gdm: 127. * en /etc/hosts.allow y una línea gdm: ALL en /etc/hosts.deny.

Esto, puedes elegir no hacerlo. Si le importa la seguridad, le sugiero que lo haga, pero de lo contrario, creo que puede dejarlo.

Ahora reinicie gdmreiniciando (probablemente la forma más fácil). Si ve la pantalla de inicio de sesión de GDM, algo está pasando. Consulte la guía original y modifique algunas configuraciones.

Si no tiene una pantalla de inicio de sesión, acceda a un TTY y ejecute X -query 127.0.0.1. Si aparece GDM, mátalo (vuelve al TTY y mátalo allí).

Haga un nuevo usuario llamado monitor:

addgroup --gid 983 monitor
adduser --uid 983 --gid 983 monitor

Cree un archivo (la guía no tiene especificaciones de nombre) /etc/udev/rules.d/my.rulesy coloque lo siguiente:

SUBSYSTEM=="input", OWNER="monitor", GROUP="monitor"

Algunas instalaciones de paquetes:

apt-get install x11-utils xserver-xephyr

Necesitamos separar los monitores con algunos alias:

ln -s xmessage /usr/bin/xmessage0
ln -s xmessage /usr/bin/xmessage1

Inicie sesión en el monitorusuario en el TTY y cree ~/.xsession.

Pon esto dentro:

runscreen () {
    # $1 = number
    # $2 = geometry
    local xpid winid k
    while :; do
        xmessage$1 -geometry $2 "Window $1" &
        xpid=$!
        k=10
        while \
            winid=`xwininfo -name xmessage$1|grep 'Window id'|cut -d' ' -f4` \
            && [ $k -gt 0 -a ! "$winid" ]
        do
            sleep 1
            k=$(($k - 1))
        done
        if [ "$winid" ]; then
            Xephyr :1$1 -parent "$winid" -dpms -keybd "evdev,,device=$3,$xkb" -mouse "evdev,,device=$4" -query 127.0.0.1 
        fi
        kill $xpid
        sleep 3
        kill -9 $xpid
    done 
}

# For some reason I was unable to set the following in xorg.conf
# We need to turn off power management of the main X server because it doesn't
# see either of the keyboards and the mice so it will enter power-saving mode
# after 10 minutes
xset s off
xset dpms 0 0 0
xset -dpms

xkb='xkbrules=xorg,xkbmodel=evdev,xkblayout=us'

# PS/2 keyboard and mouse
kbd1=`ls /dev/input/by-path/platform-*-event-kbd`
mouse1=`ls /dev/input/by-path/platform-*-event-mouse`

# USB keyboard and mouse
kbd2=`ls /dev/input/by-path/pci-*-event-kbd`
mouse2=`ls /dev/input/by-path/pci-*-event-mouse`

runscreen 1 1280x1024+1920+0 "$kbd2" "$mouse2" &
runscreen 0 1920x1080+0+0 "$kbd1" "$mouse1"

Recuerde editarlo para reflejar sus resoluciones.

Ejecutar startxcomo el monitorusuario y ver si funciona.

Esto debe hacerse para comenzar en el arranque si funciona, así que agréguelo al final de ~/.profile(para la cuenta del monitor):

if [ "`tty`" = /dev/tty6 ]; then
    exec startx
fi

Mata la GUI y ve a TTY6. Inicie sesión como monitory debería iniciarse.

Si eso funciona, edite el archivo /etc/init/tty6.confcomo raíz y reemplace la línea que comienza /sbin/gettycon

exec /bin/login -f monitor tty6 </dev/tty6 >/dev/tty6 2>&1

Si funciona, pero también desea separar el audio, la guía MultiSeatX vinculada tiene algunas cosas para usted.

Recuerde que esto puede no funcionar. Escribí esto bastante rápido y espero editarlo para que quede un poco más claro si es necesario. He adaptado partes de la guía para estar más actualizado y aumentar las posibilidades de éxito.

¡Buena suerte!

El vagabundo
fuente
¿Algún conocimiento sobre portar a LightDM?
Soren
@moo_we_all_do no, ninguno en absoluto. Solo puedo tener una idea algo específica de lo que hace este procedimiento y por qué es necesario, pero no sé cómo funciona GDM frente a LightDM. Sin embargo, no es realmente un problema usar GDM en lugar de LightDM. Su pantalla de inicio de sesión cambia y eso es todo (visiblemente).
TheWanderer
3

Suena muy bien, así que busqué y encontré esta entrada de wiki vinculada a esta entrada de wikipedia . Básicamente utiliza una herramienta llamada xephyr para organizar entradas / salidas.

La entrada es bastante antigua y solo se actualizó para ubuntu 12.04, pero xephyr todavía está en los repositorios estándar (solo probé su presencia en mi computadora). Las ediciones de configuración parecen complejas pero bastante sencillas, aún podría funcionar. Aquí hay un blog que data de 2014, que hace que uno también tenga esperanzas.

Por favor, háganos saber cómo le va!

Jeroen
fuente
¡Genial gracias! ¿Puedes publicar una versión editada de las instrucciones que se ajusten a mi configuración en tu respuesta?
Soren
No creo que sea posible. Deberá realizar casi todos los pasos (excepto la instalación inicial), también gdm ahora se reemplaza por lightdm. ¿Quizás tengas suerte con el mago mencionado en la entrada ? Pero también parece anticuado ...
Jeroen
1

No creo que esto sea posible porque no puedes tener dos conjuntos de dispositivos de entrada. Es posible que una herramienta como la sinergia pueda ayudar aquí, pero será desordenada.

Podría obtener otra máquina y usarla como X Terminal, esto solo necesitaría ser lo suficientemente rápido para actualizar la pantalla, así que pregunte a sus amigos por su vieja PC. Si configura su máquina original para ejecutar XDMCP, permitirá que la otra máquina inicie sesión en su propio escritorio.

Esta funcionalidad está programada para ser eliminada de ubuntu cuando X windows se reemplace con Mir, esto probablemente será alrededor del momento del próximo lanzamiento de LTS.

Aquí está la guía de ubuntu para XDMCP: https://wiki.ubuntu.com/xdmcp

Amias
fuente
Solo tenemos 1 buena computadora. Nuestras otras computadoras son lentas. Esto funcionaria?
Soren
He hecho esto con una laptop pre pentium y una tarjeta wifi Cisco Aironet
Amias
¿Puedes agregar instrucciones a esta respuesta? Por ejemplo, "Editar (archivo) para decir esto: .."
Soren
Tengo, las instrucciones xdmcp están cubiertas en esa guía y son demasiado largas para reproducirlas aquí. La configuración de xdmcp no es trivial.
Amias