В дополнение к ответу Жиля вот автономная оболочка. Это смесь двух его решений. Он имеет преимущества сценария полиглота, упомянутого Жилем (один сценарий для поддержки и развертывания), но не имеет недостатков (цитируя Жиля: «Написание полиглотов не всегда легко или даже возможно»).
Он заключается в добавлении всего нескольких строк в начало вашего скрипта:
#!/bin/bash
exec mocha --reporter=tap --output=foo <(sed -n '/^#MOCHA_START#/,$ p' "$0")
#MOCHA_START#
....
....
(mocha script)
....
....
То, что следует за строкой #MOCHA_START#
— это ваш настоящий мокко-скрипт, оставленный нетронутым.
Что делают три первые строки, так это извлекают ваш сценарий mocha и вызывают вместе с ним mocha вместе с желаемыми аргументами.
Однако вам, возможно, придется заставить текстовый редактор интерпретировать файл как сценарий Mocha и соответствующим образом раскрасить его, поскольку он, вероятно, будет сбит с толку первой строкой вашего сценария, которая указывает, что это сценарий Bash:
sudo su -l employee_login
export XDG_RUNTIME_DIR=/run/user/$(id -u)
pacmd list-sinks | grep "Built-in Audio"
Хитрость заключается в том, что PulseAudio ищет в ${ XDG _RUNTIME _DIR } сокеты, необходимые для связи с демоном. Однако XDG _RUNTIME _DIR устанавливается PAM (Pluggable Authentication Modules for Linux )при входе пользователя в систему. При использовании sudo
или su
вы пропустили PAM, поэтому эта переменная не установлена.
sudo su -l employee_login
Команда su
устанавливает для вашего эффективного UID (идентификатор пользователя )такой же, как у сотрудника, которому вы пытаетесь помочь. Это необходимо, потому что PulseAudio придирчив к таким вещам и откажется работать.
-l
не является строго обязательным, но иногда помогает при отладке возможных проблем, поскольку запускает сценарии входа пользователя.
sudo
не нужен перед su -l employee_login
, если вы уже повысили свои привилегии до root.
export XDG_RUNTIME_DIR=/run/user/$(id -u)
Параметр XDG _RUNTIME _DIR необходим, поскольку PulseAudio всегда ищет в этом каталоге
Технически XDG _RUNTIME _DIR не может быть ниже /run/user
, но я никогда не видел, чтобы это было не так. [Если это когда-нибудь случится в реальной жизни, я обновлю этот ответ.]
pacmd list-sinks | grep "Built-in Audio"
Инструментpacmd
позволяет провести самоанализ (или перенастроить )запущенный демон PulseAudio. Можно представить термин PulseAudio приемник как означающий «динамики», а источник как означающий «микрофон».
Здесь мы запускаем команду list-sinks
PulseAudio, которая выводит список всех доступных устройств вывода. Мы используем grep
для проверки наличия «Встроенного -аудио», потому чтов исходном вопросе машины сотрудников должны были быть отключены и, следовательно, недоступны в качестве возможного приемника.
Обратите внимание, чтоpacmd
(и его двоюродный братpactl
)намного мощнее этого и могут использоваться не только для диагностики, но и для удаленного устранения проблем. Например, если аудиовыход правильный, но по умолчанию выбран неправильный микрофон, можно сделать что-то вроде:
pactl set-default-source alsa_input.usb-USB_Camera_USB_Camera_SN0001-02.analog-mono
Советы:pacmd
и pactl
лучше всего использовать с установленным завершением bash -, поэтому можно использовать TAB дважды, чтобы просмотреть параметры, и один раз, чтобы завершить длинные имена источников/приемников. Однако избегайте специфической командной строки -, встроенной в pacmd
, поскольку она не использует libreadline
и не имеет истории или завершения.