求助:通过SSH远程控制Audacious时GUI正常但音频输出失败(需使用桌面本地音频系统)
问题描述
我想通过SSH在笔记本上远程控制桌面PC的Audacious——让播放器的GUI显示在我的笔记本上,但音频输出使用桌面本地的音响系统(说白了就是只远程操控,声音还是从桌面发出来)。
我用ssh -X打开远程终端后启动Audacious,GUI能正常弹出来,但无论选ALSA还是PulseAudio都没法播放,会输出一堆错误日志:
$ audacious
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib control.c:1528:(snd_ctl_open_noupdate) Invalid CTL default
...
ERROR util.cc:269 [audgui_simple_message]: ALSA error: snd_pcm_open failed: No such file or directory.
但我本地登录桌面PC的时候,Audacious是完全正常的,有没有大佬能帮忙解决这个问题?
解决方案
核心原因
问题出在SSH X11转发的环境变量上:当你用ssh -X连接时,笔记本(客户端)的PulseAudio/ALSA相关环境变量会被同步到远程会话中,导致Audacious错误地尝试使用笔记本的音频设备,而不是桌面PC本地的音频系统,所以才会出现“找不到设备”的报错。
快速解决方法
最简单的方式就是在远程会话里清空这些干扰性的环境变量,让Audacious自动使用桌面本地的音频配置:
- 保持
ssh -X的连接状态; - 在远程终端中执行以下命令:
unset PULSE_SERVER PULSE_COOKIE - 接着启动Audacious:
audacious
这样操作后,Audacious的GUI依然会显示在你的笔记本上,但音频会通过桌面PC本地的音响输出,完美符合你的需求。
备选方案(指定ALSA设备)
如果上面的方法没生效,你可以手动指定Audacious使用桌面PC的ALSA设备:
- 先在桌面PC本地登录时,执行
aplay -l命令查看可用的音频设备,找到类似这样的条目:
这里的card 0: PCH [HDA Intel PCH], device 0: ALC283 Analog [ALC283 Analog]hw:0,0就是设备标识(card编号+device编号); - 在远程会话中,用以下命令启动Audacious:
记得把audacious -o alsa -d hw:0,0hw:0,0换成你实际查到的设备标识。
PulseAudio专属方案
如果你的桌面PC使用PulseAudio,还可以通过指定本地socket的方式连接:
- 在桌面PC本地登录时,执行
echo $XDG_RUNTIME_DIR记下输出路径(通常是/run/user/你的UID,比如/run/user/1000); - 在远程会话中设置环境变量:
export PULSE_SERVER=unix:$XDG_RUNTIME_DIR/pulse/native - 再启动Audacious即可。
备注:内容来源于stack exchange,提问作者juzzlin

