Ubuntu 14.04 e tocando músicas do cron

4

Eu recentemente atualizei meu computador para o Ubuntu 14.04.

Após a atualização, o sistema não reproduz mais algumas músicas que eu reproduzi via crontab.

As linhas crontab são assim:

0 9   *   *   1-5       /usr/bin/mpg123 -q /home/user/Music/song.mp3

Não recebo nenhum erro do cron ao executar o comando. Se eu executar o comando manualmente via SSH, a música será reproduzida com sucesso.

Anexei o comando em crontab com 'env' para obter uma melhor compreensão do ambiente sob o qual o cron executa o trabalho:

0 9   *   *   1-5       env; /usr/bin/mpg123 /home/user/Music/song.mp3

Isso gerou a seguinte saída:

HOME=/home/user
LOGNAME=user
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/user
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.16.0; written and copyright by Michael Hipp and others
    free software (LGPL) without any warranty but with best wishes

Directory: /home/user/Music/
Playing MPEG stream 1 of 1: song.mp3 ...

MPEG 1.0 layer III, 320 kbit/s, 44100 Hz stereo
Comment:  00000000 00000210 00000AA0 000000000058C5D0 00000000 00506FD7 00000000 00000000 00000000 00000000 00000000 00000000

[2:11] Decoding of song.mp3 finished

Para tornar o shell interativo da minha conexão ssh mais parecido com o cron no qual estou executando, eu anoto tudo menos o ambiente especificado:

for a in 'env | awk -F= '{ print  }' | grep -v "HOME\|LOGNAME\|PATH\|LANG\|SHELL\|PWD" | xargs'; do unset $a; done

Depois disso, a cópia copy + paste do crontab não produz mais nenhum som. O programa parece reproduzir o arquivo no entanto:

$ /usr/bin/mpg123 /home/user/Music/song.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
        version 1.16.0; written and copyright by Michael Hipp and others
        free software (LGPL) without any warranty but with best wishes

Directory: /home/user/Music/
Playing MPEG stream 1 of 1: song.mp3 ...

MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo

[2:51] Decoding of song.mp3 finished.

Levando-me a acreditar que o som é enviado para o dispositivo errado.

Mudar para reproduzir o seguinte não produz som:

$ aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Mas especificando que este dispositivo é reproduzido por HDMI como pretendido:

$ aplay -D plughw:CARD=NVidia,DEV=3 /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Como posso definir esse dispositivo como o padrão do sistema? (O que parece ser sempre que eu tenho um ambiente mais rico.)

Como alternativa, como posso forçar o mgp123 a usar o dispositivo correto? O dispositivo ALSA plughw: CARD = NVidia, DEV = 3 está correlacionado a um dispositivo em / dev?

O mpg123 permite que você especifique um dispositivo em particular como este:

   -a dev, --audiodevice dev
          Specify the audio device to use.  The default is system-dependent (usually /dev/audio or /dev/dsp).  Use this option if  you  have  multiple  audio
          devices and the default is not what you want.

Os dispositivos plughw em alsa:

$ aplay -L | grep plughw -A2
plughw:CARD=NVidia,DEV=0
    HDA NVidia, ALC889A Analog
    Hardware device with all software conversions
plughw:CARD=NVidia,DEV=1
    HDA NVidia, ALC889A Digital
    Hardware device with all software conversions
plughw:CARD=NVidia,DEV=3
    HDA NVidia, HDMI 0
    Hardware device with all software conversions

Parece combinar com os pcmC0D? p-devices em / dev / snd:

$ ls /dev/snd/ | egrep [013]p
pcmC0D0p
pcmC0D1p
pcmC0D3p

Mas usá-lo não parece ajudar o mpg123:

$ /usr/bin/mpg123 -q -a /dev/snd/pcmC0D3p /home/user/Music/song.mp3
[oss.c:129] error: Can't reset audio!
[mpg123.c:690] error: ...in decoding next frame: Unable to set up output format! (code 1)

Eu realmente não entendo o que a ALSA e / ou o PulseAudio são em relação a isso.

Nem parece funcionar no ambiente limitado:

$ pactl list cards
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
$ alsamixer
Error opening terminal: unknown.

Ambos os comandos funcionam com o conjunto de variáveis de ambiente "normal".

Eu baixei e executei alsa-info.sh, primeiro com ambiente "normal":

link

Quando tentei executá-lo com a maioria das variáveis de ambiente não configurada, recebi um erro.

Após a configuração:

export TERM=xterm

Eu recebi o script novamente. Resultado aqui:

link

EDITAR:

Uma investigação mais aprofundada da desativação da variável de ambiente mostra que eu só tenho que desarmar XDG_RUNTIME_DIR para interromper a reprodução.

$ unset XDG_RUNTIME_DIR

EDIT2:

Se eu abandonar o mgp123 para o cvlc, recebo som ao jogar via crontab da seguinte forma:

 0 9  *   *    1-5      /usr/bin/cvlc -q --alsa-audio-device="hw:0,3" --play-and-exit /home/user/Music/song.mp3 2> /dev/null
    
por azzid 29.09.2014 / 13:02

2 respostas

1

Em Conforme você usa a conexão ssh, tente adicionar seu usuário ao grupo "áudio":
sudo usermod -aG audio username
reinicie e teste que alsamixer está ok, então você pode configurar volumes: Provavelmente você tem que pressionar F6 para selecionar o terceiro dispositivo.

Então, no meu caso, eu posso ler o som conectado pelo ssh em um pc remoto sem o servidor X usando:

  • cvlc (que vem com o pacote vlc-nox):
    cvlc --alsa-audio-device="hw:0,3" /usr/share/sounds/alsa/Front_Center.wav
    Se não estiver ok, altere hw: 0,3 para hw: 0,0 ou hw: 0,1
    No meu caso, funciona também via crontab.
  • mpg123: isso também funciona via ssh:
    mpg123 -a hw:0,3 Musique/test.mp3

Note que no meu caso, o pulseaudio é desabilitado no pc remoto (não tenho certeza se a desabilitação é útil, pois pulseaudio é iniciado através da sessão X e lightdm). Para verificar se o pulseaudio está desligado e não reaparecendo automaticamente, execute várias vezes killall -9 pulseaudio

    
por laugeo 30.09.2014 / 15:21
5

Então, basta definir a variável de ambiente XDG_RUNTIME_DIR da mesma forma que em meus shells de trabalho e isso funciona. Eu encontrei esta página porque eu tive este mesmo problema com a tentativa de obter som para jogar a partir de tarefas cron - mpg123 parecendo pensar que reproduz o arquivo bem, mas sem áudio. Definindo essa variável fixa.

    
por Jaggz 06.02.2015 / 15:15