如何在Ubuntu中设置默认音频输出设备?

每次我开机,我都必须将音频输出设备切换到我的“Line Out”耳机,因为不知何故我的麦克风默认为扬声器。
请看这个屏幕截图:

See this screenshot


我在Ubuntu 20上使用这个解决方案 => https://askubuntu.com/a/908534/292232 - Kevin Robatel
至少你在下拉列表显示时完成了截图 - 这比我在Ubuntu 20.04上能做的更多... - Trunk
7在Ubuntu上,音频问题真是糟糕透顶。都已经2021年了,可靠地切换USB、线入、外部音频卡等等仍然是一场噩梦。 - datUser
10个回答

19.10的简单解决方法对我有效:
我无法在Ubuntu 19.10上实现@singrium提出的解决方案。在/etc/pulse/default.pa中使用设备编号可以工作,但是当我连接我的耳机设备时,设备编号会发生变化,导致一些功能停止工作。在/etc/pulse/default.pa中使用设备名称无效。
我找到的简单解决方法是将pactl set default sink命令添加到启动应用程序中。
1. 运行:pactl list short sinks 2. 记下您想要用作默认的设备名称 3. 尝试运行:pactl set-default-sink <Your_Device_Name>
这应该可以正常工作,不会出现错误消息。 4. 打开"启动应用程序"(应该预装在Ubuntu上) 5. 点击"添加" 6. 给您的启动项命名 7. 将上述命令复制到命令字段中:
pactl set-default-sink 'Your-Device-Name' 8. 点击"添加"。
你现在可以开始了。每次启动时,您的默认音频设备将被设置并保持不变。如果您想更改默认设备,只需在启动应用程序命令中编辑设备名称即可。

经过一个小时的尝试,这是唯一对我有效的方法,稍作修改以添加10秒的延迟:/bin/bash -c "sleep 10 && pactl set-default-sink 'alsa_output.pci-0000_07_00.1.hdmi-stereo-extra2'"。 - dez93_2000
2将此答案标记为新解决方案。这种方法更简单,不涉及编辑或删除配置文件,并且我注意到一些用户提到之前标记的答案会导致系统出现问题。 - tiddlesticks
3设备名称是哪个值? - fIwJlxSzApHEZIl
2假设您希望将音频输出设置为HDMI(例如用于电视),而您的操作系统却选择了其他设备(如游戏耳机),以下是一个一行命令放在启动应用程序中(包括适当的延迟):/usr/bin/pactl set-default-sink $(/usr/bin/pactl list short sinks|/usr/bin/gawk -F'\\s+' '$2 ~ /^.*[Hh][Dd][Mm][Ii].*$/ { print $2 }') - zpangwin
由于某种原因,尽管从终端执行的命令运行良好,但作为启动应用程序命令时却无效。我尝试了答案中的手动变体和@zpangwin提出的自动化解决方案(添加了一个延迟命令)。但在重新启动后似乎没有任何效果。 - kleinfreund
1这个解决方案帮助了我一部分。我必须运行pacmd list-cards来确定设备名称和配置文件,然后我创建了一个可执行的bash脚本,包含以下命令:pacmd set-card-profile <device_name> output:<profile>,然后是pactl set-default-sink <device>.<profile> - James
ubuntu 18.04.05上进行了测试,运行良好。 - SAYE
在另一个线程上查看,作为替代方案,将命令粘贴到您的.bashrc文件中,这样可以正常工作。 - malko
@kleinfreund: @zpangwin的命令应该这样包装:/bin/bash -c "sleep 10 && pactl set-default-sink $(/usr/bin/pactl list short sinks|/usr/bin/gawk -F'\\s+' '$2 ~ /^.*[Hh][Dd][Mm][Ii].*$/ { print $2 }')",需要安装sudo apt install gawk。@zpangwin如果可能的话,最好也有一个使用grep的版本。另外,如果你知道你的pactl list short sinks卡是"hdmi"或"HDMI",那么用户可以简化那部分为[hdmi] - dez93_2000
如何使用输入设备进行此操作? - Miad Abdi
2不使用gawk:/usr/bin/pactl set-default-sink $(/usr/bin/pactl list short sinks | grep -i hdmi | cut -f2) - Vinicius
当我运行pactl list short sinks时,我得到了错误信息连接失败:连接被拒绝。pa_context_connect() 失败:连接被拒绝。对此有什么建议吗? - doraemon
@fIwJlxSzApHEZIl 第一列是某种ID,第二列是名称。您还可以通过打开声音设置并执行第3步的代码来检查是否选择了正确的设备。您应该能看到所选输出设备的变化。 - Christopher
有没有办法设置第一选择、第二选择等等?我有一个蓝牙耳机,如果它开启/连接,我希望它成为输出设备。如果没有连接,那么我希望笔记本电脑的内置扬声器成为输出设备。目前,如果耳机关闭,它会选择我的底座音频设备,而底座上没有连接扬声器。所以每次我关闭耳机时,都必须手动将输出设备从底座切换到笔记本电脑扬声器,这很烦人。 - JoeMjr2
我刚刚添加了一个编辑,以帮助未来的人们,但请确保在设备名称周围加上小引号。在终端中进行测试时可以不使用引号运行,但是将同样的命令添加到启动应用程序时,没有引号的命令将无法正常工作。pactl set-default-sink 'alsa_output.pci-0000_00_1f.3.analog-surround-71' - Mark Han
只有在命令执行之前添加一些延迟后,我的机器才能正常工作。具体解释请参考这里:https://askubuntu.com/questions/708012/startup-applications-not-working - nivpeled
对我来说不起作用。我的问题是,当我把耳机插入插孔然后拔出时,它仍然会回到错误的音频输出(我想是我的外部显示器)。 - CPBL
这个没有列出一个用于线路输出的接口。 - Gamebuster19901
您还可以根据https://unix.stackexchange.com/a/316503的建议,将该命令添加为cron的@reboot任务。 - opyate
这个解决方案对我在Ubuntu 22.04.1上起作用了。谢谢! - undefined

编辑(2020年5月3日):
看起来@phanky5找到了一种更简单的解决方案。在尝试本方法之前,请先查看它。

这里有一个很好的解释教程,可以设置默认的音频输入/输出。

首先:使用以下方法列出音频输出设备

pactl list short sinks

示例输出:

43  alsa_output.pci-0000_00_1b.0.analog-stereo  PipeWire    s32le 2ch 48000Hz   IDLE
1076    alsa_output.usb-Logitech_Logitech_Wireless_Headset_4473D63ED97A-00.analog-stereo    PipeWire    s16le 2ch 48000Hz   IDLE

第二步:要设置默认输出设备,请运行以下命令
pactl set-default-sink <'output_device_name'>

示例:pactl set-default-sink 'alsa_output.pci-0000_00_1f.3.analog-stereo'
如果您经常切换音频输出设备,您可以使用fzf在命令行上选择一个,并将其设置为默认设备。
pactl set-default-sink $(pactl list short sinks | cut -f2 | fzf)

要将水槽永久设为默认选项,请按照以下步骤操作:
首先,使用以下命令打开文件/etc/pulse/default.pa
sudo -H gedit /etc/pulse/default.pa

然后滚动到文件底部,那里有两行以set-开头的注释行。
现在,取消对这些行的注释,并将单词input和output替换为您想要成为默认值的接收器(用于输出)/源(用于输入)的编号。
示例(设置默认输入和输出):
### Make some devices default
set-default-sink 3
set-default-source 3

附注:正如与Bim在评论中讨论的那样,也可以将输入/输出名称放在/etc/pulse/default.pa而不是输入/输出编号。

示例:

### Make some devices default
set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
set-default-source alsa_output.pci-0000_00_1f.3.analog-stereo.monitor

完成这些操作后,保存并退出。然后,通过运行rm -r ~/.config/pulse删除~/.config/pulse目录,然后重新启动系统。系统重新启动后,适当的设备应该已经设置为默认设备。
编辑:
正如ahmorris在他的answer中提到的,有些人必须在文件/etc/pulse/default.pa中将这行代码load-module module-switch-on-connect注释掉,改为# load-module module-switch-on-connect,以使更改持久化。

我不知道发生了什么事情,但是在按照这个方法之后,我的Ubuntu 18完全无法启动:卡在了加载屏幕。我使用了恢复模式和控制台,再次注释掉了设置行,恢复了被删除的pulse文件夹,然后它就正常工作了。我唯一做的与以往不同的是,我只指定了输出(sink),而没有指定输入(source),并且我将其注释掉了。有关于可能发生了什么的任何想法吗? - Christopher.L
我现在看到的是:当我尝试使用pactl set-default-sink 'alsa_output.pci-0000_00_1b.0.hdmi-stereo'时,它显示为“失败:没有这样的实体”,这个命令是我从pactl list short sinks的输出中复制过来的。我也尝试过不带引号的方式。 - Christopher.L
@Christopher.L 可能你设置的输出不存在或拼写错误,请查看此链接获取更多详细信息。 - singrium

为了使Singrium的答案生效,我不得不通过在我的`/etc/pulse/default.pa`中添加`#`来注释掉这行代码。
# load-module module-switch-on-connect

否则,启动时我的音频设备会被设置为默认设备,但一旦检测到USB集线器,它就会切换到USB集线器。这样可以防止切换,并确保您选择的音频设备作为输出设备。

3这也是我的问题!我有一个通过集线器连接的无线耳机,它在启动后被检测到时已经设置了默认设备,谢谢您的解决方法。 - SidOfc
1我需要一个带有HDMI输出/显示功能的设备,同时也能作为音频设备使用。 - Bim
3如果你只是想在每次启动时阻止USB耳机窃取你的音频,那么这个答案就足够了。 - Alexander Revo
1为什么Ubuntu/Debian不能像Windows一样,将音频发送到所有可用输出设备呢? - Rodrigo

这在Ubuntu 20.04上对我起作用。
就像之前所说的,你必须列出音频输出设备:
pactl list short sinks

然后,您可以将所选设备添加到/etc/pulse/client.conf文件中,就像这样:
default-sink = alsa_output.pci-0000_00_1f.3.analog-stereo

注意:你必须从原始行中移除“!”。 在Ubuntu 20.10中,你必须从原始行中移除“;”。


2最近不得不修复我的脉冲设置,因为从19.10升级到20.04后出现了各种奇怪的音频问题。我决定删除~/.config/pulse,结果留下了一个问题,我的耳机变成了默认音频设备。如果是这种情况,这个答案:https://askubuntu.com/a/1115641/177314 也非常有效,不需要太多技术知识 :) - SidOfc

如果你喜欢使用图形界面,可以使用PulseAudio音量控制来完成这个操作。

打开PulseAudio音量控制后,选择配置(最后一个选项卡),然后从配置文件下拉菜单中选择要使用的输出和/或输入。 它应该看起来类似于这样

PulseAudio音量控制还可以用于调整当前正在使用的每个输入、输出、系统声音和应用程序的音量级别。

这里有一篇来自Linuxhint的文章,提供了关于PulseAudio的更多信息。


谢谢这个解决方案。我开始后悔升级到18.04.1了。PulseAudio音量控制也消失了 >:( - Alfonso Nishikawa
1我应该提一下,我正在使用Ubuntu Studio,它有一些不同之处。尽管在升级后我注意到Pulse消失了。18.04使用ALSA,但是可以安装Pulse。也许这个(上面的相同帖子)会有所帮助:https://linuxhint.com/pulse_audio_sounds_ubuntu/ - Starbuck
1是的,我做了那个,而且成功了 :) 谢谢 :) - Alfonso Nishikawa
对我来说,这个电视(hdmi)输出不会记住,如果退出登录或断开/重新连接,它就会回到扬声器。 - Christopher.L
为什么Ubuntu/Debian不能像Windows一样将音频发送到所有可用的输出设备呢? - Rodrigo
这绝对应该是被接受的答案!谢谢! - Daniel Ching

您可以通过使用pulseaudio标准配置文件来实现以下操作:
- 禁用自动切换到新插入的设备 - 设置默认设备
步骤:
1. 列出您的设备:
pactl list short sinks

复制您想要设置为默认设备的名称。名称通常很长,类似于alsa_output.pci-0000_00_1f.3.analog-stereo

现在让我们来配置pulseaudio。使用以下命令打开配置文件:

sudo nano /etc/pulse/default.pa

禁用pulseaudio自动切换到最新插入的设备。为此,请确保以下行以#开头:
#ifexists module-switch-on-connect.so
#load-module module-switch-on-connect
#.endif

现在请滚动到文件底部,并将您的设备设置为默认设备。
set-default-sink '<your-device-name-here>'

保存文件并退出。
使用pulseaudio -k重新启动pulseaudio。
有时需要删除整个~/.config/pulse文件夹。

在我的情况下,对于我的Bionic/18.04.3系统,/etc/pulse/default.pa中的更改并没有起作用(1)!
pactl list short sink
…
2   alsa_output.pci-0000_00_1f.3.analog-stereo …

pactl set-default-sink 2 
# or 
pactl set-default-sink 'alsa_output.pci-0000_00_1f.3.analog-stereo'

在命令行界面上运行良好,

根据如何在登录后自动启动脚本的文章,在我的~/.profile文件中进行更改,添加以下行:

pactl set-default-sink 'alsa_output.pci-0000_00_1f.3.analog-stereo'

并且在重启后它能正常工作。

(1) 在所有情况下,我在/var/log/syslog中都有一些错误,包括数字或全部文本:
[pulseaudio] main.c: Sink output 2 不存在。
[pulseaudio] main.c: Sink output 'alsa_output.pci-0000_00_1f.3.analog-stereo' 不存在。


Ubuntu已经在重新启动时存储了上次选择的音频设备。只有USB对接站或HDMI设备等可能会破坏这种机制,因为它们在引导过程中被检测为上次连接的设备,而Ubuntu认为它们刚刚连接上。
因此,在许多情况下,最简单的解决方案是注释掉连接时的自动切换(load-module module-switch-on-connect),如https://askubuntu.com/a/1115641/39966中所述。
大多数情况下可能不需要使用set-default-sink / -source命令或配置。
归根结底,这是/ 是一个 Ubuntu中的错误, 对于HDMI设备来说,至少在最新版本中已经解决了。对于USB设备还存在另一个未解决的错误
另请参阅{{link1:在gnome-control-center中选择的声音输出设备在重新启动后无法保留}}。

这个对我有用。

你可以忽略关于需要通过命令行进行更改的部分,修复音频设备重置的部分是编辑/etc/pulse/default.pa文件。将load-module module-stream-restore一行更改为load-module module-stream-restore restore_device=false,然后使用pulseaudio -k重新启动脉冲音频。

现在你应该能够通过设置>声音来更新音频输出和输入,并且它们应该在注销/登录和系统重启后保持不变。


我曾经遇到过后面板和网络摄像头麦克风的问题。问题是每次我打开电脑时,网络摄像头的麦克风都成为了默认选项,而不是我想要使用的后面板麦克风。所以我安装了pavucontrol,并在“配置”选项卡中将其关闭,真是让人抓狂。
sudo apt install pavucontrol

然后运行:
pavucontrol

enter image description here


最好和最简单的解决方案!!! - Fadi Bakoura
Ubuntu 22的最简解决方案 - Nidhin David