Recientemente actualicé mi computadora a Ubuntu 14.04.
Después de la actualización, el sistema ya no reproduce las pocas canciones que tenía a través de crontab.
Las líneas crontab se ven así:
0 9 * * 1-5 /usr/bin/mpg123 -q //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3
No recibo ningún error de cron al ejecutar el comando. Si ejecuto el comando manualmente a través de SSH, la canción se reproduce correctamente.
Preparé el comando en crontab con 'env' para obtener un mejor control del entorno bajo el cual cron ejecuta el trabajo:
0 9 * * 1-5 env; /usr/bin/mpg123 //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3
Esto generó el siguiente resultado:
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 hacer que el shell interactivo de mi conexión ssh se asemeje más al que ejecuta cron, deshabilito todas las variables del entorno excepto las especificadas:
for a in `env | awk -F= '{ print $1 }' | grep -v "HOME\|LOGNAME\|PATH\|LANG\|SHELL\|PWD" | xargs`; do unset $a; done
Y después de ese cambio, copiar y pegar desde crontab ya no produce ningún sonido. Sin embargo, el programa parece reproducir el archivo:
$ /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.
Haciéndome creer que el sonido se envía al dispositivo equivocado.
Cambiar a reproducir lo siguiente no produce ningún sonido:
$ 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
Pero especificar este dispositivo se reproduce a través de HDMI según lo 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
¿Cómo puedo configurar ese dispositivo como el predeterminado del sistema?
(Lo que parece ser cada vez que tengo un entorno más rico).
Alternativamente, ¿cómo puedo obligar a mgp123 a usar el dispositivo correcto?
¿El dispositivo ALSA plughw:CARD=NVidia,DEV=3 correlacionar con un dispositivo en /dev?
mpg123 le permitirá especificar un dispositivo en particular así:
-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.
Los dispositivos plughw en 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 coincidir con los dispositivos pcmC0D?p en /dev/snd:
$ ls /dev/snd/ | egrep [013]p
pcmC0D0p
pcmC0D1p
pcmC0D3p
Pero usarlo no parece ayudar a 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)
Realmente no entiendo qué es ALSA y/o PulseAudio con respecto a esto.
Relacionado:¿Cómo mostrar siempre (u ocultar automáticamente) los elementos del menú en Unity?Ninguno parece funcionar en el entorno limitado:
$ pactl list cards
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
$ alsamixer
Error opening terminal: unknown.
Ambos comandos funcionan con variables de entorno "normales".
Descargué y ejecuté alsa-info.sh, primero con un entorno "normal":
http://www.alsa-project.org/db/?f=e2be8ceb9ef289ff9ef95557396dd82b88f337e0
Cuando traté de ejecutarlo con la mayoría de las variables de entorno sin configurar, recibí un error.
Después de configurar:
export TERM=xterm
Tengo el script ejecutándose de nuevo. Resultado aquí:
http://www.alsa-project.org/db/?f=67fdd80bd55c76cd6dd30c981bf02fe66ba3d9d6
EDITAR:
La investigación adicional de la desactivación de variables de entorno muestra que solo tengo que desactivar XDG_RUNTIME_DIR para interrumpir la reproducción.
$ unset XDG_RUNTIME_DIR
EDIT2:
Si abandono mgp123 por cvlc, obtengo un sonido cuando juego a través de crontab así:
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
Respuesta aceptada:
En Mientras usa la conexión ssh, intente agregar su usuario en el grupo "audio":sudo usermod -aG audio username
reinicie y pruebe que alsamixer está bien, para que pueda configurar los volúmenes:probablemente tenga que presionar F6 para seleccionar el tercer dispositivo.
Entonces, en mi caso, puedo leer sonido conectado por ssh en una PC remota sin servidor X usando:
- cvlc (que viene con el paquete vlc-nox):
cvlc --alsa-audio-device="hw:0,3" /usr/share/sounds/alsa/Front_Center.wav
Si no está bien, cambie hw:0,3 a hw:0,0 o hw:0,1
En mi caso, también funciona a través de crontab. - mpg123:esto también funciona a través de ssh:
mpg123 -a hw:0,3 Musique/test.mp3
Tenga en cuenta que, en mi caso, pulseaudio está deshabilitado en la PC remota (no estoy seguro de que la deshabilitación sea útil ya que pulseaudio se inicia a través de la sesión X y lightdm). Para verificar que pulseaudio está desactivado y no reaparece automáticamente, ejecute killall -9 pulseaudio
varias veces