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

    Posté par . En réponse à la dépêche Multiseat avec des pilotes libres, non libres et systemd. É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