Quintus 发表于 2016-10-14 21:53

X62 Linux 扬声器无声解决方法, Speaker no sound fix

本帖最后由 Quintus 于 2016-12-12 17:25 编辑

此法须要使用 alsa-tools 内的 hda-verb
在 Debian / Ubuntu, 可以用 sudo apt-get install alsa-tools 安装。
This fix requires the alsa command line tool: hda-verb
You could install the tool in Debian/Ubuntu by sudo apt-get install alas-tools.


方法如下:
Steps:

1.
新增 /etc/modprobe.d/snd-hda-intel.conf 以改变 Intel HDA 各 codec 之次序。
改变 ALC662 为首个 card, 即 /dev/snd/hwC0D0
Add a modprobe conf /etc/modprobe.d/snd-hda-intel.conf for telling snd_hda_intel to set the ALC662 card as the first one.
# -- X62 Intel HDA order ------options snd-hda-intel model=auto index=1,0
2.
在 /usr/local/bin/ 增加一个脚本 /usr/local/bin/x62-speaker-fix 以 hda-verb 指令设定 Realtek ALC662 之 GPIO 控制功放芯片PAM8403。
Add a script /usr/local/bin/x62-speaker-fix for changing the ALC662 GPIO to turn on the external amplifier PAM8403.
#!/bin/sh## -- X62 ALC662 GPIO fix ------(/usr/bin/hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01/usr/bin/hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIRECTION 0x01/usr/bin/hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x00) > /dev/null 2>&1
将之设为可执行
Make it executable.chmod a+x /usr/local/bin/x62-speaker-fix
3.
在 /etc/rc.local 加入命令在开机时设定 ALC662 的 GPIO。
Modify /etc/rc.local to include the script so that the ALC662 GPIO is set during boot up. # -- X62 ALC662 GPIO fix ------/usr/local/bin/x62-speaker-fix
4a.
适合用于 pm-utils
For pm-utils
在 /etc/pm/sleep.d 增加一个脚本 /etc/pm/sleep.d/80-x62-alsa
Add a resume script /etc/pm/sleep.d/80-x62-alsa to fix the GPIO when the machine resumes from suspend.
#!/bin/bashcase $1 in    thaw|resume)      echo "set ALC662 GPIO, 2 seconds after resume..."      sleep 2      # Set ALC662 GPIO      /usr/local/bin/x62-speaker-fix      ;;    *)echo "do nothing."      ;;esac
将之设为可执行
Make it executable.
chmod a+x /etc/pm/sleep.d/80-x62-alsa
4b.
适合用于 systemd
For systemd
在 /lib/systemd/system-sleep 增加一个脚本 /lib/systemd/system-sleep/x62-alsa
Add a resume script /lib/systemd/system-sleep/x62-alsa to fix the GPIO when the machine resumes from suspend.
#!/bin/sh
case $1 inpost)    sleep 2    # Set ALC662 GPIO    /usr/local/bin/x62-speaker-fix    ;;esac
将之设为可执行
Make it executable.chmod a+x /lib/systemd/system-sleep/x62-alsa
5.
再重新开机。重新开机后或许要以 alsamixer 取消扬声器静音。
After adding the scripts and configs, a reboot is needed. You may need to unmute the speaker by using alsamixer after reboot.


更新:
Update:
我发觉休眠后须要重新设定 ALC662 的 GPIO.
The GPIO has to be changed again after resume from suspend.

更新 2016-12-12:
Update 2016-12-12:
更新内文加入休眠后重设 GPIO 的脚本
Added scripts for changing GPIO after resume.
增加英文翻译
Added English translations.






wjytj 发表于 2016-10-14 22:03

谢谢,正好用到!!

Quintus 发表于 2016-10-14 22:04

更好的方法是将 hda-verb 的指令写进 kernel 的 alsa snd_hda_intel 驱动 (内的 patch_realtek.c)
这个待有时间我再研究。

Quintus 发表于 2016-10-14 22:08

wjytj 发表于 2016-10-14 22:03
谢谢,正好用到!!
此方法我用在 Debian sid 可行。请你试试,如果成功请报上 Linux 之版本。感谢。

zhangyongtao 发表于 2016-10-14 22:39

不错
刚好有个客户正需要 我发给他连接

wjlyl 发表于 2016-10-14 22:54

黑苹果可以不?

wjytj 发表于 2016-10-14 23:07

Quintus 发表于 2016-10-14 22:04
更好的方法是将 hda-verb 的指令写进 kernel 的 alsa snd_hda_intel 驱动 (内的 patch_realtek.c)
这个待 ...

这种方式应该更好,但一旦内核更新了,要重新编译。

Quintus 发表于 2016-10-14 23:14

wjlyl 发表于 2016-10-14 22:54
黑苹果可以不?

没有时间折腾黑苹果,我估计是有可能,例如用 https://github.com/Dolnor/EAPD-Codec-Commander.
只好等各黑苹果高手出招了。

Quintus 发表于 2016-10-14 23:19

wjytj 发表于 2016-10-14 23:07
这种方式应该更好,但一旦内核更新了,要重新编译。

我是打算将修改提交给 ALSA 项目好让放进以后的 Linux 內核。

wjytj 发表于 2016-10-15 06:15

Quintus 发表于 2016-10-14 23:19
我是打算将修改提交给 ALSA 项目好让放进以后的 Linux 內核。

碰到高手了!厉害!

wolforchina 发表于 2016-10-15 06:28

Quintus 发表于 2016-10-14 21:53
此法须要使用 alsa-tools 内的 hda-verb
在 Debian / Ubuntu, 可以用 sudo apt-get install alsa-tools 安 ...

楼主厉害,在CentOS下试试。

wjytj 发表于 2016-10-15 11:18

Quintus 发表于 2016-10-14 22:08
此方法我用在 Debian sid 可行。请你试试,如果成功请报上 Linux 之版本。感谢。
实验成功,debian/testing现在外放有声音了,之前只有耳机有声。谢谢楼主!

期待直接编入内核的版本:)

xkillerz 发表于 2016-10-15 15:47

添加了配置文件,也修改了rc.local。不过重启后还是没声音,你说的“重新开机后或许要以 alsamixer 取消扬声器静音”该如何操作

xkillerz 发表于 2016-10-15 15:48

wjytj 发表于 2016-10-15 11:18
实验成功,debian/testing现在外放有声音了,之前只有耳机有声。谢谢楼主!

期待直接编入内核的版本

添加了配置文件,也修改了rc.local。不过重启后还是没声音,请问“重新开机后或许要以 alsamixer 取消扬声器静音”该如何操作

Quintus 发表于 2016-10-15 17:47

本帖最后由 Quintus 于 2016-10-15 18:43 编辑

xkillerz 发表于 2016-10-15 15:48
添加了配置文件,也修改了rc.local。不过重启后还是没声音,请问“重新开机后或许要以 alsamixer 取消扬 ...
sudo alsamixer
然后按 选 HDA Intel PCH
再用左右键选 Speaker
按 键取消静音 显示会由 MM 变为 00
再用相同方法取消 Master 静音


xkillerz 发表于 2016-10-15 19:31

Quintus 发表于 2016-10-15 17:47
sudo alsamixer
然后按 选 HDA Intel PCH
再用左右键选 Speaker


我的speaker和master都不是静音了,然而依然没有声音。怎么办?

xkillerz 发表于 2016-10-15 21:30

Quintus 发表于 2016-10-15 17:47
sudo alsamixer
然后按 选 HDA Intel PCH
再用左右键选 Speaker


谢谢,不知道怎么弄得,现在有声音了

康斯坦汀 发表于 2016-10-17 10:07

X62刚出掉,等第三批到手了。谢楼主。

MetalMa 发表于 2016-10-17 10:31

Quintus 发表于 2016-10-14 21:53
此法须要使用 alsa-tools 内的 hda-verb
在 Debian / Ubuntu, 可以用 sudo apt-get install alsa-tools 安 ...
请问centos 6.8 内核版本为2.6.32,那在开机进到登录界面的时候,屏幕亮度是比较缓慢的变到正常,在系统里可以看到内核识别了显卡,这样就说明内核支持此显卡吗?谢谢

MetalMa 发表于 2016-10-17 12:08

MetalMa 发表于 2016-10-17 10:31
请问centos 6.8 内核版本为2.6.32,那在开机进到登录界面的时候,屏幕亮度是比较缓慢的变到正常,在系统 ...

谢谢

peacefeeling 发表于 2016-12-11 21:51

转外国友人……

whhwhhwhh 发表于 2016-12-12 09:10

就是要把622设成主声卡,理论上说是内核的问题,应该在编译时自动把显卡外的声卡设成主声卡。要不就要在操作层可以切换声卡。记得当年装LINUX时 ,SB16兼容声卡连驱动都没,要先进DOS装载SB16的兼容驱动,再LOADLINUX加载改成对应中断的SBPRO驱动才出声的

Quintus 发表于 2016-12-12 10:38

whhwhhwhh 发表于 2016-12-12 09:10
就是要把622设成主声卡,理论上说是内核的问题,应该在编译时自动把显卡外的声卡设成主声卡。要不就要在操 ...

对,就是要把 ALC662 设成主声卡。
另外是要改变 GPIO 打开功放芯片PAM8403。

jswwj 发表于 2016-12-12 15:02

我去,看不懂。。。。

57158466 发表于 2016-12-30 23:42

archlinux按照这个方法仍然是没有声音,不知道哪里有问题,设置默认声卡是有效的,但是
/usr/bin/hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 0x01
/usr/bin/hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIRECTION 0x01
/usr/bin/hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0x00
这几个命令执行完后,仍然没有声音

carcheche 发表于 2016-12-31 23:41

学习了。Mark。

rong29000 发表于 2017-1-2 22:04

厉害

xueyao 发表于 2018-2-8 13:06

如果要在arch上开启喇叭,需要在 systemd 开启 rc.local, arch 自带禁用rc.local

在 /usr/lib/systemd/system/rc-local.service 里添加


Description=/etc/rc.local compatibility


Type=oneshot
ExecStart=/etc/rc.local
RemainAfterExit=yes


WantedBy=multi-user.target

然后开启 rc.local:

systemctl enable rc-local.service

其他步骤一样不动

在自己 x62 的 manjaro 测试的,睡眠唤醒以及开机重启都没问题

Quintus 发表于 2018-2-22 17:28

xueyao 发表于 2018-2-8 13:06
如果要在arch上开启喇叭,需要在 systemd 开启 rc.local, arch 自带禁用rc.local

在 /usr/lib/systemd/s ...

ARCH 的话用这个吧 https://aur.archlinux.org/packages/x62-alsa-hacks/

steelwoo 发表于 2019-3-17 12:03

困扰好久了,试下。
页: [1]
查看完整版本: X62 Linux 扬声器无声解决方法, Speaker no sound fix