1#!/bin/bash 2 3SCRIPT_VERSION=0.5.3 4CHANGELOG='https://www.alsa-project.org/alsa-info.sh.changelog' 5 6################################################################################# 7#Copyright (C) 2007 Free Software Foundation. 8 9#This program is free software; you can redistribute it and/or modify 10#it under the terms of the GNU General Public License as published by 11#the Free Software Foundation; either version 2 of the License, or 12#(at your option) any later version. 13 14#This program is distributed in the hope that it will be useful, 15#but WITHOUT ANY WARRANTY; without even the implied warranty of 16#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17#GNU General Public License for more details. 18 19#You should have received a copy of the GNU General Public License 20#along with this program; if not, write to the Free Software 21#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22 23################################################################################## 24 25# The script was written for 2 main reasons: 26# 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user. 27# 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them. 28 29#Set the locale (this may or may not be a good idea.. let me know) 30export LC_ALL=C 31 32# Change the PATH variable, so we can run lspci (needed for some distros) 33PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin" 34BGTITLE="ALSA-Info v $SCRIPT_VERSION" 35PASTEBINKEY='C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc' 36 37WGET="$(command -v wget)" 38REQUIRES=(mktemp grep pgrep awk date uname cat sort dmesg amixer alsactl) 39 40# 41# Define some simple functions 42# 43 44update() { 45 test -z "$WGET" || test ! -x "$WGET" && return 46 47 SHFILE=$(mktemp -t alsa-info.XXXXXXXXXX) || exit 1 48 wget -O $SHFILE "https://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1 49 REMOTE_VERSION=$(grep SCRIPT_VERSION $SHFILE | head -n1 | sed 's/.*=//') 50 if [ -s "$SHFILE" ] && [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then 51 if [[ -n $DIALOG ]] 52 then 53 OVERWRITE= 54 if [ -w $0 ]; then 55 dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to install it?\nNOTICE: The original file $0 will be overwritten!" 0 0 56 DIALOG_EXIT_CODE=$? 57 if [[ $DIALOG_EXIT_CODE = 0 ]]; then 58 OVERWRITE=yes 59 fi 60 fi 61 if [ -z "$OVERWRITE" ]; then 62 dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to download it?" 0 0 63 DIALOG_EXIT_CODE=$? 64 fi 65 if [[ $DIALOG_EXIT_CODE = 0 ]] 66 then 67 echo "Newer version detected: $REMOTE_VERSION" 68 echo "To view the ChangeLog, please visit $CHANGELOG" 69 if [ "$OVERWRITE" = "yes" ]; then 70 cp $SHFILE $0 71 echo "ALSA-Info script has been updated to v $REMOTE_VERSION" 72 echo "Please re-run the script" 73 rm $SHFILE 2>/dev/null 74 else 75 echo "ALSA-Info script has been downloaded as $SHFILE." 76 echo "Please re-run the script from new location." 77 fi 78 exit 79 else 80 rm $SHFILE 2>/dev/null 81 fi 82 else 83 echo "Newer version detected: $REMOTE_VERSION" 84 echo "To view the ChangeLog, please visit $CHANGELOG" 85 if [ -w $0 ]; then 86 echo "The original file $0 will be overwritten!" 87 echo -n "If you do not like to proceed, press Ctrl-C now.." ; read inp 88 cp $SHFILE $0 89 echo "ALSA-Info script has been updated. Please re-run it." 90 rm $SHFILE 2>/dev/null 91 else 92 echo "ALSA-Info script has been downloaded $SHFILE." 93 echo "Please, re-run it from new location." 94 fi 95 exit 96 fi 97 else 98 rm $SHFILE 2>/dev/null 99 fi 100} 101 102cleanup() { 103 if [ -n "$TEMPDIR" ] && [ "$KEEP_FILES" != "yes" ]; then 104 rm -rf "$TEMPDIR" 2>/dev/null 105 fi 106 test -n "$KEEP_OUTPUT" || rm -f "$NFILE" 107} 108 109 110withaplay() { 111 echo "!!Aplay/Arecord output" >> "$FILE" 112 echo "!!--------------------" >> "$FILE" 113 echo "" >> "$FILE" 114 echo "APLAY" >> "$FILE" 115 echo "" >> "$FILE" 116 aplay -l >> "$FILE" 2>&1 117 echo "" >> "$FILE" 118 echo "ARECORD" >> "$FILE" 119 echo "" >> "$FILE" 120 arecord -l >> "$FILE" 2>&1 121 echo "" >> "$FILE" 122} 123 124withmodules() { 125 echo "!!All Loaded Modules" >> "$FILE" 126 echo "!!------------------" >> "$FILE" 127 echo "" >> "$FILE" 128 awk '{print $1}' < /proc/modules | sort >> "$FILE" 129 echo "" >> "$FILE" 130 echo "" >> "$FILE" 131} 132 133withamixer() { 134 echo "!!Amixer output" >> "$FILE" 135 echo "!!-------------" >> "$FILE" 136 echo "" >> "$FILE" 137 for f in /proc/asound/card*/id; do 138 [ -f "$f" ] && read -r CARD_NAME < "$f" || continue 139 echo "!!-------Mixer controls for card $CARD_NAME" >> "$FILE" 140 echo "" >> "$FILE" 141 amixer -c "$CARD_NAME" info >> "$FILE" 2>&1 142 amixer -c "$CARD_NAME" >> "$FILE" 2>&1 143 echo "" >> "$FILE" 144 done 145 echo "" >> "$FILE" 146} 147 148withalsactl() { 149 echo "!!Alsactl output" >> "$FILE" 150 echo "!!--------------" >> "$FILE" 151 echo "" >> "$FILE" 152 alsactl -f "$TEMPDIR/alsactl.tmp" store 153 echo "--startcollapse--" >> "$FILE" 154 cat "$TEMPDIR/alsactl.tmp" >> "$FILE" 155 echo "--endcollapse--" >> "$FILE" 156 echo "" >> "$FILE" 157 echo "" >> "$FILE" 158} 159 160withdevices() { 161 echo "!!ALSA Device nodes" >> "$FILE" 162 echo "!!-----------------" >> "$FILE" 163 echo "" >> "$FILE" 164 ls -la /dev/snd/* >> "$FILE" 165 echo "" >> "$FILE" 166 echo "" >> "$FILE" 167} 168 169withconfigs() { 170if [[ -e "$HOME/.asoundrc" ]] || [[ -e "/etc/asound.conf" ]] || [[ -e "$HOME/.asoundrc.asoundconf" ]]; then 171 echo "!!ALSA configuration files" >> "$FILE" 172 echo "!!------------------------" >> "$FILE" 173 echo "" >> "$FILE" 174 175 #Check for ~/.asoundrc 176 if [[ -e "$HOME/.asoundrc" ]] 177 then 178 echo "!!User specific config file (~/.asoundrc)" >> "$FILE" 179 echo "" >> "$FILE" 180 cat "$HOME/.asoundrc" >> "$FILE" 181 echo "" >> "$FILE" 182 echo "" >> "$FILE" 183 fi 184 #Check for .asoundrc.asoundconf (seems to be Ubuntu specific) 185 if [[ -e "$HOME/.asoundrc.asoundconf" ]] 186 then 187 echo "!!asoundconf-generated config file" >> "$FILE" 188 echo "" >> "$FILE" 189 cat "$HOME/.asoundrc.asoundconf" >> "$FILE" 190 echo "" >> "$FILE" 191 echo "" >> "$FILE" 192 fi 193 #Check for /etc/asound.conf 194 if [[ -e /etc/asound.conf ]] 195 then 196 echo "!!System wide config file (/etc/asound.conf)" >> "$FILE" 197 echo "" >> "$FILE" 198 cat /etc/asound.conf >> "$FILE" 199 echo "" >> "$FILE" 200 echo "" >> "$FILE" 201 fi 202fi 203} 204 205withsysfs() { 206 local i f 207 local printed="" 208 for i in /sys/class/sound/*; do 209 case "$i" in 210 */hwC?D?) 211 if [ -f "$i/init_pin_configs" ]; then 212 if [ -z "$printed" ]; then 213 echo "!!Sysfs Files" >> "$FILE" 214 echo "!!-----------" >> "$FILE" 215 echo "" >> "$FILE" 216 fi 217 for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs hints; do 218 echo "$i/$f:" >> "$FILE" 219 cat "$i/$f" >> "$FILE" 220 echo >> "$FILE" 221 done 222 printed=yes 223 fi 224 ;; 225 esac 226 done 227 if [ -n "$printed" ]; then 228 echo "" >> "$FILE" 229 fi 230} 231 232withdmesg() { 233 echo "!!ALSA/HDA dmesg" >> "$FILE" 234 echo "!!--------------" >> "$FILE" 235 echo "" >> "$FILE" 236 dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|audio|hda.codec|hda.intel' >> "$FILE" 237 echo "" >> "$FILE" 238 echo "" >> "$FILE" 239} 240 241withpackages() { 242 local RPM 243 local DPKG 244 RPM="$(command -v rpmquery)" 245 DPKG="$(command -v dpkg)" 246 [ -n "$RPM$DPKG" ] || return 247 local PATTERN='(alsa-(lib|oss|plugins|tools|(topology|ucm)-conf|utils|sof-firmware)|libalsa|tinycompress|sof-firmware)' 248 { 249 echo "!!Packages installed" 250 echo "!!--------------------" 251 echo "" 252 { 253 if [ -x "$RPM" ]; then "$RPM" -a; fi 254 if [ -x "$DPKG" ]; then "$DPKG" -l; fi 255 } | grep -E "$PATTERN" 256 echo "" 257 } >> "$FILE" 258} 259 260withall() { 261 withdevices 262 withconfigs 263 withaplay 264 withamixer 265 withalsactl 266 withmodules 267 withsysfs 268 withdmesg 269 withpackages 270 WITHALL=no 271} 272 273get_alsa_library_version() { 274 ALSA_LIB_VERSION="$(grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null | awk '{ print $3 }' | sed 's/"//g')" 275 276 if [ -z "$ALSA_LIB_VERSION" ]; then 277 if [ -f /etc/lsb-release ]; then 278 . /etc/lsb-release 279 case "$DISTRIB_ID" in 280 Ubuntu) 281 if command -v dpkg > /dev/null ; then 282 ALSA_LIB_VERSION="$(dpkg -l libasound2 | tail -1 | awk '{ print $3 }' | cut -f 1 -d -)" 283 fi 284 285 if [ "$ALSA_LIB_VERSION" = '<none>' ]; then 286 ALSA_LIB_VERSION="" 287 fi 288 return 289 ;; 290 *) 291 return 292 ;; 293 esac 294 elif [ -f /etc/debian_version ]; then 295 if command -v dpkg > /dev/null ; then 296 ALSA_LIB_VERSION="$(dpkg -l libasound2 | tail -1 | awk '{ print $3 }' | cut -f 1 -d -)" 297 fi 298 299 if [ "$ALSA_LIB_VERSION" = '<none>' ]; then 300 ALSA_LIB_VERSION="" 301 fi 302 return 303 fi 304 fi 305} 306 307# Basic requires 308for prg in "${REQUIRES[@]}"; do 309 t="$(command -v "$prg")" 310 if test -z "$t"; then 311 echo "This script requires $prg utility to continue." 312 exit 1 313 fi 314done 315 316# Run checks to make sure the programs we need are installed. 317LSPCI="$(command -v lspci)" 318TPUT="$(command -v tput)" 319DIALOG="$(command -v dialog)" 320 321# Check to see if sysfs is enabled in the kernel. We'll need this later on 322SYSFS="$(mount | grep sysfs | awk '{ print $3 }')" 323 324# Check modprobe config files for sound related options 325SNDOPTIONS="$(modprobe -c | sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p')" 326 327KEEP_OUTPUT= 328NFILE="" 329 330PASTEBIN="" 331WWWSERVICE='www.alsa-project.org' 332WELCOME=yes 333PROCEED=yes 334UPLOAD=ask 335REPEAT="" 336while [ -z "$REPEAT" ]; do 337REPEAT=no 338case "$1" in 339 --update|--help|--about) 340 WELCOME=no 341 PROCEED=no 342 ;; 343 --upload) 344 UPLOAD=yes 345 WELCOME=no 346 ;; 347 --no-upload) 348 UPLOAD=no 349 WELCOME=no 350 ;; 351 --pastebin) 352 PASTEBIN=yes 353 WWWSERVICE=pastebin 354 ;; 355 --no-dialog) 356 DIALOG="" 357 REPEAT="" 358 shift 359 ;; 360 --stdout) 361 DIALOG="" 362 WELCOME=no 363 ;; 364esac 365done 366 367 368#Script header output. 369if [ "$WELCOME" = yes ]; then 370greeting_message="\ 371 372This script visits the following commands/files to collect diagnostic 373information about your ALSA installation and sound related hardware. 374 375 dmesg 376 lspci 377 aplay 378 amixer 379 alsactl 380 rpm, dpkg 381 /proc/asound/ 382 /sys/class/sound/ 383 ~/.asoundrc (etc.) 384 385See '$0 --help' for command line options. 386" 387if [ -n "$DIALOG" ]; then 388 dialog --backtitle "$BGTITLE" \ 389 --title "ALSA-Info script v $SCRIPT_VERSION" \ 390 --msgbox "$greeting_message" 20 80 391else 392 echo "ALSA Information Script v $SCRIPT_VERSION" 393 echo "--------------------------------" 394 echo "$greeting_message" 395fi # dialog 396fi # WELCOME 397 398# Set the output file 399TEMPDIR="$(mktemp -t -d alsa-info.XXXXXXXXXX)" || exit 1 400FILE="$TEMPDIR/alsa-info.txt" 401if [ -z "$NFILE" ]; then 402 NFILE="$(mktemp -t alsa-info.txt.XXXXXXXXXX)" || exit 1 403fi 404 405trap cleanup 0 406 407if [ "$PROCEED" = yes ]; then 408 409if [ -z "$LSPCI" ]; then 410 if [ -d /sys/bus/pci ]; then 411 echo "This script requires lspci. Please install it, and re-run this script." 412 fi 413fi 414 415# Fetch the info and store in temp files/variables 416TSTAMP=$(LANG=C TZ=UTC date) 417DISTRO=$(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\|Pardus\|ALT" /etc/{issue,*release,*version}) 418read -r KERNEL_RELEASE KERNEL_MACHINE KERNEL_PROCESSOR KERNEL_OS < <(uname -rpmo) 419read -r KERNEL_VERSION < <(uname -v) 420if [[ "$KERNEL_VERSION" = *SMP* ]]; then KERNEL_SMP=Yes; else KERNEL_SMP=No; fi 421ALSA_DRIVER_VERSION=$(cat /proc/asound/version | head -n1 | awk '{ print $7 }' | sed 's/\.$//') 422get_alsa_library_version 423ALSA_UTILS_VERSION=$(amixer -v | awk '{ print $3 }') 424 425ESDINST=$(command -v esd) 426PWINST=$(command -v pipewire) 427PAINST=$(command -v pulseaudio) 428ARTSINST=$(command -v artsd) 429JACKINST=$(command -v jackd) 430JACK2INST=$(command -v jackdbus) 431ROARINST=$(command -v roard) 432DMIDECODE=$(command -v dmidecode) 433 434#Check for DMI data 435if [ -d /sys/class/dmi/id ]; then 436 # No root privileges are required when using sysfs method 437 DMI_SYSTEM_MANUFACTURER=$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) 438 DMI_SYSTEM_PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null) 439 DMI_SYSTEM_PRODUCT_VERSION=$(cat /sys/class/dmi/id/product_version 2>/dev/null) 440 DMI_SYSTEM_FIRMWARE_VERSION=$(cat /sys/class/dmi/id/bios_version 2>/dev/null) 441 DMI_SYSTEM_SKU=$(cat /sys/class/dmi/id/product_sku 2>/dev/null) 442 DMI_BOARD_VENDOR=$(cat /sys/class/dmi/id/board_vendor 2>/dev/null) 443 DMI_BOARD_NAME=$(cat /sys/class/dmi/id/board_name 2>/dev/null) 444elif [ -x $DMIDECODE ]; then 445 DMI_SYSTEM_MANUFACTURER=$($DMIDECODE -s system-manufacturer 2>/dev/null) 446 DMI_SYSTEM_PRODUCT_NAME=$($DMIDECODE -s system-product-name 2>/dev/null) 447 DMI_SYSTEM_PRODUCT_VERSION=$($DMIDECODE -s system-version 2>/dev/null) 448 DMI_SYSTEM_FIRMWARE_VERSION=$($DMIDECODE -s bios-version 2>/dev/null) 449 DMI_SYSTEM_SKU=$($DMIDECODE -s system-sku-number 2>/dev/null) 450 DMI_BOARD_VENDOR=$($DMIDECODE -s baseboard-manufacturer 2>/dev/null) 451 DMI_BOARD_NAME=$($DMIDECODE -s baseboard-product-name 2>/dev/null) 452fi 453 454# Check for ACPI device status 455if [ -d /sys/bus/acpi/devices ]; then 456 for f in /sys/bus/acpi/devices/*/status; do 457 ACPI_STATUS=$(cat $f 2>/dev/null); 458 if [[ "$ACPI_STATUS" -ne 0 ]]; then 459 echo $f $'\t' $ACPI_STATUS >>$TEMPDIR/acpidevicestatus.tmp; 460 fi 461 done 462fi 463 464awk '{ print $2 " (card " $1 ")" }' < /proc/asound/modules > $TEMPDIR/alsamodules.tmp 2> /dev/null 465cat /proc/asound/cards > $TEMPDIR/alsacards.tmp 466if [[ ! -z "$LSPCI" ]]; then 467 for class in 0401 0402 0403; do 468 lspci -vvnn -d "::$class" | sed -n '/^[^\t]/,+1p' 469 done > $TEMPDIR/lspci.tmp 470fi 471 472#Check for HDA-Intel cards codec#* 473cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null 474 475#Check for AC97 cards codec 476cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null 477cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null 478 479#Check for USB descriptors 480if [ -x /usr/bin/lsusb ]; then 481 for f in /proc/asound/card[0-9]*/usbbus; do 482 test -f "$f" || continue 483 id=$(sed 's@/@:@' $f) 484 lsusb -v -s $id >> $TEMPDIR/lsusb.tmp 2> /dev/null 485 done 486fi 487 488#Check for USB stream setup 489cat /proc/asound/card*/stream[0-9]* > $TEMPDIR/alsa-usbstream.tmp 2> /dev/null 490 491#Check for USB mixer setup 492cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null 493 494#Fetch the info, and put it in $FILE in a nice readable format. 495if [[ -z $PASTEBIN ]]; then 496echo "upload=true&script=true&cardinfo=" > $FILE 497else 498echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE 499fi 500echo "!!################################" >> $FILE 501echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE 502echo "!!################################" >> $FILE 503echo "" >> $FILE 504echo "!!Script ran on: $TSTAMP" >> $FILE 505echo "" >> $FILE 506echo "" >> $FILE 507echo "!!Linux Distribution" >> $FILE 508echo "!!------------------" >> $FILE 509echo "" >> $FILE 510echo $DISTRO >> $FILE 511echo "" >> $FILE 512echo "" >> $FILE 513echo "!!DMI Information" >> $FILE 514echo "!!---------------" >> $FILE 515echo "" >> $FILE 516echo "Manufacturer: $DMI_SYSTEM_MANUFACTURER" >> $FILE 517echo "Product Name: $DMI_SYSTEM_PRODUCT_NAME" >> $FILE 518echo "Product Version: $DMI_SYSTEM_PRODUCT_VERSION" >> $FILE 519echo "Firmware Version: $DMI_SYSTEM_FIRMWARE_VERSION" >> $FILE 520echo "System SKU: $DMI_SYSTEM_SKU" >> $FILE 521echo "Board Vendor: $DMI_BOARD_VENDOR" >> $FILE 522echo "Board Name: $DMI_BOARD_NAME" >> $FILE 523echo "" >> $FILE 524echo "" >> $FILE 525echo "!!ACPI Device Status Information" >> $FILE 526echo "!!---------------" >> $FILE 527echo "" >> $FILE 528cat $TEMPDIR/acpidevicestatus.tmp >> $FILE 529echo "" >> $FILE 530echo "" >> $FILE 531echo "!!Kernel Information" >> $FILE 532echo "!!------------------" >> $FILE 533echo "" >> $FILE 534echo "Kernel release: $KERNEL_VERSION" >> $FILE 535echo "Operating System: $KERNEL_OS" >> $FILE 536echo "Architecture: $KERNEL_MACHINE" >> $FILE 537echo "Processor: $KERNEL_PROCESSOR" >> $FILE 538echo "SMP Enabled: $KERNEL_SMP" >> $FILE 539echo "" >> $FILE 540echo "" >> $FILE 541echo "!!ALSA Version" >> $FILE 542echo "!!------------" >> $FILE 543echo "" >> $FILE 544echo "Driver version: $ALSA_DRIVER_VERSION" >> $FILE 545echo "Library version: $ALSA_LIB_VERSION" >> $FILE 546echo "Utilities version: $ALSA_UTILS_VERSION" >> $FILE 547echo "" >> $FILE 548echo "" >> $FILE 549echo "!!Loaded ALSA modules" >> $FILE 550echo "!!-------------------" >> $FILE 551echo "" >> $FILE 552cat $TEMPDIR/alsamodules.tmp >> $FILE 553echo "" >> $FILE 554echo "" >> $FILE 555echo "!!Sound Servers on this system" >> $FILE 556echo "!!----------------------------" >> $FILE 557echo "" >> $FILE 558if [[ -n $PWINST ]];then 559[[ $(pgrep '^(.*/)?pipewire$') ]] && PWRUNNING="Yes" || PWRUNNING="No" 560echo "PipeWire:" >> $FILE 561echo " Installed - Yes ($PWINST)" >> $FILE 562echo " Running - $PWRUNNING" >> $FILE 563echo "" >> $FILE 564fi 565if [[ -n $PAINST ]];then 566[[ $(pgrep '^(.*/)?pulseaudio$') ]] && PARUNNING="Yes" || PARUNNING="No" 567echo "Pulseaudio:" >> $FILE 568echo " Installed - Yes ($PAINST)" >> $FILE 569echo " Running - $PARUNNING" >> $FILE 570echo "" >> $FILE 571fi 572if [[ -n $ESDINST ]];then 573[[ $(pgrep '^(.*/)?esd$') ]] && ESDRUNNING="Yes" || ESDRUNNING="No" 574echo "ESound Daemon:" >> $FILE 575echo " Installed - Yes ($ESDINST)" >> $FILE 576echo " Running - $ESDRUNNING" >> $FILE 577echo "" >> $FILE 578fi 579if [[ -n $ARTSINST ]];then 580[[ $(pgrep '^(.*/)?artsd$') ]] && ARTSRUNNING="Yes" || ARTSRUNNING="No" 581echo "aRts:" >> $FILE 582echo " Installed - Yes ($ARTSINST)" >> $FILE 583echo " Running - $ARTSRUNNING" >> $FILE 584echo "" >> $FILE 585fi 586if [[ -n $JACKINST ]];then 587[[ $(pgrep '^(.*/)?jackd$') ]] && JACKRUNNING="Yes" || JACKRUNNING="No" 588echo "Jack:" >> $FILE 589echo " Installed - Yes ($JACKINST)" >> $FILE 590echo " Running - $JACKRUNNING" >> $FILE 591echo "" >> $FILE 592fi 593if [[ -n $JACK2INST ]];then 594[[ $(pgrep '^(.*/)?jackdbus$') ]] && JACK2RUNNING="Yes" || JACK2RUNNING="No" 595echo "Jack2:" >> $FILE 596echo " Installed - Yes ($JACK2INST)" >> $FILE 597echo " Running - $JACK2RUNNING" >> $FILE 598echo "" >> $FILE 599fi 600if [[ -n $ROARINST ]];then 601[[ $(pgrep '^(.*/)?roard$') ]] && ROARRUNNING="Yes" || ROARRUNNING="No" 602echo "RoarAudio:" >> $FILE 603echo " Installed - Yes ($ROARINST)" >> $FILE 604echo " Running - $ROARRUNNING" >> $FILE 605echo "" >> $FILE 606fi 607if [[ -z "$PAINST" && -z "$ESDINST" && -z "$ARTSINST" && -z "$JACKINST" && -z "$ROARINST" ]];then 608echo "No sound servers found." >> $FILE 609echo "" >> $FILE 610fi 611echo "" >> $FILE 612echo "!!Soundcards recognised by ALSA" >> $FILE 613echo "!!-----------------------------" >> $FILE 614echo "" >> $FILE 615cat $TEMPDIR/alsacards.tmp >> $FILE 616echo "" >> $FILE 617echo "" >> $FILE 618 619if [[ ! -z "$LSPCI" ]]; then 620echo "!!PCI Soundcards installed in the system" >> $FILE 621echo "!!--------------------------------------" >> $FILE 622echo "" >> $FILE 623cat $TEMPDIR/lspci.tmp >> $FILE 624echo "" >> $FILE 625echo "" >> $FILE 626fi 627 628if [ "$SNDOPTIONS" ]; then 629echo "!!Modprobe options (Sound related)" >> $FILE 630echo "!!--------------------------------" >> $FILE 631echo "" >> $FILE 632modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE 633echo "" >> $FILE 634echo "" >> $FILE 635fi 636 637if [ -d "$SYSFS" ]; then 638 echo "!!Loaded sound module options" >> $FILE 639 echo "!!---------------------------" >> $FILE 640 echo "" >> $FILE 641 for mod in $(cat /proc/asound/modules | awk '{ print $2 }'); do 642 echo "!!Module: $mod" >> $FILE 643 for params in $(echo $SYSFS/module/$mod/parameters/*); do 644 echo -ne "\t" 645 value=$(cat $params) 646 echo "$params : $value" | sed 's:.*/::' 647 done >> $FILE 648 echo "" >> $FILE 649 done 650 echo "" >> $FILE 651 echo "!!Sysfs card info" >> $FILE 652 echo "!!---------------" >> $FILE 653 echo "" >> $FILE 654 for cdir in $(echo $SYSFS/class/sound/card*); do 655 echo "!!Card: $cdir" >> $FILE 656 driver=$(readlink -f "$cdir/device/driver") 657 echo "Driver: $driver" >> $FILE 658 echo "Tree:" >> $FILE 659 tree --noreport $cdir -L 2 | sed -e 's/^/\t/g' >> $FILE 660 echo "" >> $FILE 661 done 662 echo "" >> $FILE 663 if [ -d $SYSFS/class/sound/ctl-led ]; then 664 echo "!!Sysfs ctl-led info" >> $FILE 665 echo "!!---------------" >> $FILE 666 echo "" >> $FILE 667 for path in $(echo $SYSFS/class/sound/ctl-led/[ms][ip]*/card*); do 668 echo "!!CTL-LED: $path" >> $FILE 669 if [ -r "$path/list" ]; then 670 list=$(cat "$path/list") 671 echo "List: $list" >> $FILE 672 fi 673 #echo "Tree:" >> $FILE 674 #tree --noreport $path -L 2 | sed -e 's/^/\t/g' >> $FILE 675 echo "" >> $FILE 676 done 677 fi 678fi 679 680if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ]; then 681 echo "!!HDA-Intel Codec information" >> $FILE 682 echo "!!---------------------------" >> $FILE 683 echo "--startcollapse--" >> $FILE 684 echo "" >> $FILE 685 cat $TEMPDIR/alsa-hda-intel.tmp >> $FILE 686 echo "--endcollapse--" >> $FILE 687 echo "" >> $FILE 688 echo "" >> $FILE 689fi 690 691if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then 692 echo "!!AC97 Codec information" >> $FILE 693 echo "!!----------------------" >> $FILE 694 echo "--startcollapse--" >> $FILE 695 echo "" >> $FILE 696 cat $TEMPDIR/alsa-ac97.tmp >> $FILE 697 echo "" >> $FILE 698 cat $TEMPDIR/alsa-ac97-regs.tmp >> $FILE 699 echo "--endcollapse--" >> $FILE 700 echo "" >> $FILE 701 echo "" >> $FILE 702fi 703 704if [ -s "$TEMPDIR/lsusb.tmp" ]; then 705 echo "!!USB Descriptors" >> $FILE 706 echo "!!---------------" >> $FILE 707 echo "--startcollapse--" >> $FILE 708 cat $TEMPDIR/lsusb.tmp >> $FILE 709 echo "--endcollapse--" >> $FILE 710 echo "" >> $FILE 711 echo "" >> $FILE 712fi 713 714if [ -s "$TEMPDIR/alsa-usbstream.tmp" ]; then 715 echo "!!USB Stream information" >> $FILE 716 echo "!!----------------------" >> $FILE 717 echo "--startcollapse--" >> $FILE 718 echo "" >> $FILE 719 cat $TEMPDIR/alsa-usbstream.tmp >> $FILE 720 echo "--endcollapse--" >> $FILE 721 echo "" >> $FILE 722 echo "" >> $FILE 723fi 724 725if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then 726 echo "!!USB Mixer information" >> $FILE 727 echo "!!---------------------" >> $FILE 728 echo "--startcollapse--" >> $FILE 729 echo "" >> $FILE 730 cat $TEMPDIR/alsa-usbmixer.tmp >> $FILE 731 echo "--endcollapse--" >> $FILE 732 echo "" >> $FILE 733 echo "" >> $FILE 734fi 735 736#If no command line options are specified, then run as though --with-all was specified 737if [ -z "$1" ]; then 738 update 739fi 740 741fi # proceed 742 743#loop through command line arguments, until none are left. 744if [ -n "$1" ]; then 745 until [ -z "$1" ] 746 do 747 case "$1" in 748 --pastebin) 749 update 750 ;; 751 --update) 752 update 753 exit 754 ;; 755 --upload) 756 UPLOAD=yes 757 ;; 758 --no-upload) 759 UPLOAD=no 760 ;; 761 --output) 762 shift 763 NFILE="$1" 764 KEEP_OUTPUT=yes 765 ;; 766 --debug) 767 echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted" 768 KEEP_FILES=yes 769 echo "" 770 ;; 771 --with-all) 772 withall 773 ;; 774 --with-aplay) 775 withaplay 776 WITHALL=no 777 ;; 778 --with-amixer) 779 withamixer 780 WITHALL=no 781 ;; 782 --with-alsactl) 783 withalsactl 784 WITHALL=no 785 ;; 786 --with-devices) 787 withdevices 788 WITHALL=no 789 ;; 790 --with-dmesg) 791 withdmesg 792 WITHALL=no 793 ;; 794 --with-configs) 795 withconfigs 796 WITHALL=no 797 ;; 798 --with-packages) 799 withpackages 800 WITHALL=no 801 ;; 802 --stdout) 803 UPLOAD=no 804 if [ -z "$WITHALL" ]; then 805 withall 806 fi 807 cat "$FILE" 808 rm "$FILE" 809 exit 810 ;; 811 --about) 812 echo "Written/Tested by the following users of #alsa on irc.freenode.net:" 813 echo "" 814 echo " wishie - Script author and developer / Testing" 815 echo " crimsun - Various script ideas / Testing" 816 echo " gnubien - Various script ideas / Testing" 817 echo " GrueMaster - HDA Intel specific items / Testing" 818 echo " olegfink - Script update function" 819 echo " TheMuso - display to stdout functionality" 820 exit 0 821 ;; 822 *) 823 echo "alsa-info.sh version $SCRIPT_VERSION" 824 echo "" 825 echo "Available options:" 826 echo " --with-aplay (includes the output of aplay -l)" 827 echo " --with-amixer (includes the output of amixer)" 828 echo " --with-alsactl (includes the output of alsactl)" 829 echo " --with-configs (includes the output of ~/.asoundrc and" 830 echo " /etc/asound.conf if they exist)" 831 echo " --with-devices (shows the device nodes in /dev/snd/)" 832 echo " --with-dmesg (shows the ALSA/HDA kernel messages)" 833 echo " --with-packages (includes known packages installed)" 834 echo "" 835 echo " --output FILE (specify the file to output for no-upload mode)" 836 echo " --update (check server for script updates)" 837 echo " --upload (upload contents to remote server)" 838 echo " --no-upload (do not upload contents to remote server)" 839 echo " --pastebin (use 'https://pastebin.ca') as remote server" 840 echo " instead www.alsa-project.org" 841 echo " --stdout (print alsa information to standard output" 842 echo " instead of a file)" 843 echo " --about (show some information about the script)" 844 echo " --debug (will run the script as normal, but will not" 845 echo " delete ${FILE})" 846 exit 0 847 ;; 848 esac 849 shift 1 850 done 851fi 852 853if [ "$PROCEED" = no ]; then 854 exit 1 855fi 856 857if [ -z "$WITHALL" ]; then 858 withall 859fi 860 861# Check if wget is installed, and supports --post-file. 862if ! wget --help 2>/dev/null | grep -q post-file; then 863 # We couldn't find a suitable wget. If --upload was passed, tell the user to upload manually. 864 if [ "$UPLOAD" != yes ]; then 865 : 866 elif [ -n "$DIALOG" ]; then 867 if [ -z "$PASTEBIN" ]; then 868 dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to 'https://www.alsa-project.org'.\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 $NFILE to 'https://www.alsa-project.org/cardinfo-db' and submit your post." 25 100 869 else 870 dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to 'https://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 $NFILE to 'https://www.pastebin.ca/upload.php' and submit your post." 25 100 871 fi 872 else 873 if [ -z "$PASTEBIN" ]; then 874 echo "" 875 echo "Could not automatically upload output to 'https://www.alsa-project.org'" 876 echo "Possible reasons are:" 877 echo " 1. Couldn't find 'wget' in your PATH" 878 echo " 2. Your version of wget is less than 1.8.2" 879 echo "" 880 echo "Please manually upload $NFILE to 'https://www.alsa-project.org/cardinfo-db' and submit your post." 881 echo "" 882 else 883 echo "" 884 echo "Could not automatically upload output to 'https://www.pastebin.ca'" 885 echo "Possible reasons are:" 886 echo " 1. Couldn't find 'wget' in your PATH" 887 echo " 2. Your version of wget is less than 1.8.2" 888 echo "" 889 echo "Please manually upload $NFILE to 'https://www.pastebin.ca/upload.php' and submit your post." 890 echo "" 891 fi 892 fi 893 UPLOAD=no 894fi 895 896if [ "$UPLOAD" = ask ]; then 897 if [ -n "$DIALOG" ]; then 898 dialog --backtitle "$BGTITLE" --title "Information collected" --yes-label " UPLOAD / SHARE " --no-label " SAVE LOCALLY " --defaultno --yesno "\n\nAutomatically upload ALSA information to $WWWSERVICE?" 10 80 899 DIALOG_EXIT_CODE="$?" 900 if [ "$DIALOG_EXIT_CODE" != 0 ]; then 901 UPLOAD=no 902 else 903 UPLOAD=yes 904 fi 905 else 906 echo -n "Automatically upload ALSA information to $WWWSERVICE? [y/N] : " 907 read -e CONFIRM 908 if [ "$CONFIRM" != y ]; then 909 UPLOAD=no 910 else 911 UPLOAD=yes 912 fi 913 fi 914 915fi 916 917if [ "$UPLOAD" = no ]; then 918 919 mv -f "$FILE" "$NFILE" || exit 1 920 KEEP_OUTPUT=yes 921 922 if [[ -n "$DIALOG" ]] 923 then 924 dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "\n\nYour ALSA information is in $NFILE" 10 60 925 else 926 echo "" 927 echo "Your ALSA information is in $NFILE" 928 echo "" 929 fi 930 931 exit 932 933fi # UPLOAD 934 935if [[ -n "$DIALOG" ]] 936then 937 dialog --backtitle "$BGTITLE" --infobox "Uploading information to $WWWSERVICE ..." 6 70 938else 939 echo -n "Uploading information to $WWWSERVICE ..." 940fi 941 942if [[ -z "$PASTEBIN" ]]; then 943 wget -O - --tries=5 --timeout=60 --post-file="$FILE" 'https://www.alsa-project.org/cardinfo-db/' &> "$TEMPDIR/wget.tmp" 944else 945 wget -O - --tries=5 --timeout=60 --post-file="$FILE" 'https://pastebin.ca/quiet-paste.php?api='"${PASTEBINKEY}"'&encrypt=t&encryptpw=blahblah' &> "$TEMPDIR/wget.tmp" 946fi 947 948if [ "$?" -ne 0 ]; then 949 mv -f "$FILE" "$NFILE" || exit 1 950 KEEP_OUTPUT=yes 951 952 if [ -n "$DIALOG" ]; then 953 dialog --backtitle "$BGTITLE" --title "Information not uploaded" --msgbox "An error occurred while contacting $WWWSERVICE.\n Your information was NOT automatically uploaded.\n\nYour ALSA information is in $NFILE" 10 100 954 else 955 echo "" 956 echo "An error occurred while contacting $WWWSERVICE." 957 echo "Your information was NOT automatically uploaded." 958 echo "" 959 echo "Your ALSA information is in $NFILE" 960 echo "" 961 fi 962 963 exit 964fi 965 966if [ -n "$DIALOG" ]; then 967 968dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100 969DIALOG_EXIT_CODE="$?" 970if [ "$DIALOG_EXIT_CODE" = 0 ]; then 971 grep -v alsa-info.txt "$FILE" > "$TEMPDIR/uploaded.txt" 972 dialog --backtitle "$BGTITLE" --textbox "$TEMPDIR/uploaded.txt" 0 0 973fi 974 975clear 976 977# no dialog 978else 979 980echo -e " Done!" 981echo "" 982 983fi # dialog 984 985if [ -z "$PASTEBIN" ]; then 986 FINAL_URL="$(grep 'SUCCESS:' "$TEMPDIR/wget.tmp" | cut -d ' ' -f 2)" 987else 988 FINAL_URL="$(grep 'SUCCESS:' "$TEMPDIR/wget.tmp" | sed -n 's/.*\:\([0-9]\+\).*/https:\/\/pastebin.ca\/\1/p')" 989fi 990 991# See if tput is available, and use it if it is. 992if [ -x "$TPUT" ]; then 993 FINAL_URL="$(tput setaf 1; printf '%s' "$FINAL_URL"; tput sgr0)" 994fi 995 996# Output the URL of the uploaded file. 997echo "Your ALSA information is located at $FINAL_URL" 998echo "Please inform the person helping you." 999echo "" 1000