Comment puis-je configurer plusieurs sièges avec une seule carte graphique physique?

16

J'ai un ordinateur Ubuntu exécutant 16.04 et je n'ai qu'une seule carte graphique.

Spécifications

Mon frère et moi nous disputons constamment pour savoir qui peut l'utiliser, alors j'essaie de rendre service à tout le monde et d'installer plusieurs sièges.

  • Je serais seat0, avec le port VGA, une souris, un clavier et les prises casque à l'arrière de l'ordinateur.

  • Il serait seat1, avec le port DVI-D, une souris, un clavier et les prises casque à l'avant de l'ordinateur.

  • Nous partagerions le dongle Wi-Fi pour se connecter à Internet.

Je ne sais absolument pas comment procéder. Quels fichiers dois-je créer, où vont-ils et que dois-je y mettre? Une réponse bien formatée (pas un guide en ligne) serait bien.

La sortie 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 sortie 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
la source
1
Je n'ai jamais essayé, mais avez-vous regardé le WIKI ?
ridy
@ridgy C'est pour plusieurs cartes
Soren
1
Il existe d'autres solutions (comme Xephyr, regardez la réponse à cette question ). Mais pour les applications gourmandes en GPU comme les jeux, ni l'un ni l'autre ne sera suffisamment performant, à ma connaissance, ni les serveurs X distants car ils ne peuvent pas utiliser le GPU de l'ordinateur exécutant le client X pour le rendu.
ridy
xdmcp utilisera le moteur de rendu local et s'affichera à distance, bien que vous ne puissiez pas faire fonctionner certaines des xtenstions les plus modernes comme le glamour
Amias

Réponses:

7

Il s'agit donc d'un ancien guide, mais il peut encore fonctionner. MultiSeatOneCard .

Quelques notes avant de commencer à apporter des instructions:

  • Toute la gdmconfiguration qu'il souhaite que vous fassiez peut-être même pas nécessaire. Si vous avez GNOME, vous l'avez déjà gdm(et une version beaucoup plus récente). Unity utilise lightdm, ce qui semble ne pas fonctionner. Vous devez l'installer gdmet l'utiliser pour essayer ce guide.

  • Juste un autre avertissement: VIEUX GUIDE. Cela peut ne pas fonctionner, cela peut casser Ubuntu, cela peut faire exploser votre machine (pas vraiment bien sûr). S'il vous plaît soyez prudent et sauvegardez les choses.

Maintenant pour le guide

Le wiki suggère de désactiver l'écran de démarrage avec ce qui suit. Je ne sais pas si la procédure fonctionne toujours ou non.

Beaucoup de choses peuvent mal tourner avec cette configuration et l'écran de démarrage sophistiqué pendant le démarrage n'aide pas. Afin de le désactiver (peut-être temporairement), éditez / etc / default / grub et changez l'affectation GRUB_CMDLINE_LINUX_DEFAULT de splash silencieux en nomodeset noplymouth. Exécutez ensuite sudo update-grub.

La partie suivante, à propos du "bureau étendu", peut également être ignorée. Branchez simplement les deux moniteurs et réglez-les en "mode étendu" dans les paramètres de votre moniteur.

Maintenant, pour une configuration.

Tout d'abord, trouvez dans /etc/gdm/gdm.conf, dans la section [serveurs] une ligne commençant par 0 = .... (sans # au début de la ligne). Mettez un # devant.

Cela devrait être possible sans trop de problèmes.

Modifiez ensuite /etc/gdm/gdm.conf-custom. Recherchez la section [sécurité] et ajoutez une ligne PamStack = gdm-2.20.

C'est là que vous pourriez avoir un problème. Au lieu de 2.20, vous devrez peut-être essayer 3.18 (c'est pour 16.04).

recherchez la section [xdmcp] et ajoutez une ligne Enable = true.

Cela ne devrait poser aucun problème.

XDMCP n'est pas un protocole particulièrement sécurisé, c'est donc une bonne idée de faire des connexions gdm refusées à partir d'autres ordinateurs. Ajoutez une ligne gdm: 127. * dans /etc/hosts.allow et une ligne gdm: ALL dans /etc/hosts.deny.

Cela, vous pouvez choisir de ne pas le faire. Si vous vous souciez de la sécurité, je vous suggère de le faire, mais sinon, je pense que vous pouvez le laisser.

Redémarrez maintenant gdmen redémarrant (probablement le moyen le plus simple). Si vous voyez l'écran de connexion GDM, quelque chose se passe. Consultez le guide d'origine et ajustez certains paramètres.

Si vous n'avez pas d'écran de connexion, accédez à un ATS et exécutez X -query 127.0.0.1. Si GDM arrive, tuez-le (retournez au TTY et tuez-le là).

Créez un nouvel utilisateur appelé monitor:

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

Créez un fichier (le guide n'a pas de spécification de nom) /etc/udev/rules.d/my.ruleset insérez ce qui suit:

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

Quelques installations de packages:

apt-get install x11-utils xserver-xephyr

Nous devons séparer les moniteurs avec quelques alias:

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

Connectez-vous à l' monitorutilisateur dans le TTY et créez ~/.xsession.

Mettez ceci à l'intérieur:

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"

N'oubliez pas de le modifier pour refléter vos résolutions.

Exécutez en startxtant monitorqu'utilisateur et voyez si cela fonctionne.

Cela doit être fait pour démarrer au démarrage si cela fonctionne, alors ajoutez ceci à la fin de ~/.profile(pour le compte moniteur):

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

Tuez l'interface graphique et passez à TTY6. Connectez-vous en tant que monitoret il devrait démarrer.

Si cela fonctionne, éditez le fichier en /etc/init/tty6.conftant que root et remplacez la ligne commençant /sbin/gettypar

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

Si cela fonctionne, mais que vous souhaitez également séparer l'audio, le guide MultiSeatX lié a quelques trucs pour vous.

N'oubliez pas que cela peut ne pas fonctionner. J'ai tapé ceci assez rapidement et je l'espère le modifierai pour être un peu plus clair si nécessaire. J'ai adapté des parties du guide pour être plus à jour et augmenter les chances de succès.

Bonne chance!

Le vagabond
la source
Avez-vous des connaissances sur le portage vers LightDM?
Soren
@moo_we_all_do non, pas du tout. Je peux seulement avoir une idée quelque peu précise de ce que fait cette procédure et pourquoi elle est nécessaire, mais je ne sais pas comment GDM fonctionne par rapport à LightDM. Cependant, ce n'est pas vraiment un problème d'utiliser GDM au lieu de LightDM. Votre écran de connexion change et c'est tout (visiblement).
TheWanderer
3

Cela semble très cool, donc j'ai parcouru et trouvé cette entrée wiki comme liée à partir de cette entrée wikipedia . Il utilise essentiellement un outil appelé xephyr pour organiser les entrées / sorties.

L'entrée est assez ancienne et n'a été mise à jour que pour Ubuntu 12.04, mais xephyr est toujours dans les dépôts standard (je viens de tester sa présence sur mon ordinateur). Les modifications de configuration semblent complexes mais assez simples, cela pourrait encore fonctionner. Voici un blog datant de 2014, qui donne aussi de l'espoir.

Veuillez nous faire savoir comment vous vous en sortez!

Jeroen
la source
Bien, merci! Pouvez-vous publier une version éditée des instructions qui correspondent à ma configuration dans votre réponse?
Soren
Je ne pense pas que ce soit même possible. Vous devrez effectuer presque toutes les étapes (à l'exception de l'installation initiale), gdm est également remplacé par lightdm. Peut-être avez-vous de la chance avec l' assistant mentionné dans l'entrée ? Mais aussi celui-là semble dépassé ...
Jeroen
1

Je ne pense pas que cela soit possible car vous ne pouvez pas avoir deux ensembles de périphériques d'entrée. Son possible un outil comme la synergie pourrait aider ici, mais il sera désordonné.

Vous pourriez obtenir une autre machine et l'utiliser comme X Terminal, cela n'aurait besoin que d'être assez rapide pour mettre à jour l'écran, alors demandez à vos amis leur ancien PC. Si vous configurez votre machine d'origine pour exécuter XDMCP, il permettra alors à l'autre machine de se connecter à son propre bureau.

Cette fonctionnalité devrait être supprimée d'ubuntu lorsque X windows sera remplacé par Mir, ce sera probablement au moment de la prochaine version de LTS.

Voici le guide d'Ubuntu sur XDMCP - https://wiki.ubuntu.com/xdmcp

Amias
la source
Nous n'avons qu'un seul bon ordinateur. Nos autres ordinateurs sont lents. Cela fonctionnerait?
Soren
je l'ai fait avec un ordinateur portable pré pentium et une carte wifi cisco aironet
Amias
Pouvez-vous ajouter des instructions à cette réponse? Par exemple "Modifier (fichier) pour dire ceci: .."
Soren
J'ai, les instructions xdmcp sont toutes couvertes dans ce guide et sont trop longues pour être reproduites ici. La configuration de xdmcp n'est pas anodine.
Amias