URL: https://linuxfr.org/news/multiseat-avec-des-pilotes-libres-non-libres-et-systemd Title: Multiseat avec des pilotes libres, non libres et systemd Authors: jean_r Benoît Sibaud, bubar🦥, Xavier Teyssier, Davy Defaud, ZeroHeure, Pierre Jarillon et palm123 Date: 2017年07月03日T12:06:00+02:00 License: CC By-SA Tags: multiseat, nvidia, systemd, xfce, debian et fedora Score: 51 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. ---- ---- 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](https://github.com/NVIDIA/libglvnd) 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](https://fr.wikipedia.org/wiki/RAID_(informatique) "Redundant Array of Independent Disks — regroupement redondant de disques indépendants") 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.

AltStyle によって変換されたページ (->オリジナル) /