Когда вы используете здесь документы -, вы должны помнить о разнице при цитировании или не цитировании токена EOF
. Без кавычек любая подстановка команд будет выполняться в основной оболочке, а не в Docker. Сравните эти два:
$ cat <<EOF
$(echo ok)
EOF
ok
И:
$ cat <<"EOF"
$(echo ok)
EOF
$(echo ok)
Поэтому, если вы хотите передавать команды, включая подстановку команд, в Docker, токен следует заключать в кавычки.
Кстати,
sockperf
? $()
. Я полагаю, что основная проблема заключается в том, что оба пользователя пытаются получить контроль над звуковой картой/звуковым драйвером. Это связано с тем, что служба PulseAudio по умолчанию просто пытается создать главный демон.
Согласно моему предыдущему комментарию, в вики Arch Linux есть хорошая статья Разрешение нескольким пользователям одновременно использовать PulseAudio .
Цель вышеприведенного примера состоит в том, чтобы один пользователь создал основной демон, к которому подключались другие пользователи PA, таким образом разделяя один мастер-сеанс. Посмотрите на это так: у вас есть один человек, владеющий музыкальной студией с динамиками -, а другие арендуют ее для воспроизведения музыки через эти динамики. Но кто-то должен контролировать установку. PA может обрабатывать довольно много клиентов, а также может быть основан на TCP/UDP и действовать как настройка Sonos для нескольких Raspberry Pi;)
Чтобы решить эту -проблему нескольких арендаторов,создайте конфигурацию импульса для пользователя pi
:(Пропустите, если у вас уже есть default.pa
в~/.config/pulse/
)
sudo cp /etc/pulse/default.pa ~/.config/pulse/default.pa
sudo chown pi:pi ~/.config/pulse/default.pa
Измените конфигурацию pi
импульса ~/.config/pulse/default.pa
, добавив следующее в конец конфигурации:
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket
В домашнем каталоге www-data
создайте/отредактируйте ~/.config/pulse/client.conf
и добавьте следующее:
default-server = unix:/tmp/pulse-socket
Это дает указание pi
создать сокет PulseAudio на /tmp/pulse-socket
и, в свою очередь, указывает www-data
подключиться к этому сокету, а не создавать новый.
Имейте в виду, что сокет должен быть доступен обоим пользователям, и в вашем случае он находится под /tmp
, который обычно -доступен для записи во всем мире. Это может быть слишком много, и в этом случае переместите сокет туда, где только два пользователя имеют доступ.