Ich habe kürzlich meinen Computer auf Ubuntu 14.04 aktualisiert.
Nach dem Upgrade spielt das System die wenigen Songs, die ich per crontab abspielen ließ, nicht mehr ab.
Die Crontab-Zeilen sehen folgendermaßen aus:
0 9 * * 1-5 /usr/bin/mpg123 -q //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3
Beim Ausführen des Befehls erhalte ich keinen Fehler von Cron. Wenn ich den Befehl manuell über SSH ausführe, wird der Song erfolgreich abgespielt.
Ich habe dem Befehl in crontab „env“ vorangestellt, um die Umgebung, in der cron den Job ausführt, besser in den Griff zu bekommen:
0 9 * * 1-5 env; /usr/bin/mpg123 //eadn-wc01-5196795.nxedge.io/home/user/Music/song.mp3
Dies erzeugte die folgende Ausgabe:
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
Um die interaktive Shell meiner SSH-Verbindung ähnlicher zu machen, unter der cron läuft, setze ich alle außer den angegebenen Umgebungsvariablen zurück:
for a in `env | awk -F= '{ print $1 }' | grep -v "HOME\|LOGNAME\|PATH\|LANG\|SHELL\|PWD" | xargs`; do unset $a; done
Und nach dieser Änderung erzeugt Kopieren + Einfügen von Crontab keinen Ton mehr. Das Programm scheint die Datei jedoch abzuspielen:
$ /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.
Was mich zu der Annahme verleitet, dass der Ton nur an das falsche Gerät ausgegeben wird.
Beim Umschalten auf folgende Wiedergabe wird kein Ton ausgegeben:
$ 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
Die Angabe dieses Geräts spielt jedoch wie vorgesehen über HDMI ab:
$ 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
Wie kann ich dieses Gerät als Systemstandard festlegen?
(Was es zu sein scheint, wenn ich eine reichhaltigere Umgebung habe.)
Wie kann ich alternativ mgp123 zwingen, das richtige Gerät zu verwenden?
Funktioniert das ALSA-Gerät plughw:CARD=NVidia,DEV=3 mit einem Gerät in /dev korrelieren?
mpg123 lässt Sie ein bestimmtes Gerät wie folgt spezifizieren:
-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.
Die Plughw-Geräte 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
Scheinen mit den pcmC0D?p-Geräten in /dev/snd:
übereinzustimmen$ ls /dev/snd/ | egrep [013]p
pcmC0D0p
pcmC0D1p
pcmC0D3p
Aber es scheint nicht zu helfen 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)
Ich verstehe nicht wirklich, was ALSA und/oder PulseAudio in dieser Hinsicht sind.
Verwandte:Wie kann man Menüelemente in Unity immer anzeigen (oder automatisch ausblenden)?Beides scheint in der eingeschränkten Umgebung nicht zu funktionieren:
$ pactl list cards
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
$ alsamixer
Error opening terminal: unknown.
Beide Befehle arbeiten mit „normalen“ gesetzten Umgebungsvariablen.
Ich habe alsa-info.sh heruntergeladen und ausgeführt, zuerst mit „normaler“ Umgebung:
http://www.alsa-project.org/db/?f=e2be8ceb9ef289ff9ef95557396dd82b88f337e0
Als ich versuchte, es mit den meisten Umgebungsvariablen auszuführen, bekam ich eine Fehlermeldung.
Nach der Einstellung:
export TERM=xterm
Ich habe das Skript wieder zum Laufen gebracht. Ergebnis hier:
http://www.alsa-project.org/db/?f=67fdd80bd55c76cd6dd30c981bf02fe66ba3d9d6
BEARBEITEN:
Eine weitere Untersuchung der Deaktivierung der Umgebungsvariablen zeigt, dass ich nur XDG_RUNTIME_DIR deaktivieren muss, um die Wiedergabe zu unterbrechen.
$ unset XDG_RUNTIME_DIR
BEARBEITEN2:
Wenn ich mgp123 für cvlc verlasse, bekomme ich beim Spielen über crontab einen Sound wie folgt:
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
Akzeptierte Antwort:
Versuchen Sie unter As you use ssh connection , Ihren Benutzer zur Gruppe „audio“ hinzuzufügen:sudo usermod -aG audio username
reboote und teste, ob alsamixer ok ist, damit du die Lautstärke einstellen kannst:Wahrscheinlich musst du F6 drücken, um das 3. Gerät auszuwählen.
Dann kann ich in meinem Fall Sound lesen, der über ssh auf einem Remote-PC ohne X-Server verbunden ist, indem ich Folgendes verwende:
- cvlc (das im Paket vlc-nox enthalten ist):
cvlc --alsa-audio-device="hw:0,3" /usr/share/sounds/alsa/Front_Center.wav
Wenn nicht ok, ändere hw:0,3 auf hw:0,0 oder hw:0,1
Bei mir funktioniert es auch über crontab. - mpg123:funktioniert auch per ssh:
mpg123 -a hw:0,3 Musique/test.mp3
Beachten Sie, dass in meinem Fall pulseaudio auf dem Remote-PC deaktiviert ist (nicht sicher, ob das Deaktivieren nützlich ist, da pulseaudio über X und lightdm session gestartet wird). Um zu überprüfen, ob pulseaudio ausgeschaltet ist und nicht automatisch neu gestartet wird, führen Sie mehrmals killall -9 pulseaudio
aus