如何在不拔出耳机的情况下在耳机和扬声器之间切换


23

当我插入耳机时,音频输出设备会从扬声器切换到耳机。

与其一直插拔耳机,不如将其最终插在我的线/插孔上,我只想使用软件开关即可。

当我打开“声音设置”并从“耳机->内置音频”切换到“线路输出->内置音频”时,扬声器或耳机没有声音。

我打开alsamixer来查看插入/拔出耳机时会发生什么。

耳机在: 耳机在

耳机输出: 耳机出

在插入耳机的情况下,我手动更改了所有设置,以使其与耳机未打开但仍未从扬声器获得任何声音的设置相匹配。

附带说明,通过“声音设置”更改音频输出设备会对alsamixer进行相同的更改。


1
据我所知,这是耳机插孔内的硬件开关,不允许进行切换。按下开关后,扬声器将被禁用。您是否考虑过使用蓝牙耳机?
Terrance

感谢@Terrance,我感觉可能是类似的东西,我什至检查BIOS看看是否有东西。我为他们会为应该是软件问题的硬件解决方案而感到惊讶。
user276318 2015年

1
请记住,声卡可能无法输出多个设备-某些声卡在硬件级别进行了硬编码,以在建立耳机连接时关闭扬声器的输出,并且这不能被覆盖...
Thomas Ward

@Terrance我开始了赏金计划,也许您想进一步研究并撰写答案?
甜点

@dessert 在下面看到GoodGuyNick的回答 -它可能无法在所有硬件上运行,并且根据我的经验,它不会分离输出(这将允许您同时将programA的音频发送到扬声器,而programB的音频发送到耳机),但是如果只需禁用自动切换功能,这是首先要尝试的操作。
quixotic

Answers:


9

插入扬声器和耳机并即时切换软件

根据设计,当插入耳机时,Pulseaudio会自动关闭“线路输出”,而是使用“耳机”滑块。您可以在alsamixer中观察到此行为。我们想要的是让“耳机”和“线路输出”滑块分别同时工作。如果要重新映射Realtek的插孔,例如耳机的后方绿色和扬声器的蓝色,则这非常有用(借助于alsa-tools的hdajackretask)。

为此,您应该直接编辑Pulseaudio混音器的配置。

1.我们告诉pulseaudio总是插上耳机。

编辑:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-lineout.conf

找:

[Jack Headphone]
state.plugged = no
state.unplugged = unknown

更改noyes

如果您使用的是计算机机箱正面的插孔,请更换[Jack Front Headphone]

2.默认情况下,Line Out的音量仅由Master控制,而不受Line Out滑块本身控制。

我们想将Line Out与Master合并。将此片段添加到文件末尾:

[Element Line Out]
switch = mute
volume = merge

3.使用耳机时,我们需要完全切断Line Out。

编辑:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-headphones.conf

将此片段添加到文件末尾:

[Element Line Out]
switch = off
volume = off

在某些系统上,您可能还需要通过添加以下代码段来禁用Front:

[Element Front]
switch = off
volume = off

4.与Pulseaudio一样,插入耳机时,Alsa本身也会切断扬声器。

打开alsamixer:alsamixer -c0alsamixer -c1

使用/ 进入自动静音模式。使用禁用自动静音模式。使用来关闭alsamixer Esc

使用以下方法保存更改: alsactl store

5.重新启动Pulseaudio

$ pulseaudio -k
$ pulseaudio --start

现在,您在pulseaudio的同一接收器上有两个单独的端口。它们彼此静音,因此您可以切换到耳机,这将使Line Out静音,反之亦然。要在端口之间切换,可以使用Gnome或Plasma混音器,或安装适当的桌面扩展。


资源


2
您不应该直接在中编辑文件/usr/share。如果Pulseaudio收到更新(例如,修复错误),您的更改将被清除。通常,有一种机制可以提供/etc类似文件或类似文件的替代文件,但是我不特别了解Pulseaudio。
罗比·巴萨克

@RobieBasak该信息的来源是Arch Linux网站。不幸的是我不是Arch Linux用户,所以我不能在您的网站上重新发表您的评论。希望在这里闲逛的Arch Linux用户之一阅读您的评论并将其重新发布到这里。
WinEunuuchs2Unix

1
@RobieBasak,嗯,一个人可以编写一个包装脚本来执行此操作,然后在登录后调用它
Robert Riedl

1
不幸的是,它对我没有用,但是谢谢您的回答!
甜点

1
@dessert我的荣幸。研究这个领域很有趣。希望您能找到想要的东西。
WinEunuuchs2Unix

9

为了可以在扬声器和耳机之间切换,请按照下列步骤操作:

  1. 运行alsamixer
  2. 如有必要,请使用选择声卡F6
  3. 用右箭头导航到“自动静音”
  4. 使用向下箭头禁用它
  5. Esc退出。

或者,您可以使用一个命令执行所有这些步骤:

  1. 打开终端
  2. amixer -c 1 set 'Auto-Mute Mode' Disabled

现在,您可以在PulseAudio音量控制中在扬声器和耳机之间切换。

应用这些说明后,您可以使用“ 声音切换器指示器”在耳机和扬声器之间快速切换,从而使生活更轻松。


2
我认为这不适用于所有硬件组合-某些系统(例如我的系统)似乎确实使用了各种硬件开关,这并非未知。例如,如果你插入耳机到吉他放大器,该放大器的扬声器通常会被关闭-并没有在这些设备没有电脑....
查尔斯·格林

这在Realtek ALC887-VD上为我工作
Paul Praet

谢谢。它为我工作。有什么方法可以通过bash脚本来完成它吗?
ka3ak

1
@ ka3ak我已经为您更新了答案
GoodGuyNick

4

hdajackretask是一种工具,可将插孔的功能重新分配给不同的输入,输出或禁用-例如,将Mic插孔转换为额外的耳机,或者为什么不使它们同时输出并连接到环绕声接收器呢?

安装alsa-tools-gui

sudo apt-get update
sudo apt-get install alsa-tools-gui

hdajackretask然后运行以覆盖您的千斤顶之一:

  1. 选择编解码器
  2. 单击该引脚的“替代”复选框,然后选择新的所需功能
  3. 单击“立即应用”。

    注:如果耳机插孔具有用于重新路由音频的内置硬件开关,则您是SOL(对不起)。但是,如果操作系统检测到何时在耳机插孔中插入了线路,则很可能不会机械切换音频。

我发现同时覆盖耳机和扬声器效果最好。


hdajackretask屏幕快照,将耳机切换为扬声器:

在此处输入图片说明


单击“立即应用”后,将创建一个shell脚本来进行更改并提示执行超级用户密码。该脚本也保存在/tmp其中,可以将其复制并随后在命令行中使用sudo执行。

在此处输入图片说明

命令行执行

正如前面提到的,hdajackretask创建一个脚本,script.sh/tmp类似于/tmp/hda-jack-retask-QW1EEZ/为你的愿望插孔功能:

#!/bin/sh
echo "0x12 0x90a60140" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x14 0x90170150" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x17 0x40000000" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x18 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x19 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1a 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1b 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1d 0x40700001" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1e 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x21 0x40f000f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo 1 | tee /sys/class/sound/hwC0D0/reconfig 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log


将此脚本复制到系统上的其他位置(/ tmp除外)

cd /tmp/hda-jack-retask-QW1EEZ
cp script.sh ~username/speaker.sh

然后编辑Speaker.sh

cd ~username
nano speaker.sh

killall pulseaudio &在文件顶部添加该行。这是必要的,因为在运行时无法更改插孔功能pulseaudio。默认情况下pulseaudio会重生。另外,将errors.log文件的路径更改为/tmp您喜欢的任何位置:

#!/bin/sh
killall pulseaudio &
echo "0x12 0x90a60140" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x14 0x90170150" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x17 0x40000000" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x18 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x19 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1a 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1b 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1d 0x40700001" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1e 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x21 0x40f000f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo 1 | tee /sys/class/sound/hwC0D0/reconfig 2>>/tmp/errors.log


要运行脚本:

sudo ./speaker.sh



alsa-tools-1.1.5 / hdajackretask / README文档中:

hdajackretask的文档

大多数HDA Intel声卡在某种程度上是可重新分配任务的,即可以用于多种用途。此工具是一个GUI,可让您轻松重新分配插孔的任务-例如,将Mic插孔转换为额外的耳机,或者为什么不使它们的两个线路都输出并连接到您的环绕声接收器呢?

快速开始

从命令行启动应用程序“ hdajackretask”。在顶部栏中选择一个编解码器;有些人只有一个-如果您有多个,则一个是“主要”一个,其余的可能是HDMI编解码器。

所有插孔(和其他输入/输出)都显示在“引脚配置”下。要覆盖您的一个插孔,请单击该引脚的“覆盖”复选框,然后选择所需的功能。注意:如果选择“ Line out(back)”替代,则还应具有“ Line out(front)”替代。“线性输出(中心/ LFE)”替代仅适用于前两个替代,依此类推。

您可以通过单击“立即申请”来尝试新配置。要使新配置默认启动,请单击“安装启动替代”。进行这些操作都需要root特权,因此可能会要求您输入密码。

快速结束

你搞砸了吗 单击“删除启动替代”按钮,然后在该过程完成后关闭计算机,请稍等片刻,然后重新打开。您现在应该回到起点。

奏效了吗?

如果是这样,那就开心一点,分享快乐,做点好事!

如果没有,请尝试以下操作:

  • 进入alsamixer,查看是否有新的音量控件,并查看它们是否未静音并设置为合理的值。

  • 有时,驱动程序不会关闭未连接的引脚(如果未连接,为什么要担心?)。您可以通过将计算机完全关闭一会儿来解决此问题。

  • 请参阅下面的“模型=自动”选项

如果这样做没有帮助,则很可能遇到驱动程序或硬件限制。您可能会遇到驱动程序错误(也许以前没有人测试过四副耳机!)。如果您愿意,请随时在alsa-devel邮件列表中报告这些消息:但是,由于缺乏人力,很有可能会以非常低的优先级来处理这些问题(对于标准配置,开箱即用的声音是比支持奇怪的配置更重要)。但是,如果您是内核黑客,并且想出了一个可以解决您的问题而又不会搞砸其他任何东西的补丁,那么很有可能将其合并。

如果您怀疑问题出在此GUI应用程序而不是内核驱动程序,请随时给我写一封电子邮件(如果需要,请提供补丁!)。如果是这样,请写信给diwic@ubuntu.com。

选件

  • 显示未连接的引脚您的BIOS负责设置编解码器上哪些引脚实际连接到某物,哪些引脚没有连接。有时BIOS有问题,并且不会显示所有插孔。如果您的插孔中有BIOS提示您没有插孔,则可以尝试启用随机插针,然后查看是否起作用。

  • Set Model = auto某些编解码器,特别是较旧的编解码器以及3.8和更低版本的内核,经过硬编码以使用特定的模型,因此不会在意您的替代。在许多情况下,并且在一个相当新的内核下,自动解析器现在也适用于这些编解码器。您可以通过选中此框来强制使用自动解析器。但是,在某些情况下,存在显式模型是有原因的,如果是这样,则会陷入困境。

  • 高级替代仅适用于专家。它使您可以分别选择每个配置字段,而不仅仅是几个有意义的预定义值。请注意,此处的大多数组合都以一种或另一种方式无效,因此,除非您已阅读并理解了HD Audio规范的“ Configuration Default”(配置默认值)部分,否则您应该不会对此感到困惑。(在撰写本文时,可在以下位置找到:http//www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification。 pdf

  • 解析器提示这使您可以向驱动程序发送特殊的“提示”,从而导致解析行为有所不同。除非已阅读驱动程序文档,否则将它们保留为“默认”设置。(在撰写本文时,可在此处获得:https : //www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt-参见“提示字符串”部分。)


1
不幸的是,它对我没有用,但是谢谢您的回答!由于您的服务非常接近我的期望,并且似乎提供了实现目标的最佳方法(如果可能),您将获得赏金–恭喜!:)
甜点

3

在KDE中,可以这样做:

系统设置->多媒体->音频和视频设置->音频硬件设置选项卡>选择适当的声卡>在连接器下,您将看到耳机和扬声器选项。

系统设置


3
我没有使用kde,但是Unity具有类似的“声音设置”。将音频输出设备从耳机更改为扬声器只会使耳机静音。这似乎是一个硬件开关,当插入耳机。
user276318

1

Gnome-Shell扩展音频输出切换器

最简单的方法是安装音频输出切换器扩展

或者您可以直接使用git克隆:

git clone https://github.com/adaxi/audio-output-switcher.git ~/.local/share/gnome-shell/extensions/audio-output-switcher@anduchs

屏幕截图

此扩展名在状态菜单中添加了一个小条目,该菜单显示了当前选择的脉冲音频输出设备。单击该按钮将打开一个子菜单,其中包含所有可用的输出设备,让您选择要使用的设备。


不幸的是,它对我没有用,但是谢谢您的回答!
甜点

0

如果您不介意添加PPA,则可以使用Sound Switcher Indicator

这将在系统托盘中提供一个指示器,您可以单击该指示器以更改输入或输出音频源。您可以在http://yktoo.com/en/software/indicator-sound-switcher上了解更多信息。

终端方式

要安装,请使用终端输入以下内容。

sudo add-apt-repository ppa:yktooo/ppa
sudo apt-get update
sudo apt-get install indicator-sound-switcher

GUI方法

要使用GUI安装,请按照下列步骤操作:

  1. 从Unity Dash 启动软件和更新应用程序。

  2. 在“其他软件”选项卡上单击。然后添加以下新资源:

    deb http://ppa.launchpad.net/yktooo/ppa/ubuntu vivid main
    

    (切记用Ubuntu版本替换“ vivid”。受支持的版本在http://ppa.launchpad.net/yktooo/ppa/ubuntu/dists/中列出)。

  3. 从Unity Dash 启动Ubuntu软件中心

  4. 搜索“声音输入/输出选择器指示器”,然后安装。

注意:如果您的系统在耳机插孔内有硬件开关(如Terrance上面建议的那样),则此解决方案将不起作用。


我实际上已经安装了这个。如您的注释所示,似乎有一个硬件开关。
user276318 2015年

0

我为这个问题制作了这个脚本:

https://github.com/biplobsd/Fixing-front-panel-audio

只需在终端中运行存储库的README文件中给出的命令即可。这将下载并运行脚本。

这些命令是:

git clone https://github.com/biplobsd/Fixing-front-panel-audio.git
cd Fixing-front-panel-audio
chmod +x Fixing-front-panel-audio.sh
./Fixing-front-panel-audio.sh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.