Я не думаю, что это тривиально, и этот вопрос должен, вероятно, быть перемещен в stackoverflow.
Существует насколько я знаю нет sysfs
или procfs
интерфейс для доступа к финалу (ALSA) [аудио] соединение; даже нет гарантии, что существует такая вещь в программном обеспечении как некоторые аппаратные средства (такой как emu10k1
) выполняет его собственное смешивание, хотя я по общему признанию понятия не имею, как это работает.
Существует также вопрос нескольких аудиовыходов (цифровой (как SPDIF), аналог, headphons или динамики, и т.д.) и несколько конфигураций динамиков на той же карте, не говоря уже о возможности нескольких карт.
Лучший выбор состоит в том, чтобы, по-видимому, попытаться насладиться, какой бы ни устройство ALSA используется (По-видимому, hw0
если смешивание происходит в звуковой подсистеме как pulseaudio, или dmix
если никакая звуковая подсистема не используется), так как это - "последний шаг", прежде чем аудио достигнет аппаратных средств. Однако я понятия не имею, возможно ли это;наверное, нет.
Если можно предположить, что пользователь использует что-то как pulseaudio, то задача становится намного легче. Программное обеспечение, такое как pavucontrol уже реализует это, как замечено под вкладкой Playback, а также этапами pre-final-mix под Устройствами вывода. Технически, это включает получение самого аудиопотока, затем преобразовывая его в частотную область (например, путем выполнения StFt) для визуализации его некоторым способом; все, в чем Вы действительно нуждаетесь для этого, является доступом к аудиопотоку, и pulseaudio может обеспечить, это (как pavucontrol делает) через приемник.
Я не помогаю, не так ли? На вашем месте и просто требуемый это для моего рабочего стола, и если я использовал pulseaudio (который я сам, оказывается, использую), моя первая цель состояла бы в том, чтобы попытаться получить заключительный поток соединения. Парни в этом потоке, кажется, выяснили красноречивый метод выполнения того использования только pactl
и pacmd
, который мог довольно легко быть сделан программно также.
Когда Вы схватили аудиопотока, только математика остается :-)
Полный ответ был бы
1) Откройте файл как vi chown_homedirs
2) Вставьте следующий код
#!/bin/bash
cd /home &&
for h in *
do
chown -R "$h:$h" "$h";
done
3) Сохраните файл
4) chmod +x chown_homedirs
5) выполненный ./chown_homedirs
Примечание: Если пользовательские каталоги имеют пробелы в них, всегда необходимо заключать расширение в кавычки. Если Вы не заключаете вещи расширения в кавычки, мог бы привести к сбою и изложить Вас к неожиданным результатам.
Можно использовать статистику для получения пользователя, и владение группы файла затем используют их для обновления файлов, чего-то как
#!/bin/bash
cd /home
for file in *
do
user=$(stat -c %U "$file")
group=$(stat -c %G "$file")
echo chown -R "$user":"$group" "$file"
done
Это справляется с ситуацией, где владелец/группа/каталог не является всем одинаковым. Очевидно, удалите эхо, если оно тестирует хорошо на Вас.
/home/*
или использование чего-то как if [ $? -ne 0 ]; then echo Failed to cd to /home. Exiting!; exit 1; fi
.
– Kyle Smith
18.07.2013, 14:16
stat
вместо того, чтобы вслепую принимать владение файлов. использование
–
18.07.2013, 14:23
[[]]
ключевое слово для тестирования. [
тестовая команда используется, только если Вы пишете для !sh
. Также Вы не должны должны быть проверять код состояния, вместо этого ! cd /home && echo "failed" >&2; exit 1
–
18.07.2013, 14:25
&&
проверяет код состояния. Мой код является просто более подробным способом выполнить то же.
– Kyle Smith
18.07.2013, 14:29