Я слежуэтот вопросдля установки уровней громкости из командной строки. Мне нужно иметь возможность устанавливать громкость из сеанса tmux (на самом деле из процесса узла, запущенного в tmux).
Когда я запускаю amixer -D pulse sset Master 50%
напрямую в сеансе ssh, все работает нормально.
$ amixer -D pulse sset Master 50%
Simple mixer control 'Master',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 65536
Mono:
Front Left: Playback 26214 [50%] [on]
Front Right: Playback 26214 [50%] [on]
Если я открою tmux, а затем запущу ту же команду, произойдет сбой:
$ tmux
...
$ amixer -D pulse sset Master 50%
ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused
amixer: Mixer attach pulse error: Connection refused
В node я просто использую child_process.spawn
функцию, которая дает тот же результат, что и запуск из tmux, поэтому предполагаю, что они связаны.
Что дает?
решение1
Любопытно, что это произошло потому, что мой сеанс tmux был запущен из общесистемного файла службы и не имел переменных среды, настроенных для взаимодействия со службой PulseAudio на уровне пользователя.
Решается это просто добавлением следующей строки к моей команде amixer:
PULSE_SERVER=unix:/run/user/1000/pulse/native
вот так:
$ PULSE_SERVER=unix:/run/user/1000/pulse/native amixer -D pulse sset Master 50%
Может /run/user/1000
быть по-другому, вы можете определить это, работая
$ echo $XDG_RUNTIME_DIR
В сеансе войдите в систему как пользователь с сеансом PulseAudio, который вы хотели бы использовать.