[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-bugs-dist
Subject:    [Bug 156832] No PCM detection when saved session
From:       Seblu <mail () seblu ! net>
Date:       2008-02-05 23:37:38
Message-ID: 20080205233738.29587.qmail () ktown ! kde ! org
[Download RAW message or body]

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
         
http://bugs.kde.org/show_bug.cgi?id=156832         




------- Additional Comments From mail seblu net  2008-02-06 00:37 -------
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
}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic