Можно пойти еще дальше, чем улучшение, предложенное @MikWind, и настроить источники замыкающих устройств во время создания.
Наконец-то я получил скрипт bash для настройки всего, что является постоянным:
#!/bin/bash
MICROPHONE="alsa_input.pci-0000_00_1b.0.analog-stereo"
SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"
# Create the null sinks
# virtual1 gets your audio source (mplayer ...) only
# virtual2 gets virtual1 + micro
pactl load-module module-null-sink sink_name=virtual1 sink_properties=device.description="virtual1"
pactl load-module module-null-sink sink_name=virtual2 sink_properties=device.description="virtual2"
# Now create the loopback devices, all arguments are optional and can be configured with pavucontrol
pactl load-module module-loopback source=virtual1.monitor sink=$SPEAKERS
pactl load-module module-loopback source=virtual1.monitor sink=virtual2
pactl load-module module-loopback source=$MICROPHONE sink=virtual2
. Я сам боролся за несколько часов до того, как понял достаточно, чтобы заставить его работать. Я собрал результаты своего исследования (сценарий, ссылки на документацию, объяснения) в git repo.
Я не уверен, достаточно ли я для того, чтобы быть полезным кому-то другому, кроме меня, но мне хотелось бы, чтобы я нашел такую документацию, когда я проводил собственное исследование, поэтому я рекомендую всем, кто пытается делайте то же самое, чтобы посмотреть.
Только для записи вы можете использовать dialog для решения текстового пользовательского интерфейса (TUI).
Синтаксис:
dialog --title "text" --fselect /path/to/dir height width
Пример: [!d2 ]
FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."
Результат будет примерно таким:
Как указано в @Wilf, вы можете использовать переменные $LINES и $COLUMNS, чтобы сделать он заполняет терминал:
$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))
Я знаю, что это 8 месяцев, а также ответ на вопрос OP. Однако яд упоминается, но ни один пример не был предложен. Вот мое решение, использующее yad.
DIR="/home" \
i=0;for location in source destination
do
((i++));selection[$i]=$(yad --center \
--width 350 \
--form \
--title="yad example" \
--text="Select $location directory" \
--field=:LBL "" \
--field=Path:DIR "$DIR" \
--separator='' )
done;\
echo "Command to run is \"rsync -av --delete ${selection[1]} ${selection[2]}\""
Как это работает, это так. Мы помещаем yad в цикл for, устанавливая переменную $location на source для первого прохода и destination для второго. Вывод помещается в массив selection[], для которого в качестве индекса используется переменная i. Он устанавливается в 0 в начале и увеличивается с каждым проходом. Следовательно, источник сохраняется как ${selection[1]} и пункт назначения ${selection[2]}.
DIR = "/ home" в первой строке устанавливает диалог по умолчанию. Параметры команды yad можно найти на терминале, набрав yad --help.
Вот кратчайшее (и лучшее) решение для ответа: Yad предоставляет точную опцию, как zenity:
yad --file-selection --directory
Откроется диалоговое окно выбора каталога. Без дополнительного аргумента --directory вместо этого будет диалог выбора файла.