挂起/重启后耳机插孔停止工作

挂起/重启后耳机插孔停止工作

我遇到了一个非常恼人的问题,即耳机插孔在冷启动后可以正常工作。但在挂起或冷重启(重新启动计算机而不完全关闭)后,耳机插孔就会停止工作。

系统可以检测到耳机的插入和拔出时间,但耳机中却不再发出声音。

我只在 XMG A305 笔记本电脑的 Ubuntu 14.04 下遇到过这个问题(在我的 Windows 分区下它运行良好)。这个问题似乎与我的声卡使用的驱动程序(卡:HDA Intel PCH,芯片:VIA VT1802)或不同驱动程序之间的交互有关。

此外,还有其他几个人在其他机器上也遇到过这种情况: Clevo 笔记本电脑的错误报告

答案1

经过一段时间的搜索,我找到了一个对我来说很有效的解决方案,并且可能对你也有帮助:

代码主要取自这里

获取代码

有一个 Python 脚本可以重新激活耳机插孔。此代码取自GitHub 上的 ektor5。您需要下载该脚本,将其放在系统可以找到的地方并使其可执行。您可以使用以下行完成所有操作:

sudo wget https://raw.githubusercontent.com/ektor5/init-headphone/master/init-headphone -O /usr/local/sbin/init-headphone && sudo chmod +x /usr/local/sbin/init-headphone

安装依赖项

init-headphone脚本需要依赖项,可以通过以下方式安装:

sudo apt-get install python-smbus

添加 grub 标志

此外,您的内核必须在启用附加标志的情况下启动。您可以通过编辑文件“/etc/default/grub”来执行此操作。修改此行

GRUB_CMDLINE_LINUX=""

对此

GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"

在那次跑步之后

sudo update-grub

启动时加载模块

此外,脚本需要加载模块。即“i2c_dev”和“i2c_i801”。这些可以在运行时加载

modprobe i2c_dev
modprobe i2c_i801

您现在可以通过运行“sudo init-headphone”来测试它是否有效。

要在启动时自动加载模块,请将以下行添加到“/etc/modules”:

i2c_dev
i2c_i801

创建启动脚本

最后,我们希望脚本在计算机重新启动或从挂起状态恢复时自动运行。为此,请将以下脚本放入“/etc/pm/sleep.d/”中。

sudo gedit /etc/pm/sleep.d/init-headphone

添加以下行

#!/bin/sh

if [ ! -x /usr/local/sbin/init-headphone ]; then
    exit 0
fi

case $1 in
     resume|thaw)
        /usr/local/sbin/init-headphone
       ;;
esac

不要忘记使文件可执行

sudo chmod +x /etc/pm/sleep.d/init-headphone

我希望这会有所帮助,如果您有任何问题请告诉我。

坎德拉

答案2

最近在使用 Fedora 32 时遇到了同样的问题。@cbandera 提到的脚本效果很好。但是对于我的操作系统,自动化需要通过 systemd 来完成。

我创建了一个服务文件

sudo gedit /etc/systemd/system/init-headphone.service

并将以下内容放入文件中

[Unit]
Description=Initialize headphones upon resume
After=suspend.target hibernate.target hybrid-sleep.target suspsend-then-hibernate.target

[Service]
ExecStart=/usr/local/sbin/init-headphone

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

然后我启用了服务

sudo systemctl enable init-headphone

此后,一切正常。

答案3

您可以尝试检查音量控制面板,看看它是否只是重置为标准扬声器。如果是这样,您可以编写脚本来重新启动,或者手动将其设置回耳机。

答案4

添加到@cbandera 的优秀答案:对于使用systemd(例如 Ubuntu 15.04 或更高版本)的系统,启动脚本应该是/lib/systemd/system-sleep/init-headphone这样的:

#!/bin/sh

[ -x /usr/local/sbin/init-headphone ] || exit 0

[ "$1" = "post" ] && /usr/local/sbin/init-headphone

相关内容