OrangePI3 Armbian Ubuntu нет звука

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

Модератор: immortal

Ответить
Skat136
Сообщения: 2
Зарегистрирован: Пн мар 30, 2020 6:42 pm
Благодарил (а): 0
Поблагодарили: 0

OrangePI3 Armbian Ubuntu нет звука

Сообщение Skat136 » Ср апр 01, 2020 11:06 pm

Доброго времени суток!! Прошу помощи!! Не могу заставить majordomo проигрывать звук. Ни динь-дон, ни команда say не проигрывается, файлы RHvoice кэшируются их можно воспроизвести в консоли через mplayer от пользователя www-data - звук есть. через панель управления majordomo настройки-> звуковые файлы звук динь-дон воспроизводится. На команду say("привет", 2); пишет в истории событий "привет" но ни звука не проигрывается, уже третий день пытаюсь победить эту проблему. Права на var/www, на папки и файлы, пренадлежат www-data. В групе audio пользователь www-data есть. Majordomo устанавливался с помощью скрипта "для установки на чистую RaspberryPi, OrangePi".

В логах majordomo:
_error.log
СпойлерПоказать
15:38:44 0.47348000 Error registered (type: cycle_hang):
cycle_wscache
Backtrace:
#0 /var/www/cycle.php(385): registerError('cycle_hang', 'cycle_wscache')
#1 {main}
15:38:44 0.40934000 Error registered (type: cycle_hang):
cycle_websockets
Backtrace:
#0 /var/www/cycle.php(385): registerError('cycle_hang', 'cycle_websocket...')
#1 {main}
15:38:44 0.38080800 Error registered (type: cycle_hang):
cycle_ping
Backtrace:
#0 /var/www/cycle.php(385): registerError('cycle_hang', 'cycle_ping')
#1 {main}
15:38:44 0.33907900 Error registered (type: cycle_hang):
cycle_execs
Backtrace:
#0 /var/www/cycle.php(385): registerError('cycle_hang', 'cycle_execs')
#1 {main}
01:03:02 0.66774800 Error registered (type: sql):
2006: MySQL server has gone away
SELECT objects.*
FROM objects
WHERE TITLE = 'ThisComputer'
Backtrace:
#0 /var/www/lib/mysqli.class.php(415): registerError('sql', '2006: MySQL ser...')
#1 /var/www/lib/mysqli.class.php(194): mysql->Error('SELECT objects....', 1)
#2 /var/www/lib/mysqli.class.php(239): mysql->Exec('SELECT objects....')
#3 /var/www/lib/sqlFunctions.class.php(95): mysql->SelectOne('SELECT objects....')
#4 /var/www/lib/objects.class.php(406): SQLSelectOne('SELECT objects....')
#5 /var/www/lib/objects.class.php(929): getObject('ThisComputer')
#6 /var/www/scripts/cycle_webvars.php(29): setGlobal('cycle_webvarsRu...', 1585692182, 1)
#7 {main}
01:03:02 0.16884700 Error registered (type: sql):
2006: MySQL server has gone away
SELECT objects.*
FROM objects
WHERE TITLE = 'ThisComputer'
Backtrace:
#0 /var/www/lib/mysqli.class.php(415): registerError('sql', '2006: MySQL ser...')
#1 /var/www/lib/mysqli.class.php(194): mysql->Error('SELECT objects....', 1)
#2 /var/www/lib/mysqli.class.php(239): mysql->Exec('SELECT objects....')
#3 /var/www/lib/sqlFunctions.class.php(95): mysql->SelectOne('SELECT objects....')
#4 /var/www/lib/objects.class.php(406): SQLSelectOne('SELECT objects....')
#5 /var/www/lib/objects.class.php(929): getObject('ThisComputer')
#6 /var/www/scripts/cycle_ping.php(29): setGlobal('cycle_pingRun', 1585692182, 1)
#7 {main}
_terminals.log
СпойлерПоказать

22:55:58 0.05728900 Processing SAY: {"level":2,"message":"привет","member_id":0,"ignoreVoice":1,"BREAK":false}
22:00:00 0.33152300 Processing SAY: {"level":1,"message":"22 часа","member_id":0,"BREAK":false}
22:00:00 0.32993600 Processing HOURLY: {"BREAK":false}
21:41:49 0.10716600 Processing SAY: {"level":0,"message":"Статус связи восстановился на Зелёный","member_id":0,"BREAK":false}
21:00:00 0.64320200 Processing HOURLY: {"BREAK":false}
21:00:00 0.63130300 Processing SAY: {"level":1,"message":"21 час","member_id":0,"BREAK":false}
20:31:16 0.49031900 Processing SAY: {"level":0,"message":"Нет доступа в Интернет","member_id":0,"BREAK":false}
20:31:16 0.45762700 Processing SAY: {"level":0,"message":"Статус связи изменился на Жёлтый.","member_id":0,"BREAK":false}
20:00:01 0.13246300 Processing SAY: {"level":0,"message":"Режим Ночной активирован.","member_id":0,"BREAK":false}
20:00:00 0.92230700 Processing SAY: {"level":1,"message":"20 часов","member_id":0,"ignoreVoice":1,"BREAK":false}
20:00:00 0.80804000 Processing HOURLY: {"BREAK":false}
19:45:00 0.33974700 Processing SAY: {"level":2,"message":"Солнце заходит","member_id":0,"ignoreVoice":1,"BREAK":false}
19:35:28 0.51085100 Processing SAY: {"level":2,"message":"19 часов 35 минут","member_id":0,"ignoreVoice":1,"BREAK":false}
19:34:42 0.68222400 Processing SAY: {"level":2,"message":"19 часов 34 минуты","member_id":0,"ignoreVoice":1,"BREAK":false}
19:20:38 0.21366400 Processing SAY: {"level":0,"message":"Статус связи восстановился на Зелёный","member_id":0,"BREAK":false}
19:11:38 0.51622500 Processing SAY: {"level":0,"message":"19 часов 11 минут","member_id":0,"BREAK":false}
19:11:23 0.07216000 Processing SAY: {"level":30,"message":"19 часов 11 минут","member_id":0,"ignoreVoice":1,"BREAK":false}
19:11:23 0.06629800 Processing SAY_CACHED_READY: {"level":30,"tts_engine":"rhvoice","message":"19 часов 11 минут","filename":"\/var\/www\/cms\/cached\/voice\/rh_9df6e9c9ab5e25ecc461a6ca7afe5902.wav","destination":null,"event":"SAY"}

Сам разобрался) решение выложу тут вдруг у кого то будет такая же проблема будет.
Проблема была в юзере от которого запускались цыклы. Почему то от пользователя www-data небыло ни Динь-Дон ни голоса, хотя если проверять звук по отдельности (голос и воспроизведение динь-дон) в терминале Linux от этого пользователя, то звук был.
И так, что я делал:
1) убил все циклы majordomo, проверяем:

Код: Выделить всё

 ps axu |grep cycle 
2) Запускал циклы majordomo от имени пользователей root, alice (моя учетная запись) и www-data
так был только Динь-дон:

Код: Выделить всё

 sudo -u root php /var/www/cycle.php 

так Динь-дон и голос алисы:

Код: Выделить всё

 sudo -u alice php /var/www/cycle.php 

а так ничего:

Код: Выделить всё

 sudo -u www-data php /var/www/cycle.php 
пришлось сделать так:
создать скрипт запуска циклов в /usr/sbin/

Код: Выделить всё

 sudo nano usr/sbin/majordomo 
и вставить в него следующий текст (в user="alice" вставить нужно пользователя от которого все работает)

Код: Выделить всё

 #!/bin/sh
### BEGIN INIT INFO
# Provides: SmartLiving
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

sleep 10
dir="/var/www"
user="alice"
cmd="php /var/www/cycle.php"
name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid() {
    cat "$pid_file"
}
is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}
case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
(while true; do
    sudo -u "$user" $cmd
done)>> "$stdout_log" 2>> "$stderr_log" &
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill `get_pid`
        sudo killall php
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi
            echo -n "."
            sleep 1
        done
        echo
        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
        sudo killall php
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac
exit 0 
сохраняем, выходим
настраиваем права на /usr/sbin/majordomo

Код: Выделить всё

 chown root:root /usr/sbin/majordomo
 chmod 755 /usr/sbin/majordomo 
в /etc/sudoers даем права пользователю которого указали в строке выше (user="alice") на выполнение скрипта без подтверждения пароля
открываем

Код: Выделить всё

 sudo nano /etc/sudoers 
втавляем строку и меняем пользователя

Код: Выделить всё

 alice ALL=(ALL) NOPASSWD: /usr/sbin/majordomo 
создаем ссылку в /etc/init.d

Код: Выделить всё

 ln /usr/sbin/majordomo /etc/init.d/ 
потом выполняем:

Код: Выделить всё

 sudo update-rc.d majordomo defaults
 sudo /etc/init.d/majordomo start
перезагружаемся и проверяем должно заработать
Ответить