ML无声问题根本原因(就是alsa无法回复及保存音量)及解决
关于alsa的音量不能正确保存的问题:只有在console和gnome下才有,在KDE下是感觉不到的,因为KDE的kmixer会自动回复音量.
1.在不使用rcalsasound或alsasound启动脚本时
开机时,由/etc/init.d/kudzu启动声卡模块,但是kudzu不会用alsactl读取/etc/asound.state回复音量,也就是全部禁音
关机时,由/etc/init.d/halt保存了音量:
# Save mixer settings, here for lack of a better place.
grep -q "\(alsa\)" /proc/devices
if [ $? = 0 -a -x /usr/sbin/alsactl ]; then
runcmd $"Saving mixer settings" alsactl store
fi
2.如果使用rcalsasound或alsasound启动脚本,但是还是要用kudzu和halt
开机时,kudzu已经启动了声卡模块
start)
# Start driver if it isn't already up.
if [ ! -d /proc/asound ]; then
start
else
echo "ALSA driver is already running."
fi
于是,alsasound就不会启动start函数,也不会用alsactl读取/etc/asound.state回复音量
关机时,先是调用alsasound stop:
if [ -x $alsactl ]; then
$alsactl -f $asoundcfg store
else
echo -n -e "${rc_warning}!!!alsactl not found!!!${rc_reset} "
fi
#
# mute master to avoid clicks at unload
#
/usr/bin/amixer set Master mute >/dev/null 2>&1
这里保存了音量,但下面为防止unload驱动时的暴音,把主音量关了.
调用halt时,halt又保存了音量,这时就保存了错误的音量.
解决方案:
1.不用rcalsasound或alsasound
那么,kudzu就必须能启动声卡模块,并回复音量.
2.用alsasound
就不能让kudzu启动声卡,或是在alsasound start时调用restart,还有最重要的是不能让halt保存音量. 解决方案:
1.不用rcalsasound或alsasound
那么,kudzu就必须能启动声卡模块,并回复音量.
在/etc/init.d/kudzu的第51行加入:
alsactl restore
2.用alsasound
就不能让kudzu启动声卡,或是在alsasound start时调用restart,还有最重要的是不能让halt保存音量.
chkconfig --add --level 345 alsasound
在/etc/init.d/alsasound的第202行(fi前)加入:
stop
start
把/etc/init.d/halt的66到70行,就是下面的,注释掉(行前加#),它也说了,放这是因为没有更好的地方,现在有了alsasound了,就不需要在这了.
# Save mixer settings, here for lack of a better place.
grep -q "\(alsa\)" /proc/devices
if [ $? = 0 -a -x /usr/sbin/alsactl ]; then
runcmd $"Saving mixer settings" alsactl store
fi 相当精彩,看来找到了ML时常发生的声卡无声问题的根源了,呵呵,开发组的参考一下吧。 我错了,声卡模块应该不是kudzu装入的,而是由/etc/rc.d/rc.sysinit这个脚本装入的:
在/etc/rc.d/rc.sysinit的113和165行,分别是搜寻和装入.
所以,解决方案1.不用rcalsasound或alsasound ,应该改/etc/rc.d/rc.sysinit而不是kudzu
在/etc/rc.d/rc.sysinit的169加入
alsactl restore
我还有个问题:kudzu的作用到底是什么?
只是搜索硬件并把新硬件加入modprobe.conf中,而不装入?
那么,就是装入一个声卡的模块,至少有3个脚本都可以:
/etc/rc.d/rc.sysinit
/etc/init.d/alsasound
/etc/init.d/modules
ML里/etc/init.d/modules已经把声卡部分注释了.
这就是错误来源,这几个脚本是从不同的发行版中来的,没有好好整合. 我错了,声卡模块应该不是kudzu装入的,而是由/etc/rc.d/rc.sysinit这个脚本装入的:
在/etc/rc.d/rc.sysinit的113和165行,分别是搜寻和装入.
所以,解决方案1.不用rcalsasound或alsasound ,应该改/etc/rc.d/rc.sysinit而不是kudzu
在/etc/rc.d/rc.sysinit的169加入
alsactl restore
我还有个问题:kudzu的作用到底是什么?
只是搜索硬件并把新硬件加入modprobe.conf中,而不装入?
那么,就是装入一个声卡的模块,至少有3个脚本都可以:
/etc/rc.d/rc.sysinit
/etc/init.d/alsasound
/etc/init.d/modules
ML里/etc/init.d/modules已经把声卡部分注释了.
这就是错误来源,这几个脚本是从不同的发行版中来的,没有好好整合.
嗯,既然有了/etc/init.d/alsasound,就不该在/etc/init.d/modules文件里保留声卡部分的设置了。
kudzu似乎就是检测硬件,然后加入/etc/modprobe.conf文件吧,帮助系统找到正确的硬件驱动模块,至于加载就不归它管了吧? ML中没有 alsasound这个脚本了。
/etc/init.d/modules中的声卡模块加载部分也未注释掉,你再仔细看看:-) ML中没有 alsasound这个脚本了。
/etc/init.d/modules中的声卡模块加载部分也未注释掉,你再仔细看看:-)
我的ML1.2f,刚看过iso里的rpm包,这是最原始的:
rcalsasound(就是alsasound)在mgc-patch-1.0-16mgc包里,似乎没有加入启动项
modules在initscripts-8.0-15mgc确实是有声卡模块,调用了alsa-startup,启动时读了音量,结束时也保存了.
halt,也保存了音量.
还是有问题.
现在我升级了mgc-patch和initscripts还有alsa,现在的alsa里没有了alsa-startup,结果成了我说的情况.
所以magic linux应该整理一下包,把责任分清,只能由一个脚本负责声卡,start和stop时都要有音量,别的脚本完全不能碰声卡.
这样的话,跟3个包有关系,mgc-patch和initscripts还有alsa-utils
1.alsasound
2.rc.sysinit装入,halt卸载
3.modules,但alsa里要有alsa-startup 我们不再推荐用 1.2 了。
页:
[1]