Multiseat avec des pilotes libres, non libres et systemd

51
5
juil.
2017
Administration système

Ou comment avoir deux utilisateurs simultanés sur un seul PC, avec deux écrans, deux clavier, deux souris et deux cartes graphiques (et deux chaises !), facilement et pour pas cher.

Sommaire

J’ai deux cartes graphiques : une NVIDIA GTX 750 Ti et une Radeon FirePro V3700. Problème : je veux utiliser les pilotes non libres NVIDIA (pour des meilleures performances). C‘était impossible jusqu’à la sortie (et mise à jour) de Fedora 25.
Cette nouvelle version utilise la fonctionnalité GLVND qui permet de faire cohabiter deux pilotes OpenGL. Mes deux cartes graphiques peuvent désormais cohabiter sans avoir à utiliser uniquement les pilotes Mesa 3D (nouveau et radeon) pour les deux processeurs graphiques.

Prérequis

Au fil de vos essais, vous vous retrouverez peut‐être avec un système incapable de lancer une session graphique, ou même l’accès à la console sera impossible (peu probable). Je vous conseille d’installer un accès à distance SSH avant de vous lancer. Testez‐le avant et, si vous n’avez pas de deuxième ordinateur, des clients SSH sont disponibles pour les appareils mobiles sous Android et iOS.

Fedora 25 utilise systemd comme système d’initialisation et implémente logind. Ce composant permet de gérer les sessions, les utilisateur connectés et les sièges (seat). Pour configurer plusieurs « sièges » sur un seul système, on peut utiliser logind qui automatise tout au lieu d’avoir à éditer à la main un fichier Xorg.conf !
J’ai un système multi‐seat fonctionnel sous Fedora 25, cependant Debian 9 Stretch est peut‐être compilé avec GLVND. Si vous avez deux cartes graphiques identiques, vous pouvez utiliser n’importe quelles distributions pour peu qu’elle fonctionne avec systemd.

Matériel requis

Vous pouvez utiliser n’importe quel périphérique USB ou PS/2, mais essayez d’avoir une configuration logique (brancher l’écran avec la plus grande définition sur la carte graphique la plus puissante si vous souhaitez faire du jeu vidéo).
Pour une expérience optimale, il est préférable d’avoir une carte son par utilisateur (et un ou deux casques audio pour éviter la cacophonie), sinon il est possible de configurer pulseaudio pour deux utilisateurs (non testé). Vous pouvez utiliser les sorties son HDMI de votre écran, ce, même si cet écran est utilisé pour un autre poste.
Il est conseillé d’utiliser des périphériques USB de marques et modèles différents, comme ça leurs identificateurs USB seront différents (apparemment les périphériques USB ont tendance à s’échanger leur place).

Configuration

C’est très facile, mais après, bonne chance pour vous y retrouver avec tous les câbles ! Je vous conseille aussi de brancher les écrans aux cartes graphiques dès le début.

Logiciels

Tout d’abord, trouvez quel gestionnaire de sessions (desktop manager) vous utilisez (c’est ce qui crée l’écran de connexion). Si c’est GDM (pour GNOME), SDDM (pour Plasma 5), il va falloir changer, car ceux‐ci n’afficheront un écran de connexion que sur le premier siège. Je conseille LightDM, bien que XDM soit compatible multi‐seat :

  • installez LightDM : # dnf install lightdm ;
  • installez le thème de votre choix (greeter) : # dnf install slick-greeter (ou lightdm-gtk, lightdm-kde…) ;
  • désinstallez votre gestionnaire de sessions : # dnf remove gdm ;
  • redémarrez ou passez en console (Ctrl + Alt + F2) et relancez les services : # systemctl stop gdm, puis # systemclt start lightdm.

Matériel

Identifiez

Ensuite, listez votre matériel, qui est par défaut entièrement alloué au siège initial seat0 : loginctl seat-status. Exemple (je liste deux sièges, car j’ai déjà assigné mon matériel ; si vous commencez vous n'aurez que seat0) :

$ loginctl seat-status seat0 seat1--no-pager
seat0
Sessions: *2
Devices:
├─/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
│ input:input2 "Power Button"
├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input8
│ input:input8 "Video Bus"
├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
│ input:input0 "Power Button"
├─/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input1
│ input:input1 "Sleep Button"
├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0
│ [MASTER] drm:card0
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1
│ │ [MASTER] drm:card0-HDMI-A-1
│ └─/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-VGA-1
│ [MASTER] drm:card0-VGA-1
├─/sys/devices/pci0000:00/0000:00:02.0/drm/renderD128
│ drm:renderD128
├─/sys/devices/pci0000:00/0000:00:02.0/graphics/fb2
│ [MASTER] graphics:fb2 "inteldrmfb"
├─/sys/devices/pci0000:00/0000:00:03.0/sound/card0
│ sound:card0 "HDMI"
│ ├─/sys/devices/pci0000:00/0000:00:03.0/sound/card0/input14
│ │ input:input14 "HDA Intel HDMI HDMI/DP,pcm=3"
│ ├─/sys/devices/pci0000:00/0000:00:03.0/sound/card0/input15
│ │ input:input15 "HDA Intel HDMI HDMI/DP,pcm=7"
│ ├─/sys/devices/pci0000:00/0000:00:03.0/sound/card0/input16
│ │ input:input16 "HDA Intel HDMI HDMI/DP,pcm=8"
│ ├─/sys/devices/pci0000:00/0000:00:03.0/sound/card0/input17
│ │ input:input17 "HDA Intel HDMI HDMI/DP,pcm=9"
│ └─/sys/devices/pci0000:00/0000:00:03.0/sound/card0/input18
│ input:input18 "HDA Intel HDMI HDMI/DP,pcm=10"
├─/sys/devices/pci0000:00/0000:00:14.0/usb3
│ usb:usb3
│ ├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3:1.0/0003:046D:C05A.0002/input/input5
│ │ input:input5 "Logitech USB Optical Mouse"
│ └─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.1/0003:0603:00F2.0004/input/input7
│ input:input7 "NOVATEK USB Keyboard"
├─/sys/devices/pci0000:00/0000:00:14.0/usb4
│ usb:usb4
├─/sys/devices/pci0000:00/0000:00:1a.0/usb1
│ usb:usb1
│ └─/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1
│ usb:1-1
├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card1
│ sound:card1 "PCH"
│ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card1/input10
│ │ input:input10 "HDA Intel PCH Rear Mic"
│ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card1/input11
│ │ input:input11 "HDA Intel PCH Line"
│ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card1/input12
│ │ input:input12 "HDA Intel PCH Line Out"
│ ├─/sys/devices/pci0000:00/0000:00:1b.0/sound/card1/input13
│ │ input:input13 "HDA Intel PCH Front Headphone"
│ └─/sys/devices/pci0000:00/0000:00:1b.0/sound/card1/input9
│ input:input9 "HDA Intel PCH Front Mic"
├─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.0/drm/card2
│ [MASTER] drm:card2
├─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.0/drm/renderD130
│ drm:renderD130
├─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.1/sound/card2
│ sound:card2 "NVidia"
│ ├─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.1/sound/card2/input19
│ │ input:input19 "HDA NVidia HDMI/DP,pcm=3"
│ ├─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.1/sound/card2/input20
│ │ input:input20 "HDA NVidia HDMI/DP,pcm=7"
│ ├─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.1/sound/card2/input21
│ │ input:input21 "HDA NVidia HDMI/DP,pcm=8"
│ └─/sys/devices/pci0000:00/0000:00:1c.4/0000:06:00.1/sound/card2/input22
│ input:input22 "HDA NVidia HDMI/DP,pcm=9"
├─/sys/devices/pci0000:00/0000:00:1d.0/usb2
│ usb:usb2
│ └─/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1
│ usb:2-1
├─/sys/devices/platform/efi-framebuffer.0/graphics/fb0
│ [MASTER] graphics:fb0 "EFI VGA"
├─/sys/devices/platform/i8042/serio0/input/input3
│ input:input3 "AT Translated Set 2 keyboard"
└─/sys/devices/virtual/misc/rfkill
misc:rfkill

seat1
Sessions: *c1
Devices:
├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1
│ [MASTER] drm:card1
│ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-DVI-I-1
│ │ [MASTER] drm:card1-DVI-I-1
│ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-DVI-I-2
│ [MASTER] drm:card1-DVI-I-2
├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/renderD129
│ drm:renderD129
├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/graphics/fb1
│ [MASTER] graphics:fb1 "radeondrmfb"
├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1:1.0/0003:413C:3200.0001/input/input4
│ input:input4 "Dell Dell USB Mouse"
└─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0/0003:0603:00F2.0003/input/input6
input:input6 "NOVATEK USB Keyboard"

Il y a trois catégories qui vous intéressent : drm (carte graphique), graphics (framebuffer et écran) et input (clavier et souris). Notez ici que j’ai un iGPU Intel non utilisé, et que, faute aux pilotes NVIDIA, mon système utilise les framebuffers au lieu de l’interface moderne DRM (donc, pas de Wayland ici).
Il vous faut donner à un siège :

  • un entrée clavier input:inputX ;
  • une entrée souris input:inputX ;
  • une carte graphique drm:cardX ;
  • un processeur graphique drm:renderXXX ;
  • un framebuffer (graphics:fbX _nom_du_pilote_).

Pour identifier vos périphériques, référez‐vous à leur marque (Logitech USB Optical Mouse est une souris Dell par exemple…).

Assignez

Sélectionnez le chemin d’accès entier du périphérique (attention, ça peut dépasser de votre terminal), et collez‐le dans la commande suivante : # loginctl attach seatX chemin_du_matériel où X représente l’identifiant du siège (vous pouvez mettre 1, 2, A, B…).
Par exemple, pour assigner mon clavier USB au siège 2, je tape
sudo loginctl attach seat1 /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0/0003:0603:00F2.0003/input/input6.
Si certaines touches de votre clavier ne fonctionnent pas (touches multimédias ou Windows, pavé numérique…), regardez si votre clavier n’est pas listé deux fois (deux lignes input:inputX avec le même nom), et rajoutez le second input au siège concerné.

Utilisez

Si un écran de connexion n’est pas apparu sur le(s) nouveau(x) siège(s), redémarrez votre gestionnaire de sessions ou votre système si vous êtes flemmard.
systemctl restart lightdm (notez que cette commande fermera instantanément toute session graphique, donc sauvegardez vos documents ouverts).

Post‐scriptum:

Les ressources de votre système seront partagées entre les utilisateurs, donc il est préférable d’avoir un processeur multicœur, un disque dur rapide et suffisamment de mémoire vive (les environnements de bureau seront chargés plusieurs fois…). Si votre machine dispose de peu de ressources, envisagez de passer à XFCE au lieu de GNOME ou KDE. Vous pouvez aussi mettre le /home de chaque utilisateur sur un disque différent, ou encore mettre en place un RAID logiciel ou matériel si vous avez le matériel nécessaire. Pour le réseau, comme d’habitude, votre interface sera partagée entre les utilisateurs, alors attention aux téléchargements volumineux (comme dans le cas de plusieurs ordinateurs se partageant la connexion Internet d’une box).
Pour la vie privée, l’autre utilisateur peut probablement regarder votre écran, donc débrouillez‐vous.
Si vous utilisez GNOME, sachez qu’il refusera de se verrouiller s’il est lancé par un autre gestionnaire de sessions que GDM. Cependant, s’il est lancé avec startx -- -seat seatX le verrouillage fonctionne, mais vous perdrez la possibilité de connecter n’importe quel utilisateur sur n’importe quel siège.

Soyez fiers de GNU/Linux

Les solutions pour Windows sont toutes payantes, et toutes ne permettent pas d’avoir des performances graphiques natives. Ne parlons pas de macOS/OSX, Apple serait trop triste de ne pas vous vendre une seconde machine. :)
Je sais qu’on peut acheter des dongles USB sur lesquels on branche écran, clavier et souris, et qui affichent automatiquement sous GNU/Linux un deuxième écran de connexion ; mais ça ne permet surement pas d’avoir de l’accélération 3D si utilisée dans les navigateurs et les effets de KDE.

  • # Timing

    Posté par  . Évalué à -2.

    C'est presque dommage que ceci arrive en même temps que les matériels comme Rpi ou autre micro ordinateurs, peu chers, qui permettent d'avoir plusieurs ordinateurs sans avoir à partager un ordinateur.

    Sinon à part ça, je trouve ce qui est fait vraiment classe. :-)

    • [^] # Re: Timing

      Posté par  . Évalué à 4.

      La puissance disponible n'est pas du tout la même avec un RPi. Au mieux tu peux faire un bureau a distance avec un RPi pour te rapprocher de ce type de solution mais c'est tout. Donc suivant le cas d'usage une solution multiposte est tout a fait adapté.

      • [^] # Re: Timing

        Posté par  . Évalué à 1.

        Bien sûr, mais je pensais plutôt à l'avenir des Rpi et autres micro ordinateurs. Tôt ou tard ils auront largement de quoi faire tourner de manière fluide un navigateur, avec un processeur à 3€. Du coup à moins de faire tourner des jeux avec une carte graphique puissante (ce qui restera une niche), le simple multi-utilisateurs avec écran + clavier + souris sur l'ordinateur pour naviguer sur le web me semble peu intéressant. Qui sait, nous pouvons penser faire ceci aussi avec un Rpi… :)

        • [^] # Re: Timing

          Posté par  (site web personnel, Mastodon) . Évalué à 3.

          On ne peut pas déjà faire tourner un client léger sur un Rpi et utiliser la machine puissante comme serveur XDMCP ?
          Si la machine est vraiment puissante, on peut, du coup, mettre quelques Pi sur le même réseau et refaire les bonnes vieilles classes de TP qu'on connaissait dans les 90's :D

          • [^] # Re: Timing

            Posté par  . Évalué à 3.

            On ne peut pas déjà faire tourner un client léger sur un Rpi et utiliser la machine puissante comme serveur XDMCP ?

            Tu as des accès corrects au(x) GPU(s), en X remote?

            • [^] # Re: Timing

              Posté par  (site web personnel, Mastodon) . Évalué à 1.

              Ben, non, tu n'as que l'accès au GPU local à ton client léger.

              Pour faire une bécane dédiée au surf, c'est largement suffisant.
              Clairement pour jouer, il faut un accès direct, ne serait-ce que pour une histoire de latence réseau.

              • [^] # Re: Timing

                Posté par  . Évalué à 3.

                Bien sûr, mais je pensais plutôt à l'avenir des Rpi et autres micro ordinateurs. Tôt ou tard ils auront largement de quoi faire tourner de manière fluide un navigateur, avec un processeur à 3€.

                On ne peut pas déjà faire tourner un client léger sur un Rpi et utiliser la machine puissante comme serveur XDMCP ?

                Pour faire une bécane dédiée au surf, c'est largement suffisant.

                J'ai l’impression que vous ne vous rendez pas compte de la performance de ces petites machines qui n'ont pas grand chose à envier à des dual core de dix ans ou à des APU basse consommation comme les Atom ou les Kabini.
                La limitation de puissance pour des logiciels très gourmands existe mais avec un Raspberry Pi 2 ou 3 on peut déjà faire beaucoup de choses, même du jeu en réseau ou de l'émulation donc peu de soucis de fluidité pour de la bureautique ou du surf si on fait gaffe à l'occupation en RAM.

                Le soucis majeur de ce matériel réside dans son support de stockage système uniquement en microSD dont l'usure est bien plus importante qu'avec un SSD. En plus pour éviter les latences, il faut prendre une carte SD rapide (donc encore plus chère que les basiques) et faire attention au gros problème de contrefaçon de ce marché.
                Cette usure peut toutefois se limiter en ne laissant que l'essentiel pour le boot et en déportant le reste sur USB (ou SATA sur certaines cartes ARM) et le reste sur un serveur mais là aussi il y a augmentation de la latence.

                • [^] # Re: Timing

                  Posté par  (site web personnel, Mastodon) . Évalué à 2.

                  J'ai l’impression que vous ne vous rendez pas compte de la performance de ces petites machines qui n'ont pas grand chose à envier à des dual core de dix ans ou à des APU basse consommation comme les Atom ou les Kabini.
                  La limitation de puissance pour des logiciels très gourmands existe mais avec un Raspberry Pi 2 ou 3 on peut déjà faire beaucoup de choses, même du jeu en réseau ou de l'émulation donc peu de soucis de fluidité pour de la bureautique ou du surf si on fait gaffe à l'occupation en RAM.

                  On parle de faire un client léger. Sur du X en remote, c'est le serveur qui mouline les applis pas le client. Du coup, la puissance dont on a besoin côté client est vite contrecarrée par les latences réseau.
                  Si le réseau permettait un débit supérieur aux capacités du CPU, on est d'accord qu'il faudrait de la puissance mais là, on ne parle pas de ça.
                  En X Remote avec les machines actuelles, c'est le réseau qui est le goulet d'étranglement pas la puissance du CPU. On faisait déjà tourner des clients X sur des bécanes à peine plus puissantes qu'un grille-pain d'aujourd'hui.

                  Le soucis majeur de ce matériel réside dans son support de stockage système uniquement en microSD dont l'usure est bien plus importante qu'avec un SSD. En plus pour éviter les latences, il faut prendre une carte SD rapide (donc encore plus chère que les basiques) et faire attention au gros problème de contrefaçon de ce marché.
                  Cette usure peut toutefois se limiter en ne laissant que l'essentiel pour le boot et en déportant le reste sur USB (ou SATA sur certaines cartes ARM) et le reste sur un serveur mais là aussi il y a augmentation de la latence.

                  Encore hors sujet, on parle d'un client X qui n'a, donc par définition, qu'un besoin très limité de stockage. En gros, de quoi avoir un boot PXE.
                  Du coup, une microSD suffit largement

                  • [^] # Re: Timing

                    Posté par  . Évalué à 3. Dernière modification le 06 juillet 2017 à 13:10.

                    On parle de faire un client léger. Sur du X en remote, […] Encore hors sujet,

                    Justement non je répond aussi à karchnu, le sujet c'est utiliser plusieurs RPi au lieu de faire du multiseat. Avec la puissance de ces machines ça sert à rien de faire du VNC à part dans certains cas très gourmands en ressources et la navigation internet ne fait pas partie de ces cas.

            • [^] # Re: Timing

              Posté par  . Évalué à 5.

              • [^] # Re: Timing

                Posté par  . Évalué à 2.

                Merci pour le pointeur, ça devient intéressant en effet ce genre de solution !

          • [^] # Re: Timing

            Posté par  (site web personnel) . Évalué à 2.

            et refaire les bonnes vieilles classes de TP qu'on connaissait dans les 90's

            Au CNAM Paris c’était encore comme ça en 2008 avec le choix entre un bureau déporté Windows ou Linux (mais à La Plaine c’était que des desktop Windows partout :-/).

            ce commentaire est sous licence cc by 4 et précédentes

  • # Déjà fait !

    Posté par  . Évalué à 6.

    Je tourne avec une telle configuration depuis quelques années maintenant. J'ai testé avec 1 ou 2 cartes graphique. La deuxième solution est de loin la plus facile a mettre en place.
    J'en avais fait des tutos aussi :
    https://wiki.debian-fr.xyz/Multiposte_avec_une_carte_graphique
    https://wiki.debian-fr.xyz/Multiposte_avec_plusieurs_cartes_graphiques

    Mon approche semble un peu différente de la tienne mais dans les grandes lignes on se retrouve. Je traite aussi un peu plus que ton billet avec le partage du son et des prises USB. Ma solution n'est pas parfaite mais me suffit pour l'instant.

    Pour ce qui est de ton PS je ne suis pas d'accord. Tout dépend de l'utilisation du PC par les utilisateurs, mais il faut voir qu'en utilisation bureautique/web/lecteur video le PC se tourne les pouces 90% du temps. Donc la répartition sur plusieurs disque ou du multi-cœur n'est pas indispensable. À l'époque du Flash en effet là c'était galère, mais actuellement ça passe plutôt bien même avec un PC un peu ancien.

    • [^] # Re: Déjà fait !

      Posté par  (site web personnel) . Évalué à 1.

      Effectivement, je n'avais pas testé pour le problème des clés USB, mais allouer un concentrateur à chaque siège est probablement la meilleure solution.
      Pour clarifier, mon P.S. propose des améliorations plutôt que des éléments nécessaires. Mais je recommanderais vivement d'avoir plus de 2Gio de RAM par utilisateur, sinon on est extrêmement limité.
      À moins de 2Gio, autant prendre des PC dans la déchetterie plutôt que de se prendre la tête à faire du multiseat :)

      • [^] # Re: Déjà fait !

        Posté par  (site web personnel) . Évalué à 6.

        À moins de 2Gio, autant prendre des PC dans la déchetterie plutôt que de se prendre la tête à faire du multiseat :)

        Oui si on exclu les problématiques de consommation d'électricité, de vélocité des disques, et du risque de panne. ;-)

        kentoc'h mervel eget bezan saotred

        • [^] # Re: Déjà fait !

          Posté par  . Évalué à 3.

          Pour le disque, un petit SSD branché en SATA 2 et le tour est joué.

          Pour l'électricité, ça dépend du nombre de postes et de leur fréquence d'utilisation. En France, le prix de l'abonnement de base au réseau minimise les gains apportés par l'achat d'une solution moins énergivore.
          Sans aller jusque la déchetterie, acheter d'occasion un portable avec un écran ou un clavier cassé pour une utilisation en poste fixe permet déjà de diminuer la facture.
          Sans compter que d'un point de vue du bien commun la consommation énergétique est un faux problème puisque les déchets informatiques ne sont que très peu recyclables et les sources de matières premières sont en grande voie de tarissement.

    • [^] # Re: Déjà fait !

      Posté par  (site web personnel) . Évalué à 4.

      Tu arrives à avoir des performances en jeu qui sont acceptable avec une seule carte graphique ?

      Ma seule raison de monter un multi-poste à la maison c'est quand je veux jouer à deux. Au départ j'ai essayé de bricoler une solution avec un seul serveur X, du multi pointer et en lançant deux instances du jeu dans la même session, cela marche très bien pour les claviers, mais les souris sont inversées de temps à autre, les fenêtres s'inversent les focus et ainsi de suite.

      J'aimerais vraiment pouvoir affecter un clavier / souris au focus d'une application seulement.

      • [^] # Re: Déjà fait !

        Posté par  . Évalué à 2.

        Alors pour faire ça j'utilisais 1 seul serveur X mais avec 2 Xephir. Ça me donnais 2 sessions totalement indépendante. Par contre coté perf c'était du strictement basique, pas d'accélération 3D, du moins quand je l'avais monté maintenant ça a peut être changé. Le soucis avec cette solution c'est quand le serveur X a un soucis les 2 sessions sont HS.

        Pour faire du jeux il vaut clairement mieux avoir 2 CG.

    • [^] # Re: Déjà fait !

      Posté par  . Évalué à 3.

      Juste une remarque puisque tu parles du son et de la nécessité de passer pulseaudio en démon système. Vu que tu utilises des cartes vidéos HDMI (vraisemblablement avec son intégré), il devrait être possible de configurer pulseaudio pour n’utiliser que l’une d’entre elles pour chacun, non ?

      Je saurais le faire en fonction de l’utilisateur connecté (via le fichier default.pa), mais pas à partir du seat. As-tu fait des essais là-dessus et ça ne marche pas, ou as-tu simplement complètement occulté parce que tu voulais utiliser les sorties analogiques ?

      Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0

      • [^] # Re: Déjà fait !

        Posté par  . Évalué à 2.

        Je voulais même aller plus loin. Les cartes son ont en général des voix arrière en plus de celle de devant (si ce n'est plus) et du coup je voulais avoir les voix avant pour un poste et arrière pour l'autre. Mais je n'ai pas réussi le moment voulu et après comme les postes sont l'un à coté de l'autre ça ne dérangeait pas d'avoir les 2 sorties sur les mêmes enceintes.
        Sinon avec le HDMI le son des écrans était pas terrible, c'est pour cela que je n'ai pas essayé. Mais il doit être facile d'affecter chaque «carte HDMI» à chaque poste, un peu comme les ports USB en fait.
        Si tu as des compétence dans la configuration de PulseAudio je suis preneur sur ce point.

        • [^] # Re: Déjà fait !

          Posté par  . Évalué à 3.

          Vu que pulseaudio a un accès exclusif à la carte son, je pense que tu ne peux pas partager les deux voies d’une même carte son entre deux instances de pulseaudio. Par contre, affecter des sorties, ça c’est assez simple. Je pense que dans le cas d’un démon système le fichier à modifier est le /etc/pulse/default.pa. Sinon c’est dans ~/.config/pulse/default.pa.

          La première chose à faire est de récupérer la liste des périphériques alsa :

          $ cat /proc/asound/cards
          0 [Intel          ]: HDA-Intel - HDA Intel
                            HDA Intel at 0xfe9fc000 irq 27
          1 [HDMI           ]: HDA-Intel - HDA ATI HDMI
                            HDA ATI HDMI at 0xfeafc000 irq 28
          

          Et récupérer le nom entre crochet (ici, Intel ou HDMI).

          Ensuite, dans le fichier default.pa, commenter la ligne :

          #load-module module-udev-detect
          

          Pour désactiver la détection automatique des périphériques.

          Rajouter ensuite la ligne suivante :

          load-module module-alsa-sink sink_name=hwcard device=hw:Intel channels=6 channel_map=aux0,aux1,aux2,aux3,aux4,aux5
          

          Pour déclarer la carte son à pulseaudio. Je renomme les canaux vers les canaux auxilaires pour éviter tout problème / confusion par la suite. Théoriquement, ça ne devrait pas être nécessaire, mais j’ai eu des soucis sans, et ça simplifie grandement l’analyse en cas de problème.

          Ensuite, tu déclares deux sink « virtuels » :

          load-module module-remap-sink sink_name=Seat0 master=hwcard channel_map=front-left,front-right master_channel_map=aux0,aux1  remix=no
          load-module module-remap-sink sink_name=Seat1 master=hwcard channel_map=front-left,front-right master_channel_map=aux2,aux3  remix=no
          

          Et tu définis celui par défaut :

          set-default-sink Seat0
          

          (cette partie-là pouvant se faire dans le script d’initialisation de session)

          $seat=`get_seat_number???`
          pacmd set-default-sink Seat$seat
          

          Ça devrait fonctionner, par contre, il n’y a pas de droits et d’isolation : l’utilisateur du Seat1 peut très bien envoyer du son à celui du Seat0, simplement en changeant sa sortie pulseaudio. Et je ne suis pas sûr que le default-sink soit propre à l’utilisateur (à vérifier, j’ai peur que ça change la configuration pour tout le monde).

          Globalement on peut faire plein de choses amusantes avec le module remap de pulseaudio, en combo avec le module combine, qui permet de fusionner plusieurs cartes sons pour en faire une multicanale. À titre personnel, je pilote mon multiroom avec (enceintes reliées en filaire à un ampli multicanal), ça fonctionne bien. La doc officielle de pulseaudio n’est pas forcément très intuitive, mais à peu près tout y est. Je crois que le reste des infos, je l’avais trouvé sur un tuto arch.

          Cela dit, le plus simple, puisque tu fais déjà de l’isolation sur l’usb, est peut-être de passer par des cartes sons usb. Là ça devrait marcher out-of-the-box, chacun ne voyant que la sienne.

          Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0

          • [^] # Re: Déjà fait !

            Posté par  . Évalué à 2.

            Ok merci des indications je vais voir ce que ça donne.

    • [^] # Re: Déjà fait !

      Posté par  (site web personnel) . Évalué à 3.

      Super retour d'expérience :)

      Idem, déjà en place depuis plusieurs années avec 3 places (http://www.monbook.tech/realisations_multiseat.html) :
      - Gigabyte GeForce GTX 750 Ti + driver proprio
      - Asus GeForce GT 610 + driver proprio
      - Intel HD Graphics 4600 (intégrée à la carte mère) + driver libre

      2 sessions tournent avec cinnamon et la 3e avec mate.

      Aucun soucis pour l'accélération graphique avec les drivers proprio, ni pour le partage de ressources entre les utilisateurs : il faut en effet beaucoup de ram, et pour la CPU, je n'ai pas beaucoup de ralentissement, même lorsque je joue :)

      Maintenant que ça se configure facilement, faut en profiter ! Lorsque j'ai commencé, il fallait recompiler X pour avoir les options -sharevt -novtswitch, faire des scripts init pour lancer dans l'ordre les sessions, activer la bonne carte graphique dans le bios pour que cela fonctionne etc…

  • # Marrant !

    Posté par  . Évalué à 3.

    Hehe ! Mais c'est que je trouve ça bien marrant comme config!

    Ca me donne bien envie d'essayer ! Comme dis plus haut, on peut trouver des machines d'appoint à pas cher pour avoir deux PC physiques mais c'est quand même moins original!

    Je pensais déjà à ça quand j'ai découvert Linux en 96/97 et qu'on me parlait de système multiutilisateur, je trouvais ça dingue!

    Je pense même que je vais me faire une installation multiseat & multiscreen, juste pour le fun !
    J'ai un vieux mais honorable Core2Quad 4Go avec une carte intégrée intel double sortie, et je dois pouvoir récupérer une vieille carte nvidia quadro a rajouter. Des claviers et des souris, j'en ai à la pelle :)

    • [^] # Re: Marrant !

      Posté par  . Évalué à 2.

      Fait attention aux mix de drivers (Intel / nVidia), ça peux être mal supporté.

  • # Commentaires

    Posté par  . Évalué à 6.

    J'ai monté le même genre de système pour pouvoir jouer à deux sur l'ordi (matériel de qualité, gros CPU, plein de RAM, économie d'échelle, etc.).

    Je ne me souviens pas avoir eu de problème pour avoir le login sur les deux écrans avec GDM. En revanche j'ai eu des soucis avec les sessions X/Wayland il me semble et j'ai dû modifier la configuration pour que GDM se lance sous X plutôt que Wayland.

    Au niveau des cartes graphiques pour simplifier dans mon cas j'ai pris deux AMD RX 480 (mais je m'étais fait la main sur RX 480 + iGPU avant pour m'assurer que ça fonctionnait). Dans l'ensemble ça marche plutôt bien mais quand on est à deux il arrive parfois que l'une des sessions gèle avec de la bouillie à l'écran. L'autre continue comme si de rien n'était mais il n'y a pas moyen de rétablir la session sans un reboot brutal. Ça n'arrive jamais quand une seule session est lancée.

    Pour le son j'ai juste acheté une carte son USB à quelques € que j'ai assignée à un siège. Ça fonctionne à la perfection.

    Sinon, un petit point agaçant, je n'ai pas réussi à ce que lorsqu'on branche un disque externe USB, celui-ci soit assigné exclusivement à l'utilisateur auquel appartient le port USB. Là j'ai un popup pour le montage qui s'affiche sur toutes les sessions.

    • [^] # Re: Commentaires

      Posté par  . Évalué à 4.

      De la même manière que tu as fait pour le son, prend un hub USB, affecte une prise USB a ce siège et tu ne devrais plus avoir de soucis.

      • [^] # Re: Commentaires

        Posté par  . Évalué à 2.

        Je ne pense pas que ce soit le problème. Le port USB est bien assigné au siège adéquat. Si j'y branche un clavier par exemple ça fonctionne comme attendu. J'ai l'impression que c'est que lorsque gnome détecte qu'un nouveau disque a été branché, il propose à tous les utilisateurs de le monter. Je ne sais pas si c'est le comportement attendu en théorie, mais c'est inattendu pour moi en tout cas.

  • # Dongles USB

    Posté par  . Évalué à 3.

    Je ne sais pas de quels dongles tu parles exactement, mais la grande mode semble être aux docking stations USB-C (exemple) qui sont, d'après les datasheets, capables d'afficher du 4K via HDMI/DP, bien que la seule connexion entre le PC et la docking station soit le cable USB.

    Après, je présume que ceci utilise la carte graphique du PC, la question subsidiaire était alors "est-il possible d'utiliser une carte graphique dual-head pour deux sièges distincts ?".

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.