Martin Stransky 2d9afc
#!/bin/bash
Martin Stransky 2d9afc
Martin Stransky 2d9afc
SCRIPT_VERSION=0.4.41
Martin Stransky 2d9afc
CHANGELOG="http://hg.alsa-project.org/alsa/log/tip/alsa-info.sh"
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#################################################################################
Martin Stransky 2d9afc
#Copyright (C) 2007 Free Software Foundation.
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#This program is free software; you can redistribute it and/or modify
Martin Stransky 2d9afc
#it under the terms of the GNU General Public License as published by
Martin Stransky 2d9afc
#the Free Software Foundation; either version 2 of the License, or
Martin Stransky 2d9afc
#(at your option) any later version.
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#This program is distributed in the hope that it will be useful,
Martin Stransky 2d9afc
#but WITHOUT ANY WARRANTY; without even the implied warranty of
Martin Stransky 2d9afc
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Martin Stransky 2d9afc
#GNU General Public License for more details.
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#You should have received a copy of the GNU General Public License
Martin Stransky 2d9afc
#along with this program; if not, write to the Free Software
Martin Stransky 2d9afc
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
Martin Stransky 2d9afc
Martin Stransky 2d9afc
##################################################################################
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#The script was written for 2 main reasons:
Martin Stransky 2d9afc
# 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user.
Martin Stransky 2d9afc
# 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them.
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Change the PATH variable, so we can run lspci (needed for some distros)
Martin Stransky 2d9afc
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
Martin Stransky 2d9afc
BGTITLE="ALSA-Info v $SCRIPT_VERSION"
Martin Stransky 2d9afc
PASTEBINKEY="C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc"
Martin Stransky 2d9afc
#Define some simple functions
Martin Stransky 2d9afc
Martin Stransky 2d9afc
update() {
Martin Stransky 2d9afc
	wget -O /tmp/alsa-info.sh http://hg.alsa-project.org/alsa/raw-file/tip/alsa-info.sh >/dev/null 2>&1
Martin Stransky 2d9afc
	REMOTE_VERSION=`grep SCRIPT_VERSION /tmp/alsa-info.sh |head -n1 |sed 's/.*=//'`
Martin Stransky 2d9afc
	if [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then
Martin Stransky 2d9afc
		if [[ -n $DIALOG ]]
Martin Stransky 2d9afc
		then
Martin Stransky 2d9afc
			dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to install it?" 0 0
Martin Stransky 2d9afc
			DIALOG_EXIT_CODE=$?
Martin Stransky 2d9afc
			if [[ $DIALOG_EXIT_CODE = 0 ]]
Martin Stransky 2d9afc
			then
Martin Stransky 2d9afc
				cp /tmp/alsa-info.sh $0
Martin Stransky 2d9afc
				echo "ALSA-Info script has been updated to v $REMOTE_VERSION"
Martin Stransky 2d9afc
				echo "To view the ChangeLog, please visit $CHANGELOG"
Martin Stransky 2d9afc
				echo "Please re-run the script"
Martin Stransky 2d9afc
				exit
Martin Stransky 2d9afc
			fi
Martin Stransky 2d9afc
		else
Martin Stransky 2d9afc
			cp /tmp/alsa-info.sh $0
Martin Stransky 2d9afc
			echo "Newer version detected: $REMOTE_VERSION"
Martin Stransky 2d9afc
			echo "To view the ChangeLog, please visit $CHANGELOG"
Martin Stransky 2d9afc
			echo "ALSA-Info script has been updated. Please re-run it."
Martin Stransky 2d9afc
Martin Stransky 2d9afc
			exit
Martin Stransky 2d9afc
		fi
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
	rm /tmp/alsa-info.sh 2>/dev/null
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
cleanup() {
Martin Stransky 2d9afc
	rm -r $TEMPDIR 2>/dev/null
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#### FIX ME
Martin Stransky 2d9afc
withsecure() {
Martin Stransky 2d9afc
	POST_URL="http://alsa-info.pastebin.ca"
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
###########
Martin Stransky 2d9afc
Martin Stransky 2d9afc
withaplay() {
Martin Stransky 2d9afc
        echo "!!Aplay/Arecord output" >> $FILE
Martin Stransky 2d9afc
        echo "!!------------" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
       	echo "APLAY" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE 
Martin Stransky 2d9afc
	aplay -l >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
       	echo "ARECORD" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	arecord -l >> $FILE 
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
withlsmod() {
Martin Stransky 2d9afc
	echo "!!All Loaded Modules" >> $FILE
Martin Stransky 2d9afc
	echo "!!------------------" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	lsmod |awk {'print $1'} >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
withamixer() {
Martin Stransky 2d9afc
        echo "!!Amixer output" >> $FILE
Martin Stransky 2d9afc
        echo "!!-------------" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
	for i in `grep "]: " /proc/asound/cards | awk -F ' ' '{ print $1} '` ; do
Martin Stransky 2d9afc
	CARD_NAME=`grep "^ *$i " /tmp/alsainfo/alsacards.tmp|awk {'print $2'}`
Martin Stransky 2d9afc
	echo "!!-------Mixer controls for card $i $CARD_NAME]" >> $FILE
Martin Stransky 2d9afc
	echo "" >>$FILE
Martin Stransky 2d9afc
	amixer -c$i>> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
	done
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
withalsactl() {
Martin Stransky 2d9afc
	echo "!!Alsactl output" >> $FILE
Martin Stransky 2d9afc
        echo "!!-------------" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
        exe=""
Martin Stransky 2d9afc
        if [ -x /usr/sbin/alsactl ]; then
Martin Stransky 2d9afc
        	exe="/usr/sbin/alsactl"
Martin Stransky 2d9afc
        fi
Martin Stransky 2d9afc
        if [ -x /usr/local/sbin/alsactl ]; then
Martin Stransky 2d9afc
        	exe="/usr/local/sbin/alsactl"
Martin Stransky 2d9afc
        fi
Martin Stransky 2d9afc
        if [ -z "$exe" ]; then
Martin Stransky 2d9afc
        	exe=`whereis alsactl | cut -d ' ' -f 2`
Martin Stransky 2d9afc
        fi
Martin Stransky 2d9afc
	$exe -f /tmp/alsainfo/alsactl.tmp store
Martin Stransky 2d9afc
	echo "--startcollapse--" >> $FILE
Martin Stransky 2d9afc
	cat /tmp/alsainfo/alsactl.tmp >> $FILE
Martin Stransky 2d9afc
	echo "--endcollapse--" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
withdevices() {
Martin Stransky 2d9afc
        echo "!!ALSA Device nodes" >> $FILE
Martin Stransky 2d9afc
        echo "!!-----------------" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
        ls -la /dev/snd/* >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
withconfigs() {
Martin Stransky 2d9afc
if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] || [[ -e $HOME/.asoundrc.asoundconf ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
        echo "!!ALSA configuration files" >> $FILE
Martin Stransky 2d9afc
        echo "!!------------------------" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
Martin Stransky 2d9afc
        #Check for ~/.asoundrc
Martin Stransky 2d9afc
        if [[ -e $HOME/.asoundrc ]]
Martin Stransky 2d9afc
        then
Martin Stransky 2d9afc
                echo "!!User specific config file (~/.asoundrc)" >> $FILE
Martin Stransky 2d9afc
                echo "" >> $FILE
Martin Stransky 2d9afc
                cat $HOME/.asoundrc >> $FILE
Martin Stransky 2d9afc
                echo "" >> $FILE
Martin Stransky 2d9afc
                echo "" >> $FILE
Martin Stransky 2d9afc
        fi
Martin Stransky 2d9afc
	#Check for .asoundrc.asoundconf (seems to be Ubuntu specific)
Martin Stransky 2d9afc
	if [[ -e $HOME/.asoundrc.asoundconf ]]
Martin Stransky 2d9afc
	then
Martin Stransky 2d9afc
		echo "!!asoundconf-generated config file" >> $FILE
Martin Stransky 2d9afc
		echo "" >> $FILE
Martin Stransky 2d9afc
		cat $HOME/.asoundrc.asoundconf >> $FILE
Martin Stransky 2d9afc
		echo "" >> $FILE
Martin Stransky 2d9afc
		echo "" >> $FILE
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
        #Check for /etc/asound.conf
Martin Stransky 2d9afc
        if [[ -e /etc/asound.conf ]]
Martin Stransky 2d9afc
        then
Martin Stransky 2d9afc
                echo "!!System wide config file (/etc/asound.conf)" >> $FILE
Martin Stransky 2d9afc
                echo "" >> $FILE
Martin Stransky 2d9afc
                cat /etc/asound.conf >> $FILE
Martin Stransky 2d9afc
                echo "" >> $FILE
Martin Stransky 2d9afc
                echo "" >> $FILE
Martin Stransky 2d9afc
        fi
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
}
Martin Stransky 2d9afc
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Run checks to make sure the programs we need are installed.
Martin Stransky 2d9afc
LSPCI=$(which lspci 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
Martin Stransky 2d9afc
TPUT=$(which tput 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
Martin Stransky 2d9afc
DIALOG=$(which dialog 2>/dev/null | sed 's|^[^/]*||' 2>/dev/null);
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Check to see if sysfs is enabled in the kernel. We'll need this later on
Martin Stransky 2d9afc
SYSFS=$(mount |grep sysfs|awk {'print $3'});
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Check modprobe config files for sound related options
Martin Stransky 2d9afc
SNDOPTIONS=$(modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p')
Martin Stransky 2d9afc
Martin Stransky 2d9afc
QUESTION="yes"
Martin Stransky 2d9afc
PROCEED="yes"
Martin Stransky 2d9afc
NOUPLOAD=""
Martin Stransky 2d9afc
REPEAT=""
Martin Stransky 2d9afc
while [ -z "$REPEAT" ]; do
Martin Stransky 2d9afc
REPEAT="no"
Martin Stransky 2d9afc
case "$1" in
Martin Stransky 2d9afc
	--update|--help|--about)
Martin Stransky 2d9afc
		QUESTION="no"
Martin Stransky 2d9afc
		PROCEED="no"
Martin Stransky 2d9afc
		;;
Martin Stransky 2d9afc
	--no-upload)
Martin Stransky 2d9afc
		NOUPLOAD="yes"
Martin Stransky 2d9afc
		;;
Martin Stransky 2d9afc
	--no-dialog)
Martin Stransky 2d9afc
		DIALOG=""
Martin Stransky 2d9afc
		REPEAT=""
Martin Stransky 2d9afc
		shift
Martin Stransky 2d9afc
		;;
Martin Stransky 2d9afc
esac
Martin Stransky 2d9afc
done
Martin Stransky 2d9afc
		
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Script header output.
Martin Stransky 2d9afc
if [ "$QUESTION" = "yes" ]; then
Martin Stransky 2d9afc
if [[ -n "$DIALOG" ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
if [ -z "NOUPLOAD" ]; then
Martin Stransky 2d9afc
	dialog --backtitle "$BGTITLE" --title "ALSA-Info script v $SCRIPT_VERSION" --yesno "\nThis script will collect information about your ALSA installation and sound related hardware, to help diagnose your problem\n\nBy default, this script will AUTOMATICALLY UPLOAD your information to a pastebin site.\n\nSee $0 --help for options\n\nDo you want to run this script?" 0 0
Martin Stransky 2d9afc
else
Martin Stransky 2d9afc
	dialog --backtitle "$BGTITLE" --title "ALSA-Info script v $SCRIPT_VERSION" --yesno "\nThis script will collect information about your ALSA installation and sound related hardware, to help diagnose your problem\n\nSee $0 --help for options\n\nDo you want to run this script?" 0 0
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
DIALOG_EXIT_CODE=$?
Martin Stransky 2d9afc
if [ $DIALOG_EXIT_CODE != 0 ]; then
Martin Stransky 2d9afc
echo "Thank you for using the ALSA-Info Script"
Martin Stransky 2d9afc
exit 0;
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
else
Martin Stransky 2d9afc
Martin Stransky 2d9afc
echo "ALSA Information Script v $SCRIPT_VERSION"
Martin Stransky 2d9afc
echo "--------------------------------"
Martin Stransky 2d9afc
echo ""
Martin Stransky 2d9afc
echo "This script will collect information about your ALSA installation and sound related hardware, to help diagnose your problem."
Martin Stransky 2d9afc
echo ""
Martin Stransky 2d9afc
if [ -z "$NOUPLOAD" ]; then
Martin Stransky 2d9afc
if [[ -n "$TPUT" ]]; then
Martin Stransky 2d9afc
tput bold
Martin Stransky 2d9afc
echo "By default, the collected information will be AUTOMATICALLY uploaded to a pastebin site."
Martin Stransky 2d9afc
echo "If you do not wish for this to occur, run the script with the --no-upload argument"
Martin Stransky 2d9afc
tput sgr0
Martin Stransky 2d9afc
else
Martin Stransky 2d9afc
echo "By default, the collected information will be AUTOMATICALLY uploaded to a pastebin site."
Martin Stransky 2d9afc
echo "If you do not wish for this to occur, run the script with the --no-upload argument"
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
echo ""
Martin Stransky 2d9afc
fi # NOUPLOAD
Martin Stransky 2d9afc
echo -n "Do you want to run this script? [y/n] : "
Martin Stransky 2d9afc
read -e CONFIRM
Martin Stransky 2d9afc
if [ "$CONFIRM" != "y" ]; then
Martin Stransky 2d9afc
echo ""
Martin Stransky 2d9afc
echo "Thank you for using the ALSA-Info Script"
Martin Stransky 2d9afc
exit 0;
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
fi # question
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Set the output file
Martin Stransky 2d9afc
TEMPDIR="/tmp/alsainfo/"
Martin Stransky 2d9afc
FILE="/tmp/alsa-info.txt"
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [ "$PROCEED" = "yes" ]; then
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [[ -z "$LSPCI" ]] 
Martin Stransky 2d9afc
	then
Martin Stransky 2d9afc
	echo "This script requires lspci. Please install it, and re-run this script."
Martin Stransky 2d9afc
exit 0
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Create the temporary work dir.
Martin Stransky 2d9afc
mkdir $TEMPDIR 2>/dev/null
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Fetch the info and store in temp files/variables
Martin Stransky 2d9afc
DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS" /etc/{issue,*release,*version}`
Martin Stransky 2d9afc
KERNEL_VERSION=`uname -r`
Martin Stransky 2d9afc
KERNEL_PROCESSOR=`uname -p`
Martin Stransky 2d9afc
KERNEL_MACHINE=`uname -m`
Martin Stransky 2d9afc
KERNEL_OS=`uname -o`
Martin Stransky 2d9afc
[[ `uname -v |grep SMP`  ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No" 
Martin Stransky 2d9afc
ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'`
Martin Stransky 2d9afc
ALSA_LIB_VERSION=`grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null|awk {'print $3'}|sed 's/"//g'`
Martin Stransky 2d9afc
ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}`
Martin Stransky 2d9afc
VENDOR_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $3}'|awk {'print substr($0, 2);}' >/tmp/alsainfo/vendor_id.tmp`
Martin Stransky 2d9afc
DEVICE_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $4}'|awk {'print $1'} >/tmp/alsainfo/device_id.tmp`
Martin Stransky 2d9afc
LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 ))
Martin Stransky 2d9afc
cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>/tmp/alsainfo/alsamodules.tmp
Martin Stransky 2d9afc
cat /proc/asound/cards >/tmp/alsainfo/alsacards.tmp
Martin Stransky 2d9afc
lspci |grep -i "multi\|audio">/tmp/alsainfo/lspci.tmp
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Check for HDA-Intel cards codec#*
Martin Stransky 2d9afc
cat /proc/asound/card*/codec\#* > /tmp/alsainfo/alsa-hda-intel.tmp 2> /dev/null
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Check for AC97 cards codec
Martin Stransky 2d9afc
cat /proc/asound/card*/codec97\#0/ac97\#0-0 > /tmp/alsainfo/alsa-ac97.tmp 2> /dev/null
Martin Stransky 2d9afc
cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > /tmp/alsainfo/alsa-ac97-regs.tmp 2> /dev/null
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Fetch the info, and put it in $FILE in a nice readable format.
Martin Stransky 2d9afc
echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE
Martin Stransky 2d9afc
echo "!!################################" >> $FILE
Martin Stransky 2d9afc
echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE
Martin Stransky 2d9afc
echo "!!################################" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!Script ran on: `LANG=C date`" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!Linux Distribution" >> $FILE
Martin Stransky 2d9afc
echo "!!------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo $DISTRO >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!Kernel Information" >> $FILE
Martin Stransky 2d9afc
echo "!!------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "Kernel release:    $KERNEL_VERSION" >> $FILE
Martin Stransky 2d9afc
echo "Operating System:  $KERNEL_OS" >> $FILE
Martin Stransky 2d9afc
echo "Architecture:      $KERNEL_MACHINE" >> $FILE
Martin Stransky 2d9afc
echo "Processor:         $KERNEL_PROCESSOR" >> $FILE
Martin Stransky 2d9afc
echo "SMP Enabled:       $KERNEL_SMP" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!ALSA Version" >> $FILE
Martin Stransky 2d9afc
echo "!!------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "Driver version:     $ALSA_DRIVER_VERSION" >> $FILE
Martin Stransky 2d9afc
echo "Library version:    $ALSA_LIB_VERSION" >> $FILE
Martin Stransky 2d9afc
echo "Utilities version:  $ALSA_UTILS_VERSION" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!Loaded ALSA modules" >> $FILE
Martin Stransky 2d9afc
echo "!!-------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
cat /tmp/alsainfo/alsamodules.tmp >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!Soundcards recognised by ALSA" >> $FILE
Martin Stransky 2d9afc
echo "!!-----------------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
cat /tmp/alsainfo/alsacards.tmp >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!PCI Soundcards installed in the system" >> $FILE
Martin Stransky 2d9afc
echo "!!--------------------------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
cat /tmp/alsainfo/lspci.tmp >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "!!Advanced information - PCI Vendor/Device/Susbsystem ID's" >> $FILE
Martin Stransky 2d9afc
echo "!!--------------------------------------------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
lspci -vvn |grep -A1 040[1-3] >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [ "$SNDOPTIONS" ]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
echo "!!Modprobe options (Sound related)" >> $FILE
Martin Stransky 2d9afc
echo "!!--------------------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [ -d $SYSFS ]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
echo "!!Loaded sound module options" >> $FILE
Martin Stransky 2d9afc
echo "!!--------------------------" >> $FILE
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
for mod in `cat /proc/asound/modules|awk {'print $2'}`;do
Martin Stransky 2d9afc
echo "!!Module: $mod" >> $FILE
Martin Stransky 2d9afc
for params in `ls $SYSFS/module/$mod/parameters/*`; do /bin/echo -ne "\t";/bin/echo "$params : `cat $params`"|sed 's:.*/::' >> $FILE;done
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
done
Martin Stransky 2d9afc
echo "" >> $FILE
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [ -s "/tmp/alsainfo/alsa-hda-intel.tmp" ] 
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	echo "!!HDA-Intel Codec information" >> $FILE
Martin Stransky 2d9afc
	echo "!!---------------------------" >> $FILE
Martin Stransky 2d9afc
	echo "--startcollapse--" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	cat /tmp/alsainfo/alsa-hda-intel.tmp >> $FILE
Martin Stransky 2d9afc
	echo "--endcollapse--" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [ -s "/tmp/alsainfo/alsa-ac97.tmp" ]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
        echo "!!AC97 Codec information" >> $FILE
Martin Stransky 2d9afc
        echo "!!---------------------------" >> $FILE
Martin Stransky 2d9afc
        echo "--startcollapse--" >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
        cat /tmp/alsainfo/alsa-ac97.tmp >> $FILE
Martin Stransky 2d9afc
        echo "" >> $FILE
Martin Stransky 2d9afc
        cat /tmp/alsainfo/alsa-ac97-regs.tmp >> $FILE
Martin Stransky 2d9afc
        echo "--endcollapse--" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
	echo "" >> $FILE
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#If no command line options are specified, then run as though --with-all was specified
Martin Stransky 2d9afc
if [[ -z "$1" ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	update
Martin Stransky 2d9afc
	withdevices
Martin Stransky 2d9afc
	withconfigs
Martin Stransky 2d9afc
	withaplay
Martin Stransky 2d9afc
	withamixer
Martin Stransky 2d9afc
	withalsactl
Martin Stransky 2d9afc
	withlsmod
Martin Stransky 2d9afc
	#Workaround, while we sort out pastebin location, since pastebin.ca blocked us.
Martin Stransky 2d9afc
	#NOUPLOAD="yes"
Martin Stransky 2d9afc
	
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
fi # proceed
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#loop through command line arguments, until none are left.
Martin Stransky 2d9afc
if [[ -n "$1" ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	until [ -z "$1" ]
Martin Stransky 2d9afc
	do
Martin Stransky 2d9afc
	case "$1" in
Martin Stransky 2d9afc
		--update)
Martin Stransky 2d9afc
			update
Martin Stransky 2d9afc
			exit
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--no-upload)
Martin Stransky 2d9afc
			NOUPLOAD="yes"
Martin Stransky 2d9afc
			KEEP_FILES="yes"
Martin Stransky 2d9afc
			withdevices
Martin Stransky 2d9afc
			withconfigs
Martin Stransky 2d9afc
			withaplay
Martin Stransky 2d9afc
			withamixer
Martin Stransky 2d9afc
			withalsactl
Martin Stransky 2d9afc
			withlsmod
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--debug)
Martin Stransky 2d9afc
			echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted"
Martin Stransky 2d9afc
			KEEP_FILES="yes"
Martin Stransky 2d9afc
			echo ""
Martin Stransky 2d9afc
			withdevices
Martin Stransky 2d9afc
			withconfigs
Martin Stransky 2d9afc
			withaplay
Martin Stransky 2d9afc
			withamixer
Martin Stransky 2d9afc
			withalsactl
Martin Stransky 2d9afc
			withlsmod
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--with-all)
Martin Stransky 2d9afc
			withdevices
Martin Stransky 2d9afc
			withconfigs
Martin Stransky 2d9afc
			withaplay
Martin Stransky 2d9afc
			withamixer
Martin Stransky 2d9afc
			withalsactl
Martin Stransky 2d9afc
			withlsmod
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		#### FIX ME
Martin Stransky 2d9afc
		--secure)
Martin Stransky 2d9afc
			withdevices
Martin Stransky 2d9afc
			withconfigs
Martin Stransky 2d9afc
			withaplay
Martin Stransky 2d9afc
			withamixer
Martin Stransky 2d9afc
			withalsactl
Martin Stransky 2d9afc
			withlsmod
Martin Stransky 2d9afc
			withsecure
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		###########
Martin Stransky 2d9afc
		--with-aplay)
Martin Stransky 2d9afc
			withaplay
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--with-amixer)
Martin Stransky 2d9afc
			withamixer
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--with-alsactl)
Martin Stransky 2d9afc
			withalsactl
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--with-devices)
Martin Stransky 2d9afc
			withdevices
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--with-configs)
Martin Stransky 2d9afc
			if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]]
Martin Stransky 2d9afc
			then
Martin Stransky 2d9afc
				echo "!!ALSA configuration files" >> $FILE
Martin Stransky 2d9afc
				echo "!!------------------------" >> $FILE
Martin Stransky 2d9afc
				echo "" >> $FILE
Martin Stransky 2d9afc
Martin Stransky 2d9afc
				#Check for ~/.asoundrc
Martin Stransky 2d9afc
				if [[ -e $HOME/.asoundrc ]]
Martin Stransky 2d9afc
				then
Martin Stransky 2d9afc
					echo "!!User specific config file ($HOME/.asoundrc)" >> $FILE
Martin Stransky 2d9afc
					echo "" >> $FILE
Martin Stransky 2d9afc
					cat $HOME/.asoundrc >> $FILE
Martin Stransky 2d9afc
					echo "" >> $FILE
Martin Stransky 2d9afc
					echo "" >> $FILE
Martin Stransky 2d9afc
				fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
				#Check for /etc/asound.conf
Martin Stransky 2d9afc
				if [[ -e /etc/asound.conf ]]
Martin Stransky 2d9afc
				then
Martin Stransky 2d9afc
					echo "!!System wide config file (/etc/asound.conf)" >> $FILE
Martin Stransky 2d9afc
					echo "" >> $FILE
Martin Stransky 2d9afc
					cat /etc/asound.conf >> $FILE
Martin Stransky 2d9afc
					echo "" >> $FILE
Martin Stransky 2d9afc
					echo "" >> $FILE
Martin Stransky 2d9afc
				fi
Martin Stransky 2d9afc
			fi
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		--about)
Martin Stransky 2d9afc
			echo "Written/Tested by the following users of #alsa on irc.freenode.net:"
Martin Stransky 2d9afc
			echo ""
Martin Stransky 2d9afc
			echo "	wishie - Script author and developer / Testing"
Martin Stransky 2d9afc
			echo "	crimsun - Various script ideas / Testing"
Martin Stransky 2d9afc
			echo "	gnubien - Various script ideas / Testing"
Martin Stransky 2d9afc
			echo "	GrueMaster - HDA Intel specific items / Testing"
Martin Stransky 2d9afc
			echo "	olegfink - Script update function"
Martin Stransky 2d9afc
			cleanup
Martin Stransky 2d9afc
			exit 0
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
		*)
Martin Stransky 2d9afc
			echo ""
Martin Stransky 2d9afc
			echo "Available options:"
Martin Stransky 2d9afc
			echo "	--with-aplay (includes the output of aplay -l)"
Martin Stransky 2d9afc
			echo "	--with-amixer (includes the output of amixer)"
Martin Stransky 2d9afc
			echo "	--with-alsactl (includes the output of alsactl)"
Martin Stransky 2d9afc
			echo "	--with-configs (includes the output of ~/.asoundrc and /etc/asound.conf if they exist)" 
Martin Stransky 2d9afc
			echo "	--with-devices (shows the device nodes in /dev/snd/)"
Martin Stransky 2d9afc
			echo ""
Martin Stransky 2d9afc
			echo "	--update (check server for script updates)"
Martin Stransky 2d9afc
			echo "	--no-upload (do not upload contents to remote server)"
Martin Stransky 2d9afc
			echo "	--about (show some information about the script)"
Martin Stransky 2d9afc
			echo "	--debug (will run the script as normal, but will not delete $FILE)"
Martin Stransky 2d9afc
			cleanup
Martin Stransky 2d9afc
			exit 0
Martin Stransky 2d9afc
			;;
Martin Stransky 2d9afc
	esac
Martin Stransky 2d9afc
	shift 1
Martin Stransky 2d9afc
	done
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
if [ "$PROCEED" = "yes" ]; then
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#Test that wget is installed, and supports --post-file. Upload $FILE if it does, and prompt user to upload file if it doesnt. 
Martin Stransky 2d9afc
if
Martin Stransky 2d9afc
WGET=$(which wget 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); [[ -n "${WGET}" ]] && [[ -x "${WGET}" ]] && [[ `wget --help |grep post-file` ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
if [[ -n "$DIALOG" ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	if [[ -z $NOUPLOAD ]]; then
Martin Stransky 2d9afc
	wget -O - --tries=5 --timeout=60 --post-file=/tmp/alsa-info.txt "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>/tmp/alsainfo/wget.tmp || echo "Upload failed; exit"
Martin Stransky 2d9afc
	{ for i in 10 20 30 40 50 60 70 80 90; do
Martin Stransky 2d9afc
		echo $i
Martin Stransky 2d9afc
		sleep 0.2
Martin Stransky 2d9afc
	done
Martin Stransky 2d9afc
	echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.pastebin.ca ..." 6 70 0
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
else
Martin Stransky 2d9afc
Martin Stransky 2d9afc
	if [[ -z $NOUPLOAD ]]; then
Martin Stransky 2d9afc
	echo -n "Uploading information to www.pastebin.ca ... " 
Martin Stransky 2d9afc
	wget -O - --tries=5 --timeout=60 --post-file=/tmp/alsa-info.txt http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &>/tmp/alsainfo/wget.tmp &
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
#Progess spinner for wget transfer.
Martin Stransky 2d9afc
if [[ -z "$DIALOG" ]]	
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	i=1
Martin Stransky 2d9afc
	sp="/-\|"
Martin Stransky 2d9afc
	echo -n ' '
Martin Stransky 2d9afc
	while pgrep wget &>/dev/null
Martin Stransky 2d9afc
	do
Martin Stransky 2d9afc
	echo -en "\b${sp:i++%${#sp}:1}"
Martin Stransky 2d9afc
	done
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#See if tput is available, and use it if it is.	
Martin Stransky 2d9afc
if [[ -z $NOUPLOAD ]]; then
Martin Stransky 2d9afc
	if [[ -n "$TPUT" ]]
Martin Stransky 2d9afc
	then
Martin Stransky 2d9afc
		FINAL_URL=`tput setaf 1; grep "SUCCESS:" /tmp/alsainfo/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0`
Martin Stransky 2d9afc
	else
Martin Stransky 2d9afc
		FINAL_URL=`grep "SUCCESS:" /tmp/alsainfo/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'`
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
#Output the URL of the uploaded file.	
Martin Stransky 2d9afc
if [[ -z $DIALOG ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	echo -e "\b Done!"
Martin Stransky 2d9afc
	echo ""
Martin Stransky 2d9afc
	if [[ -z $NOUPLOAD ]]; then
Martin Stransky 2d9afc
		echo "Your ALSA information is located at $FINAL_URL"
Martin Stransky 2d9afc
		echo "Please inform the person helping you."
Martin Stransky 2d9afc
		echo ""
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
if [[ -n $DIALOG ]]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	if [[ -n $NOUPLOAD ]]; then
Martin Stransky 2d9afc
		dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "You requested that your information was NOT automatically uploaded to the pastebin\n\nYour ALSA information can be seen by looking in $FILE" 10 100
Martin Stransky 2d9afc
	else
Martin Stransky 2d9afc
		dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100 
Martin Stransky 2d9afc
		DIALOG_EXIT_CODE=$?
Martin Stransky 2d9afc
	if [ $DIALOG_EXIT_CODE = 0 ]; then
Martin Stransky 2d9afc
		grep -v "alsa-info.txt" /tmp/alsa-info.txt >/tmp/alsainfo/uploaded.txt
Martin Stransky 2d9afc
		dialog --backtitle "$BGTITLE" --textbox /tmp/alsainfo/uploaded.txt 0 0
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
fi 
Martin Stransky 2d9afc
clear
Martin Stransky 2d9afc
if [[ -n $NOUPLOAD ]]; then
Martin Stransky 2d9afc
	echo "You requested that your information was NOT automatically uploaded to the pastebin"
Martin Stransky 2d9afc
	echo ""
Martin Stransky 2d9afc
	echo "Your ALSA information can be seen by looking in $FILE"
Martin Stransky 2d9afc
	echo ""
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
if [[ -z $NOUPLOAD ]]; then
Martin Stransky 2d9afc
echo "Your ALSA information is located at $FINAL_URL"
Martin Stransky 2d9afc
echo "Please inform the person helping you."
Martin Stransky 2d9afc
echo ""
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
	#We posted the file to pastebin.ca , so we dont need it anymore. delete it.
Martin Stransky 2d9afc
	if [ -z $KEEP_FILES ]
Martin Stransky 2d9afc
	then
Martin Stransky 2d9afc
		rm $FILE 
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
#We couldnt find a suitable wget, so tell the user to upload manually.
Martin Stransky 2d9afc
else
Martin Stransky 2d9afc
	if [[ -z $DIALOG ]]
Martin Stransky 2d9afc
	then
Martin Stransky 2d9afc
		echo ""
Martin Stransky 2d9afc
		echo "Could not automatically upload output to http://www.pastebin.ca"
Martin Stransky 2d9afc
		echo "Possible reasons are:"
Martin Stransky 2d9afc
		echo "    1. Couldnt find 'wget' in your PATH"
Martin Stransky 2d9afc
		echo "    2. Your version of wget is less than 1.8.2"
Martin Stransky 2d9afc
		echo ""
Martin Stransky 2d9afc
		echo "Please manually upload $FILE to http://www.pastebin.ca/upload.php and submit your post."
Martin Stransky 2d9afc
		echo ""
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
	if [[ -n $DIALOG ]]
Martin Stransky 2d9afc
	then
Martin Stransky 2d9afc
		dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n    1. Couldn't find 'wget' in your PATH\n    2. Your version of wget is less than 1.8.2\n\nPlease manually upload $FILE to http://www.pastebin.ca/upload.php and submit your post." 25 100
Martin Stransky 2d9afc
	fi
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
#Clean up the temp files
Martin Stransky 2d9afc
if [ -z $KEEP_FILES ]
Martin Stransky 2d9afc
then
Martin Stransky 2d9afc
	cleanup
Martin Stransky 2d9afc
fi
Martin Stransky 2d9afc
Martin Stransky 2d9afc
fi # proceed