Lança uma sessão X falsa / mínima para o Pulseaudio / dbus

10

Eu uso o Pulseaudio para compartilhar áudio entre um desktop e um Raspberry Pi.

No entanto, o Pulseaudio precisa de dbus e o dbus precisa de uma sessão X. Sem sessão gráfica, o Pulseaudio só é capaz de rodar no modo de sistema, que não é oficialmente recomendado.

Além de um Raspberry Pi, o custo de uma sessão X é drasticamente alto, então eu gostaria de me livrar dele da maneira mais eficiente (menos dispendiosa).

Como posso iniciar a menor sessão X para o Pulseaudio entrar em ação?

    
por kursus 20.12.2013 / 01:12

3 respostas

11

Você pode usar o Xvfb , que é um servidor X com um framebuffer virtual, ou seja, um servidor X que é exibido apenas na memória e não se conecta a nenhum hardware. Você não precisa executar nenhum cliente que não queira nesse servidor e, em particular, nenhum ambiente de desktop ou gerenciador de janelas.

Xvfb :1 -screen 0 1x1x8 &

Depois disso:

DISPLAY=:1 dbus-launch
DISPLAY=:1 pulseaudio --start

Você precisa aguardar um pouco depois de iniciar Xvfb para que a exibição esteja disponível. Você pode usar xinit para iniciar um servidor X e depois iniciar os clientes quando estiver pronto. Coloque os comandos que você deseja executar em um script (observe que quando o script sair, o servidor X será encerrado):

#!/bin/sh
dbus-launch
pulseaudio --start
sleep 99999999

Inicie o servidor X virtual com

xinit /path/to/client.script -- /usr/bin/Xvfb :1 -screen 0 1x1x8

Se você quiser executá-lo no momento da inicialização, você pode iniciá-lo a partir do cron. Execute crontab -e (como seu usuário, não como root) e adicione a linha

@reboot xinit /path/to/client.script -- Xvfb :1 -screen 0 1x1x8

Se você quiser matar esta sessão, mate o processo xinit .

    
por 20.12.2013 / 01:28
0

Existe uma maneira mais elegante de evitar que o script atinja EOF do que usar sleep 99999999 !

Use sleep infinity . Faz o que diz ...

    
por 21.11.2016 / 13:29
0

Eu tive o mesmo problema ontem, usando pulso de áudio para raspberrypi 0 W com DBus em um ambiente sem cabeça criar com yocto sem x11 e sem systemd, você precisa executar e exportar dbus antes de executar pulseaudio.

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
     echo "Starting dbus" 
     export $(dbus-launch)
fi

Em etc / pulse / client.conf, por favor habilite allow-autospawn-for-root = yes

Execute pulseaudio -v para verificar se há outro problema na sua configuração. Não use o interruptor --system porque não está correto.

pulseaudio -D --disallow-exit
    
por 05.04.2018 / 10:53