GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ubuntu 14.04 und Songs von Cron abspielen?

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


Ubuntu
  1. Upgrade von Ubuntu 13.10 auf Ubuntu 14.04

  2. Aktualisieren Sie von Ubuntu 13.04 auf Ubuntu 13.10

  3. So synchronisieren Sie Datum und Uhrzeit über die Befehlszeile in Ubuntu

  4. So aktualisieren Sie von Ubuntu 15.04 auf Ubuntu 15.10

  5. Ubuntu auf USB installieren und von Destop mit Uefi booten?

So aktualisieren Sie von Ubuntu 20.04 auf Ubuntu 22.04

Manuelles Mounten/Unmounten eines USB-Geräts unter Ubuntu 20.04 und 22.04

So extrahieren Sie Audio aus Video in Ubuntu und anderen Linux-Distributionen

So führen Sie ein Upgrade von Ubuntu 14.04 und 15.10 auf Ubuntu 16.04 durch

So wechseln Sie von GNOME zu Unity in Ubuntu 18.04 und 17.10

So aktualisieren Sie jetzt auf Ubuntu 22.04 Beta von 21.10 und 20.04