Di recente ho aggiornato il mio computer a Ubuntu 14.04.
Dopo l'aggiornamento il sistema non riproduce più i pochi brani che avevo riprodotto tramite crontab.
Le linee crontab sembrano così:
0 9 * * 1-5 /usr/bin/mpg123 -q //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3
Non ricevo errori da cron durante l'esecuzione del comando. Se eseguo il comando manualmente tramite SSH, il brano viene riprodotto correttamente.
Ho anteposto il comando in crontab con 'env' per avere una migliore comprensione dell'ambiente in cui cron esegue il lavoro:
0 9 * * 1-5 env; /usr/bin/mpg123 //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3
Ciò ha generato il seguente output:
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
Per rendere la shell interattiva della mia connessione ssh più simile a quella in cui è in esecuzione cron, ho disattivato tutto tranne l'ambiente specificato:
for a in `env | awk -F= '{ print $1 }' | grep -v "HOME\|LOGNAME\|PATH\|LANG\|SHELL\|PWD" | xargs`; do unset $a; done
E dopo quella modifica copia+incolla da crontab non produce più alcun suono. Tuttavia, il programma sembra riprodurre il file:
$ /usr/bin/mpg123 //eadn-wc01-5196795.nxedge.io/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.
Questo mi porta a credere che il suono sia appena emesso sul dispositivo sbagliato.
Passare a una riproduzione quanto segue non produce alcun suono:
$ 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
Ma specificando questo dispositivo viene riprodotto tramite HDMI come previsto:
$ 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
Come posso impostare quel dispositivo come predefinito di sistema?
(cosa che sembra essere ogni volta che ho un ambiente più ricco.)
In alternativa, come posso forzare mgp123 a utilizzare il dispositivo corretto?
Il dispositivo ALSA è plughw:CARD=NVidia,DEV=3 correlato a un dispositivo in /dev?
mpg123 ti consentirà di specificare un dispositivo particolare in questo modo:
-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.
I dispositivi plughw in 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
Sembrano corrispondere ai dispositivi pcmC0D?p in /dev/snd:
$ ls /dev/snd/ | egrep [013]p
pcmC0D0p
pcmC0D1p
pcmC0D3p
Ma usarlo non sembra aiutare mpg123:
$ /usr/bin/mpg123 -q -a /dev/snd/pcmC0D3p //eadn-wc01-5196795.nxedge.io/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)
Non capisco davvero cosa siano ALSA e/o PulseAudio rispetto a questo.
Correlati:come mostrare sempre (o nascondere automaticamente) le voci di menu in Unity?Nessuno dei due sembra funzionare nell'ambiente limitato:
$ pactl list cards
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
$ alsamixer
Error opening terminal: unknown.
Entrambi i comandi funzionano con variabili di ambiente "normali".
Ho scaricato ed eseguito alsa-info.sh, prima con l'ambiente "normale":
http://www.alsa-project.org/db/?f=e2be8ceb9ef289ff9ef95557396dd82b88f337e0
Quando ho provato a eseguirlo con la maggior parte delle variabili di ambiente non impostate, ho ricevuto un errore.
Dopo aver impostato:
export TERM=xterm
Ho riavviato lo script. Risultato qui:
http://www.alsa-project.org/db/?f=67fdd80bd55c76cd6dd30c981bf02fe66ba3d9d6
MODIFICA:
Ulteriori indagini sull'annullamento dell'impostazione delle variabili di ambiente mostrano che devo solo annullare l'impostazione di XDG_RUNTIME_DIR per interrompere la riproduzione.
$ unset XDG_RUNTIME_DIR
EDIT2:
Se abbandono mgp123 per cvlc ottengo l'audio durante la riproduzione tramite crontab in questo modo:
0 9 * * 1-5 /usr/bin/cvlc -q --alsa-audio-device="hw:0,3" --play-and-exit //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3 2> /dev/null
Risposta accettata:
In Mentre usi la connessione ssh , prova ad aggiungere il tuo utente nel gruppo "audio":sudo usermod -aG audio username
riavvia e verifica che alsamixer sia ok, quindi puoi impostare i volumi:Probabilmente devi premere F6 per selezionare il 3° dispositivo.
Quindi, nel mio caso, posso leggere l'audio connesso tramite ssh su un PC remoto senza server X usando:
- cvlc (che viene fornito con il pacchetto vlc-nox):
cvlc --alsa-audio-device="hw:0,3" /usr/share/sounds/alsa/Front_Center.wav
Se non va bene cambia hw:0,3 in hw:0,0 o hw:0,1
Nel mio caso funziona anche tramite crontab. - mpg123:funziona anche lanciato tramite ssh:
mpg123 -a hw:0,3 Musique/test.mp3
Si noti che nel mio caso, pulseaudio è disabilitato sul PC remoto (non sono sicuro che la disabilitazione sia utile poiché pulseaudio viene avviato tramite la sessione X e lightdm). Per verificare che pulseaudio sia disattivato e non si respawn automaticamente, esegui più volte killall -9 pulseaudio