Будучи любителем послушать музыку с комфортом, соединил свой компьютер с ресивером аудиосистемы с помощью TosLink/ S/PDIF и столкнулся с неприятной особенностью моей новой материнки. Так, она не умеет одновременно работать с аналоговым и цифровым выходом, так что старый трюк с добавлением виртуального устройства со вторым типом выхода не прокатил - второй выход оказался немым. В итоге, чтобы переключиться на S/PDIF, мне нужно каждый раз лезть в настройки PulseAudio и переключать выход на нужный в текущий момент (колонки/наушники у компа или аудиосистема по S/PDIF). Но, лень двигатель прогресса - меня этак картина быстро перестала устраивать и я озаботился переключателем, позволяющим быстро изменять режим звуковой карты. Поделюсь тут этим фокусом, может кому пригодится.
В каждой графической системе в Linux имеется множество различных виджетов-переключателей. Так, например, Configurable Button для KDE/Plasma 5 вполне способен справиться с задачей. Так что смело добавляем её в трей и всё что нам остаётся - создать скрипты для переключения.
Чтобы переключить режим звуковой карты и выбрать нужный выход, мы воспользуемся интерфейсом командной строки для PulseAudio - командой pactl.
Так, команда :
$pactl set-card-profile <#> <profile-name>
переключает профиль аудиокарты <#> на профиль с названием <profile-name>, а команда
$pactl set-default-sink <sink-name>
переключает выход на свеже-объявившийся. Последнюю команду необходимо добавить в скрипт, так как по умолчанию, при потере связи с аудиовыходом, пульс переключится на доступный - и будет у вас звук ломиться в hdmi или ещё куда.
Всё что остаётся сделать - это выяснить номер аудиокарты, имя профиля, имя выхода. Чтобы определить их, выполните команды:
$pactl list cards
- это даст вам номер карты и имена всех доступных профилей, представленных в виде "output:analog-stereo+input:analog-stereo" для аналога или, например "output:iec958-stereo+input:analog-stereo" - для цифры. Затем выполните команду:
$pacmd list-sinks | grep -e name: -e index -e description -e muted
- это даст вам имя нужного выхода, вида "alsa_output.pci-0000_2f_00.4.iec958-stereo", который нужно будет скормить команде pactl set-default-sink. Обратите внимание, что имена в списке будут в скобочках вида <имя> - так вот скобочки в команду не кидайте, она их не съест. Кроме того, на первый взгляд можно дать вместо полного имени профиля просто номер напротив "index: #", вот только делать этого не следует - т.к. номер будет при каждом переключении прогрессивно расти и скрипт выдаст ошибку.
Теперь заходим в свою домашнюю папку, в папку со скриптами (у вас нет такой? Создайте немедленно!) типа ~/.scripts/, создаём там пару скриптов, обозвав их для узнаваемости spdif-on.sh и spdif-off.sh, в которые добавляем команды вида:
#!/bin/bash
pactl set-card-profile 1 output:iec958-stereo
pactl set-default-sink alsa_output.pci-0000_2f_00.4.iec958-stereo
И для обратного переключения:
#!/bin/bash
pactl set-card-profile 1 output:analog-stereo+input:analog-stereo
pactl set-default-sink alsa_output.pci-0000_2f_00.4.analog-stereo
Теперь добавляем этим скриптам разрешение на исполнения командой
$chmod +x spdif-on.sh&&chmod +x spdif-off.sh
и скармливаем их нашему виджету, не забыв попутно прикрутить ему понятную иконку на включённое и отключённое состояние.
Дело сделано - теперь можно быстро переключать режим аудиокарты на цифровой выход и обратно.
Комментариев нет:
Отправить комментарий