Ubuntu 14.04 и проигрывание песен от крона

Я недавно обновил свой компьютер до Ubuntu 14.04.

После обновления система больше не играет несколько песен, у меня был он игра через crontab.

crontab строки похожи так:

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

Я не получаю ошибки от крона после выполнения команды. Если я выполняю команду вручную через SSH, песня играет успешно.

Я предварительно ожидал команду в crontab с 'ENV' для получения лучшей власти среды, под которой крон выполняет задание:

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

Это генерировало следующий вывод:

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

Сделать интерактивную оболочку из моего соединения SSH больше как один крон работает под, я сбросил все кроме указанной среды vaiables:

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

И после того изменения copy+paste от crontab больше не производят звука. Программа, кажется, играет файл однако:

$ /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.

Продвижение меня, чтобы полагать, что звук просто производится к неправильному устройству.

При переключении на aplay followning не производит звука:

$ 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

Но определение этого устройства действительно играет по HDMI, как предназначено:

$ 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

Как я могу установить то устройство как системное значение по умолчанию? (Который это, кажется, каждый раз, когда у меня есть более богатая среда.)

С другой стороны, как я могу вынудить mgp123 использовать правильное устройство? ALSA-устройство plughw:CARD=NVidia, DEV=3 коррелируют к устройству в/dev?

mpg123 позволит Вам указать конкретное устройство как так:

   -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.

plughw устройства в 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

Кажется, совпадаете с pcmC0D? p-устройства в/dev/snd:

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

Но использование это, кажется, не помогает 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)

Я действительно не понимаю то, что ALSA и/или PulseAudio относительно этого.

Ни один, кажется, не работает в ограниченной среде:

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

Обе команды работают с "нормальными" установленными переменными среды.

Я загрузил и выполнил alsa-info.sh, сначала с "нормальной" средой:

http://www.alsa-project.org/db/?f=e2be8ceb9ef289ff9ef95557396dd82b88f337e0

Когда я пытался выполнить его с большей частью сброса переменной среды, я получил ошибку.

После установки:

export TERM=xterm

Я получил сценарий, работающий снова. Закончитесь здесь:

http://www.alsa-project.org/db/?f=67fdd80bd55c76cd6dd30c981bf02fe66ba3d9d6

Править:

Дальнейшее расследование сбрасывающего переменной среды показывает, что я только должен сбросить XDG_RUNTIME_DIR для повреждения воспроизведения.

$ unset XDG_RUNTIME_DIR

EDIT2:

Если я отказываюсь от mgp123 для cvlc, я становлюсь звуковым при проигрывании через crontab как так:

 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
5
задан 30 September 2014 в 06:59

3 ответа

В том, Поскольку Вы используете соединение SSH, пытаетесь добавить своего пользователя в "аудио" группе:
sudo usermod -aG audio username
перезагрузка и тест, что alsamixer в порядке, таким образом, можно регулировать громкость: Вероятно, необходимо нажать F6 для выбора 3-го устройства.

Затем в моем случае, я могу считать звук, соединенный ssh на удаленном ПК без использования X-сервера:

  • cvlc (который идет с vlc-nox пакетом):
    cvlc --alsa-audio-device="hw:0,3" /usr/share/sounds/alsa/Front_Center.wav
    , Если не хорошо, измените hw:0,3 на hw:0,0 или hw:0,1
    В моем случае, это работает также через crontab.
  • mpg123: это работает также запущенное через ssh:
    mpg123 -a hw:0,3 Musique/test.mp3

Примечание, что в моем случае, pulseaudio, отключает на удаленном ПК (не, верное отключение полезно, когда pulseaudio запускается до X и lightdm сессия). Чтобы проверить, что pulseaudio выключен и не автоматическое перепорождение, выполняет различные времена killall -9 pulseaudio

1
ответ дан 23 November 2019 в 08:56

Так, я просто установил переменную среды XDG_RUNTIME_DIR то же как в моих рабочих оболочках, и это работает. Я нашел эту страницу, потому что у меня было это тот же проблема с попыткой стать звуковым для игры от заданий крона - mpg123 кажущийся думать, что это играет прекрасный файл, но без аудио. Установка той переменной зафиксировала его.

7
ответ дан 23 November 2019 в 08:56

Несмотря на использование этого экспорта:

# paplay needs environment variable exported:
export XDG_RUNTIME_DIR="/run/user/1000"

это не работало.

После того, как месяцы исследования не нашли решения.

В отчаянии которое попробовали работали следующее и это:

Введите следующее в Кембридж

# Terminal command: crontab -e
# Detect the name of the display in use
display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
user=$(who | grep '('$display')' | awk '{print $1}') # the user of the display 
uid=$(id -u $user) #Detect the id of the user

XDG_RUNTIME_DIR=/run/user/${uid}

*/5 * * * * sh /root/.play_sound.sh

Затем создайте .play_sound.sh

/root/.play_sound.sh

display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
user=$(who | grep '('$display')' | awk '{print $1}') # the user of the display 
uid=$(id -u $user) #Detect the id of the user

su - $user -c "paplay /usr/share/sounds/freedesktop/stereo/complete.oga"

Надеюсь, это поможет.

1
ответ дан 23 November 2019 в 08:56

Другие вопросы по тегам:

Похожие вопросы: