我遇到了一个非常恼人的问题,即耳机插孔在冷启动后可以正常工作。但在挂起或冷重启(重新启动计算机而不完全关闭)后,耳机插孔就会停止工作。
系统可以检测到耳机的插入和拔出时间,但耳机中却不再发出声音。
我只在 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