Version: 2.6.1 (using KDE 3.5.7) Installed from: Gentoo Packages Compiler: gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.2) OS: Linux When i start my session, kmix start whithout detect pcm channel. After kde loading, if i close "manually" kmix and start it again, PCM channel is present. I found this bug, because my PCM channel have the device id 0, so when KDE start, kmix restore sound on/off status and volume by device offset. My volume are shifted by one to left. :(
There are two issues described here: 1) "pcm channel not detected". I would say that this is an ALSA bug. Please try something: a) Reboot your computer, and Login. Is the issue present? b) Logout (WITHOUT! rebooting). Login again. Is the issue present? Please report back. 2) "Shifted controls restore issue". This is usually only problematic after soundcard-driver updates, and even there only very occasionaly. This is a known bug in KMix V2.x (KDE3), and cannot be fixed there. It has been fixed in KDE4.0.
There are two issues described here: 1) "pcm channel not detected". I would say that this is an ALSA bug. Please try something: a) Reboot your computer, and Login. Is the issue present? yes b) Logout (WITHOUT! rebooting). Login again. Is the issue present? yes 2) "Shifted controls restore issue". This is usually only problematic after soundcard-driver updates, and even there only very occasionaly. This is a known bug in KMix V2.x (KDE3), and cannot be fixed there. It has been fixed in KDE4.0. yes, this is not a problem when soundcard drivers are updated. But in my case, no update would be done.
Hmmm, this is getting very strange. I am running out of ideas, but here is one last thing: Could you try to disable the KMix volume restauration? Perhaps its some weird issue with volume change events rushing into KMix at the wrong time (early during initialization). Looking at the KMix code I would say that this should not be a problem, but well. Lets just try it please.
Could you try to disable the KMix volume restauration? Perhaps its some weird issue with volume change events rushing into KMix at the wrong time (early during initialization). Looking at the KMix code I would say that this should not be a problem, but well. Lets just try it please. Yes, this change nothing. First start without PCM device and after a kmix restart PCM come back. This only difference is the volume which is correctly set after the second start. I have do some more test and if i start the "alsasound" script at gentoo starting, kmix start correctly (with or whithout saving the sound volume). So PCM is always present and they are no problem. This script only do an alsactl restoration (i can send you if you want). This solve my problem but kmix behaviour is not good if volume is not previously restored (or acceded) by some alsa-utils.
I would like to se the script. Comments from the Internet indicate, that it does more, like loading the sound driver (explicitly or implicitly). If it does, I am pretty sure that this is an ALSA bug.
yes it can do more, but me I use it with this options : $ cat /etc/conf.d/alsasound (0:35)[0] # ENABLE_OSS_EMUL: # Do you want to enable in-kernel oss emulation? # no - Do not load oss emul drivers # yes - Load oss emul drivers if they're found ENABLE_OSS_EMUL="no" # RESTORE_ON_START: # Do you want to restore your mixer settings? If not, your cards will be # muted. # no - Do not restore state # yes - Restore state RESTORE_ON_START="yes" # SAVE_ON_STOP: # Do you want to save changes made to your mixer volumes when alsasound # stops? # no - Do not save state # yes - Save state SAVE_ON_STOP="yes" # LOAD_ON_START: # Do you want to load sound modules when alsasound starts? # no - Do not load modules # yes - Load modules LOAD_ON_START="no" # UNLOAD_ON_STOP: # Do you want to unload sound modules when alsasound stops? # no - Do not unload modules # yes - Unload modules UNLOAD_ON_STOP="no" And the script is : #!/sbin/runscript # $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound.initd,v 1.6 2007/12/29 06:37:59 robbat2 Exp $ # Copyright 2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 alsastatedir=/var/lib/alsa alsascrdir=/etc/alsa.d opts="save restore" depend() { need localmount after bootmisc modules isapnp coldplug hotplug } load_modules() { # List of drivers for each card. local DRIVERS="$(modprobe -c | sed -n -e 's/^alias \(snd-card-[[:digit:]]\+\) .*/\1/p')" # Fall back on the automated aliases if we don't have ALSA configured properly... if [ -z "${DRIVERS}" ] && \ ( [ ! -r /proc/asound/cards ] || grep -q ' no soundcards ' /proc/asound/cards 2>/dev/null ) ; then ewarn "Could not detect custom ALSA settings. Loading all detected alsa drivers." DRIVERS="$(modprobe -c | sed -n -e '/^alias pci:.* snd.*/ s/^alias pci:[^ ]* \(.*\)/\1/p' | sort | uniq)" if [ -z "${DRIVERS}" ] ; then eerror "Unable to find any ALSA drivers. Have you compiled alsa-drivers correctly?" fi fi if [ "${ENABLE_OSS_EMUL}" = "yes" ] ; then DRIVERS="${DRIVERS} $(modprobe -l | sed -n -e '/snd.*oss/ s:\/.*\/\(.*\).ko:\1:p')" fi # We want to ensure snd-seq is loaded as it is needed for things like # timidity even if we don't use a real sequencer. DRIVERS="${DRIVERS} $(modprobe -l | sed -n -e '/snd.seq\./ s:\/.*\/\(.*\).ko:\1:p')" # We want to ensure snd-ioctl32 is loaded as it is needed for 32bit # compatibility DRIVERS="${DRIVERS} $(modprobe -l | sed -n -e '/snd.ioctl32\./ s:\/.*\/\(.*\).ko:\1:p')" local DRIVER= DMOD= for DRIVER in ${DRIVERS} ; do [ "${DRIVER}" = "off" ] && continue DMOD="$(echo "${DRIVER}" | sed -e 's/-/_/g')" if ! grep -q "^${DMOD} " /proc/modules ; then ebegin "Loading: ${DRIVER}" modprobe ${DRIVER} eend $? fi done if [ -f /proc/asound/seq/drivers ] ; then local SEQUENCERS="$(sed -n -e 's/\([^,]*\),empty,.*/\1/p' /proc/asound/seq/drivers)" local SEQUENCER for SEQUENCER in ${SEQUENCERS} ; do DMOD="$(echo "${SEQUENCER}" | sed -e 's/-/_/g')" if ! grep -q "^${DMOD} " /proc/modules ; then ebegin "Loading: ${SEQUENCER}" modprobe ${SEQUENCER} eend $? fi done fi for DRIVER in ${DRIVERS} do local TMP=${DRIVER##snd-} TMP=${TMP##snd_} if [ -x "${alsascrdir}/${TMP}" ] ; then ebegin "Running: ${alsascrdir}/${TMP}" "${alsascrdir}/${TMP}" eend $? fi done if [ ! -d /proc/asound ] || grep -q ' no soundcards ' /proc/asound/cards ; then eerror "ERROR: Failed to load necessary drivers" return 1 fi } unload_modules_24() { local LOADED_MODULES="$(lsmod | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p')" local MODULE for MODULE in ${LOADED_MODULES} ; do rmmod "${MODULE}" done rmmod soundcore 2>/dev/null rmmod gameport 2>/dev/null lsmod | grep -vq '^snd' } unload_modules_recursive() { local revdeps="$(lsmod | sed -n -e "s/,/ /g" -e "s/^$1 *[0-9]* *[0-9]* \(.*\)/\1/p")" for module in ${revdeps} ; do unload_modules_recursive "${module}" done vebegin "Unloading: $1" rmmod --wait "$1" veend $? } unload_modules_26() { # First of all, remove the snd module and all the modules depending # on it, this should remove already most of ALSA modules. lsmod | grep -q "^snd[[:space:]]" && unload_modules_recursive snd # Then find the remaining ones, and handle them too. for module in $(lsmod | sed -n -e 's/^\(snd[^ ]*\) .*/\1/p'); do unload_modules_recursive "${module}" done lsmod | grep -vq "^snd" } terminate() { # # Kill processes holding open sound devices # # DEVS=`find /dev/ -follow -type c -maxdepth 1 -print 2>/dev/null | xargs ls -dils | grep "1*1[46]," | cut -d: -f2 | cut -d" " -f2; echo /proc/asound/dev/*` local ossdevs="/dev/admmidi* /dev/adsp* /dev/amidi* /dev/audio* /dev/dmfm* \ /dev/dmmidi* /dev/dsp* /dev/dspW* /dev/midi0* /dev/mixer* /dev/music \ /dev/patmgr* /dev/sequencer* /dev/sndstat" local alsadevs="/proc/asound/dev/* /dev/sound/* /dev/snd/*" fuser -k ${ossdevs} ${alsadevs} >/dev/null 2>/dev/null # remove all sequencer connections if any [ -f /proc/asound/seq/clients ] && type aconnect >/dev/null 2>/dev/null && aconnect --removeall } restore() { ebegin "Restoring Mixer Levels" if [ ! -r "${alsastatedir}/asound.state" ] ; then ewarn "No mixer config in ${alsastatedir}/asound.state, you have to unmute your card!" eend 0 return 0 fi local cards="$(sed -n -e 's/ *\([[:digit:]]*\) .*/\1/p' /proc/asound/cards)" local CARDNUM for cardnum in ${cards}; do [ -e /dev/snd/controlC${cardnum} ] || sleep 2 [ -e /dev/snd/controlC${cardnum} ] || sleep 2 [ -e /dev/snd/controlC${cardnum} ] || sleep 2 [ -e /dev/snd/controlC${cardnum} ] || sleep 2 alsactl -f "${alsastatedir}/asound.state" restore ${cardnum} \ || ewarn "Errors while restoring defaults, ignoring" done for ossfile in "${alsastatedir}"/oss/card*_pcm* ; do [ -e "${ossfile}" ] || continue # We use cat because I'm not sure if cp works properly on /proc local procfile=${ossfile##${alsastatedir}/oss} procfile="$(echo "${procfile}" | sed -e 's,_,/,g')" if [ -e /proc/asound/"${procfile}"/oss ] ; then cat "${ossfile}" > /proc/asound/"${procfile}"/oss fi done eend 0 } save() { ebegin "Storing ALSA Mixer Levels" mkdir -p "${alsastatedir}" if ! alsactl -f "${alsastatedir}/asound.state" store; then eerror "Error saving levels." eend 1 return 1 fi for ossfile in /proc/asound/card*/pcm*/oss; do [ -e "${ossfile}" ] || continue local device=${ossfile##/proc/asound/} ; device=${device%%/oss} device="$(echo "${device}" | sed -e 's,/,_,g')" mkdir -p "${alsastatedir}/oss/" cp "${ossfile}" "${alsastatedir}/oss/${device}" done eend 0 } start() { if [ -f /proc/modules ] && [ "${LOAD_ON_START}" = "yes" ]; then ebegin "Loading ALSA modules" eindent load_modules eoutdent eend $? || return 1 fi if [ ! -d /proc/asound ]; then eerror "ALSA failed to load." eend 1 return 1 fi [ "${RESTORE_ON_START}" = "yes" ] && restore return 0 } stop() { if [ ! -d /proc/asound ] ; then eerror "ALSA is not loaded" return 0 fi [ "${SAVE_ON_STOP}" = "yes" ] && save ebegin "Killing processes using ALSA" terminate eend 0 if [ -f /proc/modules ] && [ "${UNLOAD_ON_STOP}" = "yes" ]; then local ver="24" rmmod --version | grep -q module-init-tools && ver="26" ebegin "Unloading ALSA modules" eindent unload_modules_${ver} eend $? eoutdent fi return 0 }
in my case, it only call restore function, and this do only an alsactl restore.
I really have not an idea what could be the reason here. It is VERY unlikely that I will be able to find that without the possibility to reproduce it. As KDE4 is out for some time, I won't put any additonal effort for this in KDE3. In KDE4's KMix ALSA handling has improved, and I can only hope that is fixed there. Do you have a chance to run a KDE4 version (directly, Live-CD, or whatever)?
No i don't have try with kde4.0 on this computer, i wait kde4.1 to switch from 3.5. But, don't spread more time to fix this bug. WHen i start gentoo script, problem is not revelent. Thanks for your work !
Not fixed. Probably fixed/irrelevant in KDE4. Closing in agreement with bug reporter, as there is a workaround.