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