Ubuntu 16.04 - как играть звук из сценария, запускаемого из webservice, в фоновом режиме

Я разработчик и настроил сервер на ubuntu 16.04, запуская веб-службы.

Эти веб-службы вызывают некоторый файл сценария локально, скрипт выполняет какую-то задачу и должен воспроизводить звук, когда

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

Вот мой контрольный список:

Звук работает нормально и правильно настроен на компьютере. Если я вызываю свой сценарий из командной строки терминала, задачи выполняются, и звук воспроизводится. Если я вызываю скрипт из веб-службы, задачи выполняются, но звук не воспроизводится.

Вот пример того, что я тестировал:

# script name : eject.sh # ... here I do some stuff, which are working fine... play -q /mnt/datas/wifi_started.mp3 >/dev/null cvlc --play-and-exit /mnt/datas/wifi_started.mp3 &>/dev/null & nohup mplayer /mnt/datas/wifi_started.mp3 > /dev/null 2>&1

Все строки, приведенные выше, воспроизводят звук, когда файл сценария выполняется с терминала, и звук при исполнении из веб-сервис!

Что я могу сделать, чтобы решить эту проблему?

2
задан 24 April 2018 в 17:59

2 ответа

Обновленный ответ

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

Я тестировал это в тесте системы Lubuntu и Xubuntu Bionic (которые я все равно тестирую). Я установил openssh-server и espeak (и в Xubuntu-Core и Ubuntu вам понадобится программный пакет gnome-system-tools, чтобы получить программу users-admin).

Тогда есть легкое исправление: [ ! d3] Выберите Использовать аудиоустройства в users-admin Нажмите OK.

Вам может потребоваться переместить окно (с помощью Alt + левая кнопка мыши), чтобы найти кнопку OK.

Затем он работает, пока он еще находится в журнале на экране, чтобы воспроизводить звук через ssh, и я бы предположил также через другие веб-службы,

ssh tester@192.168.0.10 "espeak 'Hello while still at the log in screen'"

Измените идентификатор пользователя и сетевой адрес в соответствии с вашим случаем.

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

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

Оригинальный ответ

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

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

Можно передать звук клиенту, но он не является прямым. Возможно, вы найдете что-то полезное, когда вы просматриваете интернет со следующей строкой поиска, звук linux на клиенте. Я думаю, что сделал (но не проверял). Но есть обходной путь, который проще. Запустите задачи на сервере, чтобы вы могли воспроизводить звук локально в своем клиенте, когда задачи завершены.

Пример:

openssh-server установлен на моей рабочей станции, и я могу подключиться к нему с любого другого компьютера через локальную сеть.

Установить espeak ,

sudo apt install espeak

Следующий shellscript иллюстрирует, что происходит,

ssh sudodus@192.168.0.2 \ "echo 'Who am I to do this?'| tee /dev/stderr |espeak; whoami| \ tee /dev/stderr |espeak| tee /dev/stderr |espeak;\ echo 'At which server?'| tee /dev/stderr |espeak;hostname -A| tee /dev/stderr|espeak" sleep 1 echo 'Who am I to check this?'| tee /dev/stderr |espeak; whoami| tee /dev/stderr |espeak echo 'At which client?' | tee /dev/stderr |espeak hostname -A| tee /dev/stderr |espeak

Это записанный вывод с живого диска с Lubuntu.

lubuntu@lubuntu:~$ ./tasks-at-server_reported-at-client sudodus@192.168.0.2's password: Who am I to do this? sudodus At which server? xw8400 Who am I to check this? lubuntu At which client? lubuntu lubuntu@lubuntu:~$

Если вы можете услышать оба компьютера, вы услышите, что сервер «говорит», и после этого слышите, как клиент «говорит». В противном случае вы услышите, как клиент «говорит».

0
ответ дан 17 July 2018 в 16:14

Обновленный ответ

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

Я тестировал это в тесте системы Lubuntu и Xubuntu Bionic (которые я все равно тестирую). Я установил openssh-server и espeak (и в Xubuntu-Core и Ubuntu вам понадобится программный пакет gnome-system-tools, чтобы получить программу users-admin).

Тогда есть легкое исправление: [ ! d3] Выберите Использовать аудиоустройства в users-admin Нажмите OK.

Вам может потребоваться переместить окно (с помощью Alt + левая кнопка мыши), чтобы найти кнопку OK.

Затем он работает, пока он еще находится в журнале на экране, чтобы воспроизводить звук через ssh, и я бы предположил также через другие веб-службы,

ssh tester@192.168.0.10 "espeak 'Hello while still at the log in screen'"

Измените идентификатор пользователя и сетевой адрес в соответствии с вашим случаем.

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

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

Оригинальный ответ

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

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

Можно передать звук клиенту, но он не является прямым. Возможно, вы найдете что-то полезное, когда вы просматриваете интернет со следующей строкой поиска, звук linux на клиенте. Я думаю, что сделал (но не проверял). Но есть обходной путь, который проще. Запустите задачи на сервере, чтобы вы могли воспроизводить звук локально в своем клиенте, когда задачи завершены.

Пример:

openssh-server установлен на моей рабочей станции, и я могу подключиться к нему с любого другого компьютера через локальную сеть.

Установить espeak ,

sudo apt install espeak

Следующий shellscript иллюстрирует, что происходит,

ssh sudodus@192.168.0.2 \ "echo 'Who am I to do this?'| tee /dev/stderr |espeak; whoami| \ tee /dev/stderr |espeak| tee /dev/stderr |espeak;\ echo 'At which server?'| tee /dev/stderr |espeak;hostname -A| tee /dev/stderr|espeak" sleep 1 echo 'Who am I to check this?'| tee /dev/stderr |espeak; whoami| tee /dev/stderr |espeak echo 'At which client?' | tee /dev/stderr |espeak hostname -A| tee /dev/stderr |espeak

Это записанный вывод с живого диска с Lubuntu.

lubuntu@lubuntu:~$ ./tasks-at-server_reported-at-client sudodus@192.168.0.2's password: Who am I to do this? sudodus At which server? xw8400 Who am I to check this? lubuntu At which client? lubuntu lubuntu@lubuntu:~$

Если вы можете услышать оба компьютера, вы услышите, что сервер «говорит», и после этого слышите, как клиент «говорит». В противном случае вы услышите, как клиент «говорит».

0
ответ дан 23 July 2018 в 17:08
  • 1
    Привет, спасибо, но мне нужно воспроизвести звук на стороне компьютера Linux, а не на стороне клиента (который представляет собой планшет). Пользователь нажимает на какую-нибудь кнопку на планшете, вызывается веб-служба, на стороне обслуживания (компьютер Linux) запускаются некоторые скрипты. чтобы сказать пользователю, что работа выполнена, мне нужно воспроизвести звук. Служебный сервер - это локальный сервер, скажем, «ящик», который пользователь набирает с собой и с планшетом. нет клавиатуры, нет монитора, поэтому мне нужно воспроизводить звук на стороне сервера. – Olivier Robin 25 April 2018 в 10:22
  • 2
    Когда вы пользуетесь сервисом ssh, звук воспроизводится на сервере. Какую услугу вы используете? Возможно, проблема связана с вашим конкретным веб-сервисом. - В качестве первого шага вы можете проверить, можете ли вы использовать метод в своем ответе (с ssh с ПК, а не с планшета), а затем изменить его, чтобы запустить скрипт для выполнения своих задач, а затем воспроизвести звук, когда запущен удаленно через ssh, а затем попытайтесь выяснить, как делать соответствующие вещи, чтобы он был полезен для вашей цели. – sudodus 25 April 2018 в 10:38
  • 3
    веб-служба - это то, что называется сервером apache. – Olivier Robin 25 April 2018 в 11:02
  • 4
    Я тестировал использование espeak, он не воспроизводит звук, когда scipt вызывается из веб-службы. Проблема в том, что есть только звуковое задание, которое не выполняется, все остальные задачи выполняются надлежащим образом скриптом. – Olivier Robin 25 April 2018 в 11:03
  • 5
    если кто-то хочет протестировать его, у меня есть точно такая же проблема, если я попытаюсь воспроизвести звук, прежде чем я войду на сервер ubuntu: на экране, где пользователю нужно ввести свой пароль. – Olivier Robin 25 April 2018 в 11:09

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

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