Come configuro l'audio con PulseAudio e Multiseat?


12

Nello spirito di una completa divulgazione, ho appena pubblicato questa domanda nei forum di Ubuntu, ma immagino che più teste che ci lavorano non potrebbero far male.

Ho una configurazione multi-posto che funziona abbastanza bene. I dispositivi di input hot plug funzionano come previsto e simili. L'unico problema che non sono ancora in grado di risolvere è ottenere l'audio per ogni posto.

Ecco un riepilogo dei miei tentativi di far funzionare l'audio:

  1. Crea ~ / .pulse / default.pa configurato dinamicamente in base a quale $ DISPLAY l'utente accede.

  2. Carica pulseaudio come istanza a livello di sistema.

    • Impossibile farlo funzionare. Nessuno dell'hardware audio era accessibile agli utenti.
  3. Usa le regole udev per contrassegnare i posti in ConsoleKit. Seguendo le linee guida udev qui: http://www.freedesktop.org/wiki/Software/systemd/multiseat

    • Non pensavo che avrebbe funzionato, anche se era "garantito" che funzionasse da qualcuno in irc.freenode #pulseaudio

Nessuno di questi tentativi ha avuto successo, motivo per cui ora mi rivolgo alla comunità per chiedere aiuto. È del tutto possibile che i metodi suggeriti funzionino e ho appena rovinato qualche aspetto, idk. Questo è l'ultimo pezzo del puzzle che è necessario prima che io possa andare e aggiornare la pagina MultiseatX per includere le istruzioni per Ubuntu 12.04.

Comprensione della situazione: l'accesso a pulseaudio è limitato alla sessione attiva, come indicato da ConsoleKit (qualcosa su un ACL). CK può solo contrassegnare una sessione come attiva alla volta. Questo semplice fatto della vita mi porta a credere che la soluzione dovrebbe comportare l'esecuzione di pulseaudio come istanza a livello di sistema. Ogni utente dovrebbe connettersi al server degli impulsi ed essere limitato a un sottoinsieme di tutto l'hardware. Forse ogni utente si connette al server di impulsi tramite localhost, idk. So che, indipendentemente dai miei tentativi e dai loro risultati falliti, sono sempre stato in grado di utilizzare sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavper riprodurre qualcosa su qualsiasi hardware.

Sto afferrando le cannucce e ora sono arrivato agli ultimi capelli che posso estrarre dalla mia testa. Per favore, aiutami a capire questo in modo che possiamo condividere la ricchezza. Eventuali ulteriori informazioni necessarie verranno fornite su richiesta.


Ho capito bene: sono 2 posti e 2 schede audio? Hai sostituito default.pa con i piccoli file personalizzati o hai aggiunto le righe personalizzate a default.pa altrimenti invariato?
Takkat,

Vorrei aver notato il commento qui ... Quindi sì, sono 2 schede audio. Uno è l'audio di bordo, l'altro è l'audio dall'HDMI nella GPU. I piccoli file personalizzati sono in ~ / .pulse ma /etc/pulse/default.pa non è toccato. Quindi, in quel caso, per quanto ho capito, ~ / .pulse / default.pa non sostituirà /etc/pulse/default.pa, ma piuttosto si fonderà con esso.
Anthony,

Prova con due file .pa personalizzati con il contenuto completo di default.pa in cui vengono aggiunte le diverse sezioni del dispositivo come nei due file esistenti (nel caso in cui non vengano unite).
Takkat,

Inoltre, il default.pa letto da pulseaudio eseguito in modalità a livello di sistema dovrebbe essere in /etc/pulse, non in HOME.
Takkat,

ce l'ho principalmente atm funzionante. Riferirò quando avrò risolto tutto.
Anthony,

Risposte:


7

Ho trascorso molte ore a cercare online, testare varie configurazioni e parlare con gli sviluppatori Pulseaudio. La linea di fondo di tutto ciò è che l'esecuzione di pulseaudio in modalità utente normale consentirà solo alla sessione attiva contrassegnata da ConsoleKit di accedere all'hardware audio. Poiché l'attuale ConsoleKit è in grado di contrassegnare una sessione come attiva alla volta, ciò significa che dobbiamo eseguire un'istanza di pulseaudio a livello di sistema. Il lato positivo: ogni posto può avere audio individuale. Il rovescio della medaglia: TUTTO l'hardware audio è disponibile per qualsiasi utente e può essere manipolato ALLA VOLTA. Questa non è una situazione ideale per un internet café o altri ambienti pubblici in cui la sicurezza è una vera preoccupazione. Tienilo a mente durante la creazione della politica di sicurezza del sito. Potrebbe essere prudente limitare l'esecuzione di pavucontrol ai soli amministratori.

Come sempre, fai un backup di tutti i tuoi file di configurazione predefiniti. Se hai armeggiato con le tue configurazioni senza eseguire il backup, puoi recuperare il pacchetto pulseaudio con apt-get -d install pulseaudio. Questo scaricherà solo il pacchetto (in / var / cache / archives / apt) ed è possibile estrarre il contenuto per recuperare le configurazioni predefinite. Tenere presente che client.conf non è incluso in questo file.

Per eseguire pulseaudio come demone a livello di sistema, abbiamo bisogno di modificare alcuni file.

1.) / etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.) /etc/pulse/daemon.conf - Vedi man pulse-daemon.conf per maggiori informazioni.

    daemonize = yes
    local-server-type = system

3.) /etc/pulse/client.conf

    autospawn = no

Dobbiamo anche aggiungere utenti al gruppo ad accesso ad impulsi.

sudo usermod -a -G pulse-access <username>

Ora che tutti gli utenti sono in grado di accedere all'hardware audio, dobbiamo selezionare l'hardware che ogni utente utilizzerà. Questo può essere fatto usando pavucontrol. Si noti che le impostazioni sono memorizzate PER UTENTE e non seguiranno il posto. Se gli utenti cambiano posto, dovrai selezionare nuovamente l'hardware audio desiderato.

Ulteriori commenti su Pulseaudio

Speravo che ci sarebbe stata una soluzione più elegante per far funzionare l'audio per posto. L'uso di un Pulseaudio a livello di sistema in multiseat presenta numerosi inconvenienti e non è del tutto stabile tra i riavvii. Avevo tentato di avviare un'istanza a livello di sistema e di avere istanze utente connesse ad esso come server tramite localhost. Questo non sembra funzionare da quando pulseaudio --start viene eseguito da daemon.conf.

Per quanto riguarda ConsolKit

Il problema che vediamo quando si esegue un normale pulseaudio per utente è che un posto ha accesso all'hardware e tutti gli altri hanno un output fittizio. Ciò è dovuto al fatto che ConsoleKit non è completamente a conoscenza del posto. CK considera tutti i nostri posti come sessioni del posto1 e può contrassegnare solo una sessione come attiva. Questo fatto può essere visto eseguendo getfacl / dev / snd / *. Mi è venuto in mente che potremmo essere in grado di modificare l'acl dei file / dev / snd / appropriati in base a quale $ DISPLAY utilizza un determinato utente. Questa è un'opzione che non ho esplorato. Si prega di considerare di contribuire alla causa multisede esplorando questa ipotesi e modificando il documento con i risultati.

Esistono filiali multiseat per ConsoleKit , GDM-2.3 e GDM-3.x che dovrebbero fornire funzionalità multiseat automatiche.

Note aggiuntive

1.) Sarebbe saggio anche impedire agli utenti di caricare i moduli DISALLOW_MODULE_LOADING = 1.

2.) autospawn = no non è del tutto necessario come visto nel mio file di esempio. Non causa problemi.


1
Anthony, grazie per il tuo post è stato utile! Ho riscontrato lo stesso problema e ho scoperto come ottenere il risultato desiderato senza eseguire Pulseaudio in modalità Sistema. Dai un'occhiata: unix.stackexchange.com/a/104344/34581 . Spero sia utile.
Ilia Rostovtsev,

1

Comprensione della situazione: l'accesso a pulseaudio è limitato alla sessione attiva, come indicato da ConsoleKit (qualcosa su un ACL). CK può contrassegnare una sola sessione come attiva alla volta.

C'è una patch per ConsoleKit per aggiungere il supporto multiseat; questo consentirà di segnalare tutti i posti attivi come attivi. Forse questo risolverà il tuo problema. Ha bisogno di collaborazione con il gestore del display e c'è una patch per le vecchie versioni di GDM che aggiunge questo supporto.

Ho fatto funzionare il multiseat in Natty (11.04) usando i pacchetti ConsoleKit e GDM modificati da un PPA . Non ho ancora effettuato l'aggiornamento da Natty - mi ci è voluto molto tempo per capire come farlo funzionare, e sono preoccupato che LightDM non funzioni con il ConsoleKit con patch.

EDIT: Devo notare che Fedora 17 ha alcune impressionanti funzionalità multiseat, alcune delle quali saranno in Quantal. Hanno una pagina wiki che descrive il loro approccio . Ubuntu non può semplicemente copiare l'approccio di Fedora perché richiederebbe cambiamenti significativi; Fedora usa systemd e GDM mentre Ubuntu utilizza upstart e LightDM.


Lol. Conosco i rami ConsoleKit multiseat e GDM. Noterai che mi sono collegato a loro nella pagina Ubuntu MultiseatX che sto aggiornando. In realtà, il ramo ck dipende dal ramo gdm. Sono gestiti dalla stessa persona di Oracle. Anche il PPA a cui hai fatto riferimento è qualcosa che ho conosciuto e non è per 12.04. Sto provando a farlo in un modo che non implica uscire dai repository standard. Per quanto riguarda Fedora e systemd ... l'approccio multiseat systemd NON funzionerà con il binario nvidia.
Anthony,

0

Di recente stavo cercando di risolvere il problema con PulseAudio e Multiseat. Visto che non esisteva una soluzione elegante, la mia soluzione era quella di utilizzare la rete.

Questa soluzione si adatta al mio scenario perché sono l'utente che più spesso si trova nella macchina e il mio posto è il più spesso connesso. E il mio posto è configurato per mancini e nessun altro lo usa.

Nel mio ~/.config/pulse/default.paho copiato la configurazione del sistema /etc/pulse/default.pae ho aggiunto la seguente riga:

load-module module-native-protocol-tcp auth-anonymous=1 auth-ip-acl=127.0.0.1

Nelle impostazioni pulseaudio di altri utenti, aggiungi un tunnel - o diversi, se è quello che ti serve - con qualcosa insieme:

load-module module-tunnel-sink server=127.0.0.1 sink=alsa_output.pci-0000_00_XX.X.iec958-stereo

Cambia il nome del lavandino in modo che corrisponda a quello nella tua macchina. Puoi decidere di configurare un nome più amichevole, il che significa che dovresti configurarlo nel tuo file di impostazioni pulseaudio, ma ho appena usato il nome dato guardandolo con pacmd list-sinks.

Non è una soluzione elegante, probabilmente proverò a utilizzare una configurazione di sistema come suggerito da @Anthony nel mio prossimo impianto di perforazione, ma se hai molte carte e vuoi solo condividere uno o pochi sink / source, questo è un più soluzione "chirurgica".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.