Initial commit

This commit is contained in:
Abhay Rana 2012-01-28 12:44:33 +05:30
commit 1c452ac2c1
18 changed files with 3482 additions and 0 deletions

928
alsa-info.sh Executable file
View File

@ -0,0 +1,928 @@
#!/bin/bash
SCRIPT_VERSION=0.4.60
CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog"
#################################################################################
#Copyright (C) 2007 Free Software Foundation.
#This program is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
##################################################################################
#The script was written for 2 main reasons:
# 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user.
# 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them.
#Set the locale (this may or may not be a good idea.. let me know)
export LC_ALL=C
#Change the PATH variable, so we can run lspci (needed for some distros)
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
BGTITLE="ALSA-Info v $SCRIPT_VERSION"
PASTEBINKEY="C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc"
#Define some simple functions
pbcheck(){
[[ $UPLOAD = "no" ]] && return
if [[ -z $PASTEBIN ]]; then
[[ $(ping -c1 www.alsa-project.org) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes"
else
[[ $(ping -c1 www.pastebin.ca) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes"
fi
}
update() {
SHFILE=`mktemp -t alsa-info.XXXXXXXXXX` || exit 1
wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1
REMOTE_VERSION=`grep SCRIPT_VERSION $SHFILE |head -n1 |sed 's/.*=//'`
if [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then
if [[ -n $DIALOG ]]
then
OVERWRITE=
if [ -w $0 ]; then
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
DIALOG_EXIT_CODE=$?
if [[ $DIALOG_EXIT_CODE = 0 ]]; then
OVERWRITE=yes
fi
fi
if [ -z "$OVERWRITE" ]; then
dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to download it?" 0 0
DIALOG_EXIT_CODE=$?
fi
if [[ $DIALOG_EXIT_CODE = 0 ]]
then
echo "Newer version detected: $REMOTE_VERSION"
echo "To view the ChangeLog, please visit $CHANGELOG"
if [ "$OVERWRITE" = "yes" ]; then
cp $SHFILE $0
echo "ALSA-Info script has been updated to v $REMOTE_VERSION"
echo "Please re-run the script"
rm $SHFILE 2>/dev/null
else
echo "ALSA-Info script has been downloaded as $SHFILE."
echo "Please re-run the script from new location."
fi
exit
else
rm $SHFILE 2>/dev/null
fi
else
echo "Newer version detected: $REMOTE_VERSION"
echo "To view the ChangeLog, please visit $CHANGELOG"
if [ -w $0 ]; then
echo "The original file $0 will be overwritten!"
echo -n "If you do not like to proceed, press Ctrl-C now.." ; read inp
cp $SHFILE $0
echo "ALSA-Info script has been updated. Please re-run it."
rm $SHFILE 2>/dev/null
else
echo "ALSA-Info script has been downloaded $SHFILE."
echo "Please, re-run it from new location."
fi
exit
fi
else
rm $SHFILE 2>/dev/null
fi
}
cleanup() {
if [ -n "$TEMPDIR" -a "$KEEP_FILES" != "yes" ]; then
rm -rf "$TEMPDIR" 2>/dev/null
fi
test -n "$KEEP_OUTPUT" || rm -f "$NFILE"
}
withaplay() {
echo "!!Aplay/Arecord output" >> $FILE
echo "!!------------" >> $FILE
echo "" >> $FILE
echo "APLAY" >> $FILE
echo "" >> $FILE
aplay -l >> $FILE 2>&1
echo "" >> $FILE
echo "ARECORD" >> $FILE
echo "" >> $FILE
arecord -l >> $FILE 2>&1
echo "" >> $FILE
}
withlsmod() {
echo "!!All Loaded Modules" >> $FILE
echo "!!------------------" >> $FILE
echo "" >> $FILE
lsmod |awk {'print $1'} >> $FILE
echo "" >> $FILE
echo "" >> $FILE
}
withamixer() {
echo "!!Amixer output" >> $FILE
echo "!!-------------" >> $FILE
echo "" >> $FILE
for i in `grep "]: " /proc/asound/cards | awk -F ' ' '{ print $1} '` ; do
CARD_NAME=`grep "^ *$i " $TEMPDIR/alsacards.tmp|awk {'print $2'}`
echo "!!-------Mixer controls for card $i $CARD_NAME]" >> $FILE
echo "" >>$FILE
amixer -c$i info>> $FILE 2>&1
amixer -c$i>> $FILE 2>&1
echo "" >> $FILE
done
echo "" >> $FILE
}
withalsactl() {
echo "!!Alsactl output" >> $FILE
echo "!!-------------" >> $FILE
echo "" >> $FILE
exe=""
if [ -x /usr/sbin/alsactl ]; then
exe="/usr/sbin/alsactl"
fi
if [ -x /usr/local/sbin/alsactl ]; then
exe="/usr/local/sbin/alsactl"
fi
if [ -z "$exe" ]; then
exe=`whereis alsactl | cut -d ' ' -f 2`
fi
$exe -f $TEMPDIR/alsactl.tmp store
echo "--startcollapse--" >> $FILE
cat $TEMPDIR/alsactl.tmp >> $FILE
echo "--endcollapse--" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
}
withdevices() {
echo "!!ALSA Device nodes" >> $FILE
echo "!!-----------------" >> $FILE
echo "" >> $FILE
ls -la /dev/snd/* >> $FILE
echo "" >> $FILE
echo "" >> $FILE
}
withconfigs() {
if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] || [[ -e $HOME/.asoundrc.asoundconf ]]
then
echo "!!ALSA configuration files" >> $FILE
echo "!!------------------------" >> $FILE
echo "" >> $FILE
#Check for ~/.asoundrc
if [[ -e $HOME/.asoundrc ]]
then
echo "!!User specific config file (~/.asoundrc)" >> $FILE
echo "" >> $FILE
cat $HOME/.asoundrc >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
#Check for .asoundrc.asoundconf (seems to be Ubuntu specific)
if [[ -e $HOME/.asoundrc.asoundconf ]]
then
echo "!!asoundconf-generated config file" >> $FILE
echo "" >> $FILE
cat $HOME/.asoundrc.asoundconf >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
#Check for /etc/asound.conf
if [[ -e /etc/asound.conf ]]
then
echo "!!System wide config file (/etc/asound.conf)" >> $FILE
echo "" >> $FILE
cat /etc/asound.conf >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
fi
}
withsysfs() {
local i f
local printed=""
for i in /sys/class/sound/*; do
case "$i" in
*/hwC?D?)
if [ -f $i/init_pin_configs ]; then
if [ -z "$printed" ]; then
echo "!!Sysfs Files" >> $FILE
echo "!!-----------" >> $FILE
echo "" >> $FILE
fi
for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs; do
echo "$i/$f:" >> $FILE
cat $i/$f >> $FILE
echo >> $FILE
done
printed=yes
fi
;;
esac
done
if [ -n "$printed" ]; then
echo "" >> $FILE
fi
}
withdmesg() {
echo "!!ALSA/HDA dmesg" >> $FILE
echo "!!------------------" >> $FILE
echo "" >> $FILE
dmesg | grep -C1 -E 'ALSA|HDA|HDMI|sound|hda.codec|hda.intel' >> $FILE
echo "" >> $FILE
echo "" >> $FILE
}
withall() {
withdevices
withconfigs
withaplay
withamixer
withalsactl
withlsmod
withsysfs
withdmesg
}
get_alsa_library_version() {
ALSA_LIB_VERSION=`grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null|awk {'print $3'}|sed 's/"//g'`
if [ -z "$ALSA_LIB_VERSION" ]; then
if [ -f /etc/lsb-release ]; then
. /etc/lsb-release
case "$DISTRIB_ID" in
Ubuntu)
if which dpkg > /dev/null ; then
ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -`
fi
if [ "$ALSA_LIB_VERSION" = "<none>" ]; then
ALSA_LIB_VERSION=""
fi
return
;;
*)
return
;;
esac
elif [ -f /etc/debian_version ]; then
if which dpkg > /dev/null ; then
ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -`
fi
if [ "$ALSA_LIB_VERSION" = "<none>" ]; then
ALSA_LIB_VERSION=""
fi
return
fi
fi
}
#Run checks to make sure the programs we need are installed.
LSPCI=$(which lspci 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
TPUT=$(which tput 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null);
DIALOG=$(which dialog 2>/dev/null | sed 's|^[^/]*||' 2>/dev/null);
#Check to see if sysfs is enabled in the kernel. We'll need this later on
SYSFS=$(mount |grep sysfs|awk {'print $3'});
#Check modprobe config files for sound related options
SNDOPTIONS=$(modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p')
KEEP_OUTPUT=
NFILE=""
PASTEBIN=""
WWWSERVICE="www.alsa-project.org"
WELCOME="yes"
PROCEED="yes"
UPLOAD="ask"
REPEAT=""
while [ -z "$REPEAT" ]; do
REPEAT="no"
case "$1" in
--update|--help|--about)
WELCOME="no"
PROCEED="no"
;;
--upload)
UPLOAD="yes"
WELCOME="no"
;;
--no-upload)
UPLOAD="no"
WELCOME="no"
;;
--pastebin)
PASTEBIN="yes"
WWWSERVICE="pastebin"
;;
--no-dialog)
DIALOG=""
REPEAT=""
shift
;;
--stdout)
DIALOG=""
UPLOAD="no"
WELCOME="no"
TOSTDOUT="yes"
;;
esac
done
#Script header output.
if [ "$WELCOME" = "yes" ]; then
greeting_message="\
This script visits the following commands/files to collect diagnostic
information about your ALSA installation and sound related hardware.
dmesg
lspci
lsmod
aplay
amixer
alsactl
/proc/asound/
/sys/class/sound/
~/.asoundrc (etc.)
See '$0 --help' for command line options.
"
if [[ -n "$DIALOG" ]]; then
dialog --backtitle "$BGTITLE" \
--title "ALSA-Info script v $SCRIPT_VERSION" \
--msgbox "$greeting_message" 20 80
else
echo "ALSA Information Script v $SCRIPT_VERSION"
echo "--------------------------------"
echo "$greeting_message"
fi # dialog
fi # WELCOME
#Set the output file
TEMPDIR=`mktemp -t -d alsa-info.XXXXXXXXXX` || exit 1
FILE="$TEMPDIR/alsa-info.txt"
if [ -z "$NFILE" ]; then
NFILE=`mktemp -t alsa-info.txt.XXXXXXXXXX` || exit 1
fi
trap cleanup 0
if [ "$PROCEED" = "yes" ]; then
if [[ -z "$LSPCI" ]]
then
echo "This script requires lspci. Please install it, and re-run this script."
exit 0
fi
#Fetch the info and store in temp files/variables
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\|Pardus" /etc/{issue,*release,*version}`
KERNEL_VERSION=`uname -r`
KERNEL_PROCESSOR=`uname -p`
KERNEL_MACHINE=`uname -m`
KERNEL_OS=`uname -o`
[[ `uname -v |grep SMP` ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No"
ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'`
get_alsa_library_version
ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}`
VENDOR_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $3}'|awk {'print substr($0, 2);}' >$TEMPDIR/vendor_id.tmp`
DEVICE_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $4}'|awk {'print $1'} >$TEMPDIR/device_id.tmp`
LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 ))
ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
PAINST=$(which pulseaudio 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
ARTSINST=$(which artsd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
JACKINST=$(which jackd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
DMIDECODE=$(which dmidecode 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null)
#Check for DMI data
if [ -d /sys/class/dmi/id ]; then
# No root privileges are required when using sysfs method
DMI_SYSTEM_MANUFACTURER=$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)
DMI_SYSTEM_PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null)
DMI_SYSTEM_PRODUCT_VERSION=$(cat /sys/class/dmi/id/product_version 2>/dev/null)
elif [ -x $DMIDECODE ]; then
DMI_SYSTEM_MANUFACTURER=$($DMIDECODE -s system-manufacturer 2>/dev/null)
DMI_SYSTEM_PRODUCT_NAME=$($DMIDECODE -s system-product-name 2>/dev/null)
DMI_SYSTEM_PRODUCT_VERSION=$($DMIDECODE -s system-version 2>/dev/null)
fi
cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp
cat /proc/asound/cards >$TEMPDIR/alsacards.tmp
lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp
#Check for HDA-Intel cards codec#*
cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null
#Check for AC97 cards codec
cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null
cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null
#Check for USB mixer setup
cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null
#Fetch the info, and put it in $FILE in a nice readable format.
if [[ -z $PASTEBIN ]]; then
echo "upload=true&script=true&cardinfo=" > $FILE
else
echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE
fi
echo "!!################################" >> $FILE
echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE
echo "!!################################" >> $FILE
echo "" >> $FILE
echo "!!Script ran on: `LANG=C TZ=UTC date`" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!Linux Distribution" >> $FILE
echo "!!------------------" >> $FILE
echo "" >> $FILE
echo $DISTRO >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!DMI Information" >> $FILE
echo "!!---------------" >> $FILE
echo "" >> $FILE
echo "Manufacturer: $DMI_SYSTEM_MANUFACTURER" >> $FILE
echo "Product Name: $DMI_SYSTEM_PRODUCT_NAME" >> $FILE
echo "Product Version: $DMI_SYSTEM_PRODUCT_VERSION" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!Kernel Information" >> $FILE
echo "!!------------------" >> $FILE
echo "" >> $FILE
echo "Kernel release: $KERNEL_VERSION" >> $FILE
echo "Operating System: $KERNEL_OS" >> $FILE
echo "Architecture: $KERNEL_MACHINE" >> $FILE
echo "Processor: $KERNEL_PROCESSOR" >> $FILE
echo "SMP Enabled: $KERNEL_SMP" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!ALSA Version" >> $FILE
echo "!!------------" >> $FILE
echo "" >> $FILE
echo "Driver version: $ALSA_DRIVER_VERSION" >> $FILE
echo "Library version: $ALSA_LIB_VERSION" >> $FILE
echo "Utilities version: $ALSA_UTILS_VERSION" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!Loaded ALSA modules" >> $FILE
echo "!!-------------------" >> $FILE
echo "" >> $FILE
cat $TEMPDIR/alsamodules.tmp >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!Sound Servers on this system" >> $FILE
echo "!!----------------------------" >> $FILE
echo "" >> $FILE
if [[ -n $PAINST ]];then
[[ `pgrep '^(.*/)?pulseaudio$'` ]] && PARUNNING="Yes" || PARUNNING="No"
echo "Pulseaudio:" >> $FILE
echo " Installed - Yes ($PAINST)" >> $FILE
echo " Running - $PARUNNING" >> $FILE
echo "" >> $FILE
fi
if [[ -n $ESDINST ]];then
[[ `pgrep '^(.*/)?esd$'` ]] && ESDRUNNING="Yes" || ESDRUNNING="No"
echo "ESound Daemon:" >> $FILE
echo " Installed - Yes ($ESDINST)" >> $FILE
echo " Running - $ESDRUNNING" >> $FILE
echo "" >> $FILE
fi
if [[ -n $ARTSINST ]];then
[[ `pgrep '^(.*/)?artsd$'` ]] && ARTSRUNNING="Yes" || ARTSRUNNING="No"
echo "aRts:" >> $FILE
echo " Installed - Yes ($ARTSINST)" >> $FILE
echo " Running - $ARTSRUNNING" >> $FILE
echo "" >> $FILE
fi
if [[ -n $JACKINST ]];then
[[ `pgrep '^(.*/)?jackd$'` ]] && JACKRUNNING="Yes" || JACKRUNNING="No"
echo "Jack:" >> $FILE
echo " Installed - Yes ($JACKINST)" >> $FILE
echo " Running - $JACKRUNNING" >> $FILE
echo "" >> $FILE
fi
if [[ -z "$PAINST" && -z "$ESDINST" && -z "$ARTSINST" && -z "$JACKINST" ]];then
echo "No sound servers found." >> $FILE
echo "" >> $FILE
fi
echo "" >> $FILE
echo "!!Soundcards recognised by ALSA" >> $FILE
echo "!!-----------------------------" >> $FILE
echo "" >> $FILE
cat $TEMPDIR/alsacards.tmp >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!PCI Soundcards installed in the system" >> $FILE
echo "!!--------------------------------------" >> $FILE
echo "" >> $FILE
cat $TEMPDIR/lspci.tmp >> $FILE
echo "" >> $FILE
echo "" >> $FILE
echo "!!Advanced information - PCI Vendor/Device/Subsystem ID's" >> $FILE
echo "!!--------------------------------------------------------" >> $FILE
echo "" >> $FILE
lspci -vvn |grep -A1 040[1-3] >> $FILE
echo "" >> $FILE
echo "" >> $FILE
if [ "$SNDOPTIONS" ]
then
echo "!!Modprobe options (Sound related)" >> $FILE
echo "!!--------------------------------" >> $FILE
echo "" >> $FILE
modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
if [ -d "$SYSFS" ]
then
echo "!!Loaded sound module options" >> $FILE
echo "!!--------------------------" >> $FILE
echo "" >> $FILE
for mod in `cat /proc/asound/modules|awk {'print $2'}`;do
echo "!!Module: $mod" >> $FILE
for params in `echo $SYSFS/module/$mod/parameters/*`; do
echo -ne "\t";
echo "$params : `cat $params`" | sed 's:.*/::';
done >> $FILE
echo "" >> $FILE
done
echo "" >> $FILE
fi
if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ]
then
echo "!!HDA-Intel Codec information" >> $FILE
echo "!!---------------------------" >> $FILE
echo "--startcollapse--" >> $FILE
echo "" >> $FILE
cat $TEMPDIR/alsa-hda-intel.tmp >> $FILE
echo "--endcollapse--" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
if [ -s "$TEMPDIR/alsa-ac97.tmp" ]
then
echo "!!AC97 Codec information" >> $FILE
echo "!!---------------------------" >> $FILE
echo "--startcollapse--" >> $FILE
echo "" >> $FILE
cat $TEMPDIR/alsa-ac97.tmp >> $FILE
echo "" >> $FILE
cat $TEMPDIR/alsa-ac97-regs.tmp >> $FILE
echo "--endcollapse--" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]
then
echo "!!USB Mixer information" >> $FILE
echo "!!---------------------------" >> $FILE
echo "--startcollapse--" >> $FILE
echo "" >> $FILE
cat $TEMPDIR/alsa-usbmixer.tmp >> $FILE
echo "--endcollapse--" >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
#If no command line options are specified, then run as though --with-all was specified
if [[ -z "$1" ]]
then
update
withall
pbcheck
fi
fi # proceed
#loop through command line arguments, until none are left.
if [[ -n "$1" ]]
then
until [ -z "$1" ]
do
case "$1" in
--pastebin)
update
withall
pbcheck
;;
--update)
update
exit
;;
--upload)
UPLOAD="yes"
withall
;;
--no-upload)
UPLOAD="no"
withall
;;
--output)
shift
NFILE="$1"
KEEP_OUTPUT="yes"
;;
--debug)
echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted"
KEEP_FILES="yes"
echo ""
withall
;;
--with-all)
withall
;;
--with-aplay)
withaplay
;;
--with-amixer)
withamixer
;;
--with-alsactl)
withalsactl
;;
--with-devices)
withdevices
;;
--with-dmesg)
withdmesg
;;
--with-configs)
if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]]
then
echo "!!ALSA configuration files" >> $FILE
echo "!!------------------------" >> $FILE
echo "" >> $FILE
#Check for ~/.asoundrc
if [[ -e $HOME/.asoundrc ]]
then
echo "!!User specific config file ($HOME/.asoundrc)" >> $FILE
echo "" >> $FILE
cat $HOME/.asoundrc >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
#Check for /etc/asound.conf
if [[ -e /etc/asound.conf ]]
then
echo "!!System wide config file (/etc/asound.conf)" >> $FILE
echo "" >> $FILE
cat /etc/asound.conf >> $FILE
echo "" >> $FILE
echo "" >> $FILE
fi
fi
;;
--stdout)
UPLOAD="no"
withall
cat $FILE
rm $FILE
;;
--about)
echo "Written/Tested by the following users of #alsa on irc.freenode.net:"
echo ""
echo " wishie - Script author and developer / Testing"
echo " crimsun - Various script ideas / Testing"
echo " gnubien - Various script ideas / Testing"
echo " GrueMaster - HDA Intel specific items / Testing"
echo " olegfink - Script update function"
echo " TheMuso - display to stdout functionality"
exit 0
;;
*)
echo "alsa-info.sh version $SCRIPT_VERSION"
echo ""
echo "Available options:"
echo " --with-aplay (includes the output of aplay -l)"
echo " --with-amixer (includes the output of amixer)"
echo " --with-alsactl (includes the output of alsactl)"
echo " --with-configs (includes the output of ~/.asoundrc and"
echo " /etc/asound.conf if they exist)"
echo " --with-devices (shows the device nodes in /dev/snd/)"
echo " --with-dmesg (shows the ALSA/HDA kernel messages)"
echo ""
echo " --output FILE (specify the file to output for no-upload mode)"
echo " --update (check server for script updates)"
echo " --upload (upload contents to remote server)"
echo " --no-upload (do not upload contents to remote server)"
echo " --pastebin (use http://pastebin.ca) as remote server"
echo " instead www.alsa-project.org"
echo " --stdout (print alsa information to standard output"
echo " instead of a file)"
echo " --about (show some information about the script)"
echo " --debug (will run the script as normal, but will not"
echo " delete $FILE)"
exit 0
;;
esac
shift 1
done
fi
if [ "$PROCEED" = "no" ]; then
exit 1
fi
if [ "$UPLOAD" = "ask" ]; then
if [[ -n "$DIALOG" ]]; then
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
DIALOG_EXIT_CODE=$?
if [ $DIALOG_EXIT_CODE != 0 ]; then
UPLOAD="no"
else
UPLOAD="yes"
fi
else
echo -n "Automatically upload ALSA information to $WWWSERVICE? [y/N] : "
read -e CONFIRM
if [ "$CONFIRM" != "y" ]; then
UPLOAD="no"
else
UPLOAD="yes"
fi
fi
fi
if [ "$UPLOAD" = "no" ]; then
if [ -z "$TOSTDOUT" ]; then
mv -f $FILE $NFILE || exit 1
KEEP_OUTPUT="yes"
fi
if [[ -n $DIALOG ]]
then
if [[ -n $PBERROR ]]; then
dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "An error occurred while contacting the $WWWSERVICE.\n Your information was NOT automatically uploaded.\n\nYour ALSA information is in $NFILE" 10 100
else
dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "\n\nYour ALSA information is in $NFILE" 10 60
fi
else
echo
if [[ -n $PBERROR ]]; then
echo "An error occurred while contacting the $WWWSERVICE."
echo "Your information was NOT automatically uploaded."
echo ""
echo "Your ALSA information is in $NFILE"
echo ""
else
if [ -z "$TOSTDOUT" ]; then
echo ""
echo "Your ALSA information is in $NFILE"
echo ""
fi
fi
fi
exit
fi # UPLOAD
#Test that wget is installed, and supports --post-file. Upload $FILE if it does, and prompt user to upload file if it doesnt.
if
WGET=$(which wget 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); [[ -n "${WGET}" ]] && [[ -x "${WGET}" ]] && [[ `wget --help |grep post-file` ]]
then
if [[ -n $DIALOG ]]
then
if [[ -z $PASTEBIN ]]; then
wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit"
{ for i in 10 20 30 40 50 60 70 80 90; do
echo $i
sleep 0.2
done
echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.alsa-project.org ..." 6 70 0
else
wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit"
{ for i in 10 20 30 40 50 60 70 80 90; do
echo $i
sleep 0.2
done
echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.pastebin.ca ..." 6 70 0
fi
dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100
DIALOG_EXIT_CODE=$?
if [ $DIALOG_EXIT_CODE = 0 ]; then
grep -v "alsa-info.txt" $FILE >$TEMPDIR/uploaded.txt
dialog --backtitle "$BGTITLE" --textbox $TEMPDIR/uploaded.txt 0 0
fi
clear
# no dialog
else
if [[ -z $PASTEBIN ]]; then
echo -n "Uploading information to www.alsa-project.org ... "
wget -O - --tries=5 --timeout=60 --post-file=$FILE http://www.alsa-project.org/cardinfo-db/ &>$TEMPDIR/wget.tmp &
else
echo -n "Uploading information to www.pastebin.ca ... "
wget -O - --tries=5 --timeout=60 --post-file=$FILE http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &>$TEMPDIR/wget.tmp &
fi
#Progess spinner for wget transfer.
i=1
sp="/-\|"
echo -n ' '
while pgrep wget &>/dev/null
do
echo -en "\b${sp:i++%${#sp}:1}"
done
echo -e "\b Done!"
echo ""
fi #dialog
#See if tput is available, and use it if it is.
if [[ -n "$TPUT" ]]
then
if [[ -z $PASTEBIN ]]; then
FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0`
else
FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0`
fi
else
if [[ -z $PASTEBIN ]]; then
FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2`
else
FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'`
fi
fi
#Output the URL of the uploaded file.
echo "Your ALSA information is located at $FINAL_URL"
echo "Please inform the person helping you."
echo ""
#We couldnt find a suitable wget, so tell the user to upload manually.
else
mv -f $FILE $NFILE || exit 1
KEEP_OUTPUT="yes"
if [[ -z $DIALOG ]]
then
if [[ -z $PASTEBIN ]]; then
echo ""
echo "Could not automatically upload output to http://www.alsa-project.org"
echo "Possible reasons are:"
echo " 1. Couldnt find 'wget' in your PATH"
echo " 2. Your version of wget is less than 1.8.2"
echo ""
echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post."
echo ""
else
echo ""
echo "Could not automatically upload output to http://www.pastebin.ca"
echo "Possible reasons are:"
echo " 1. Couldnt find 'wget' in your PATH"
echo " 2. Your version of wget is less than 1.8.2"
echo ""
echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post."
echo ""
fi
else
if [[ -z $PASTEBIN ]]; then
dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://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 http://www.alsa-project,org/cardinfo-db/ and submit your post." 25 100
else
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 $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100
fi
fi
fi

331
ansi2html.sh Executable file
View File

@ -0,0 +1,331 @@
#!/bin/sh
# Convert ANSI (terminal) colours and attributes to HTML
# Author:
# http://www.pixelbeat.org/docs/terminal_colours/
# Examples:
# ls -l --color=always | ansi2html.sh > ls.html
# git show --color | ansi2html.sh > last_change.html
# Generally one can use the `script` util to capture full terminal output.
# Changes:
# V0.1, 24 Apr 2008, Initial release
# V0.2, 01 Jan 2009, Phil Harnish <philharnish@gmail.com>
# Support `git diff --color` output by
# matching ANSI codes that specify only
# bold or background colour.
# P@draigBrady.com
# Support `ls --color` output by stripping
# redundant leading 0s from ANSI codes.
# Support `grep --color=always` by stripping
# unhandled ANSI codes (specifically ^[[K).
# V0.3, 20 Mar 2009, http://eexpress.blog.ubuntu.org.cn/
# Remove cat -v usage which mangled non ascii input.
# Cleanup regular expressions used.
# Support other attributes like reverse, ...
# P@draigBrady.com
# Correctly nest <span> tags (even across lines).
# Add a command line option to use a dark background.
# Strip more terminal control codes.
# V0.4, 17 Sep 2009, P@draigBrady.com
# Handle codes with combined attributes and color.
# Handle isolated <bold> attributes with css.
# Strip more terminal control codes.
# V0.12, 12 Jul 2011
# http://github.com/pixelb/scripts/commits/master/scripts/ansi2html.sh
if [ "$1" = "--version" ]; then
echo "0.12" && exit
fi
if [ "$1" = "--help" ]; then
echo "This utility converts ANSI codes in data passed to stdin" >&2
echo "It has 2 optional parameters:" >&2
echo " --bg=dark --palette=linux|solarized|tango|xterm" >&2
echo "E.g.: ls -l --color=always | ansi2html.sh --bg=dark > ls.html" >&2
exit
fi
[ "$1" = "--bg=dark" ] && { dark_bg=yes; shift; }
if [ "$1" = "--palette=solarized" ]; then
# See http://ethanschoonover.com/solarized
P0=073642; P1=D30102; P2=859900; P3=B58900;
P4=268BD2; P5=D33682; P6=2AA198; P7=EEE8D5;
P8=002B36; P9=CB4B16; P10=586E75; P11=657B83;
P12=839496; P13=6C71C4; P14=93A1A1; P15=FDF6E3;
shift;
elif [ "$1" = "--palette=solarized-xterm" ]; then
# Above mapped onto the xterm 256 color palette
P0=262626; P1=AF0000; P2=5F8700; P3=AF8700;
P4=0087FF; P5=AF005F; P6=00AFAF; P7=E4E4E4;
P8=1C1C1C; P9=D75F00; P10=585858; P11=626262;
P12=808080; P13=5F5FAF; P14=8A8A8A; P15=FFFFD7;
shift;
elif [ "$1" = "--palette=tango" ]; then
# Gnome default
P0=000000; P1=CC0000; P2=4E9A06; P3=C4A000;
P4=3465A4; P5=75507B; P6=06989A; P7=D3D7CF;
P8=555753; P9=EF2929; P10=8AE234; P11=FCE94F;
P12=729FCF; P13=AD7FA8; P14=34E2E2; P15=EEEEEC;
shift;
elif [ "$1" = "--palette=xterm" ]; then
P0=000000; P1=CD0000; P2=00CD00; P3=CDCD00;
P4=0000EE; P5=CD00CD; P6=00CDCD; P7=E5E5E5;
P8=7F7F7F; P9=FF0000; P10=00FF00; P11=FFFF00;
P12=5C5CFF; P13=FF00FF; P14=00FFFF; P15=FFFFFF;
shift;
else # linux console
P0=000000; P1=AA0000; P2=00AA00; P3=AA5500;
P4=0000AA; P5=AA00AA; P6=00AAAA; P7=AAAAAA;
P8=555555; P9=FF5555; P10=55FF55; P11=FFFF55;
P12=5555FF; P13=FF55FF; P14=55FFFF; P15=FFFFFF;
[ "$1" = "--palette=linux" ] && shift
fi
[ "$1" = "--bg=dark" ] && { dark_bg=yes; shift; }
echo -n "<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
<style type=\"text/css\">
.ef0,.f0 { color: #$P0; } .eb0,.b0 { background-color: #$P0; }
.ef1,.f1 { color: #$P1; } .eb1,.b1 { background-color: #$P1; }
.ef2,.f2 { color: #$P2; } .eb2,.b2 { background-color: #$P2; }
.ef3,.f3 { color: #$P3; } .eb3,.b3 { background-color: #$P3; }
.ef4,.f4 { color: #$P4; } .eb4,.b4 { background-color: #$P4; }
.ef5,.f5 { color: #$P5; } .eb5,.b5 { background-color: #$P5; }
.ef6,.f6 { color: #$P6; } .eb6,.b6 { background-color: #$P6; }
.ef7,.f7 { color: #$P7; } .eb7,.b7 { background-color: #$P7; }
.ef8, .f0 > .bold,.bold > .f0 { color: #$P8; font-weight: normal; }
.ef9, .f1 > .bold,.bold > .f1 { color: #$P9; font-weight: normal; }
.ef10,.f2 > .bold,.bold > .f2 { color: #$P10; font-weight: normal; }
.ef11,.f3 > .bold,.bold > .f3 { color: #$P11; font-weight: normal; }
.ef12,.f4 > .bold,.bold > .f4 { color: #$P12; font-weight: normal; }
.ef13,.f5 > .bold,.bold > .f5 { color: #$P13; font-weight: normal; }
.ef14,.f6 > .bold,.bold > .f6 { color: #$P14; font-weight: normal; }
.ef15,.f7 > .bold,.bold > .f7 { color: #$P15; font-weight: normal; }
.eb8 { background-color: #$P8; }
.eb9 { background-color: #$P9; }
.eb10 { background-color: #$P10; }
.eb11 { background-color: #$P11; }
.eb12 { background-color: #$P12; }
.eb13 { background-color: #$P13; }
.eb14 { background-color: #$P14; }
.eb15 { background-color: #$P15; }
"
# The default xterm 256 colour palette
for red in $(seq 0 5); do
for green in $(seq 0 5); do
for blue in $(seq 0 5); do
c=$((16 + ($red * 36) + ($green * 6) + $blue))
r=$((($red * 40 + 55) * ($red > 0)))
g=$((($green * 40 + 55) * ($green > 0)))
b=$((($blue * 40 + 55) * ($blue > 0)))
printf ".ef%d { color: #%2.2x%2.2x%2.2x; } " $c $r $g $b
printf ".eb%d { background-color: #%2.2x%2.2x%2.2x; }\n" $c $r $g $b
done
done
done
for gray in $(seq 0 23); do
c=$(($gray+232))
l=$(($gray*10 + 8))
printf ".ef%d { color: #%2.2x%2.2x%2.2x; } " $c $l $l $l
printf ".eb%d { background-color: #%2.2x%2.2x%2.2x; }\n" $c $l $l $l
done
echo -n '
.f9 { color: '`[ "$dark_bg" ] && echo "#$P7;" || echo "#$P0;"`' }
.b9 { background-color: #'`[ "$dark_bg" ] && echo $P0 || echo $P15`'; }
.f9 > .bold,.bold > .f9, body.f9 > pre > .bold {
/* Bold is heavy black on white, or bright white
depending on the default background */
color: '`[ "$dark_bg" ] && echo "#$P15;" || echo "#$P0;"`'
font-weight: '`[ "$dark_bg" ] && echo 'normal;' || echo 'bold;'`'
}
.reverse {
/* CSS doesnt support swapping fg and bg colours unfortunately,
so just hardcode something that will look OK on all backgrounds. */
'"color: #$P0; background-color: #$P7;"'
}
.underline { text-decoration: underline; }
.line-through { text-decoration: line-through; }
.blink { text-decoration: blink; }
</style>
</head>
<body class="f9 b9">
<pre>
'
p='\x1b\[' #shortcut to match escape codes
P="\(^[^°]*\)¡$p" #expression to match prepended codes below
# Handle various xterm control sequences.
# See /usr/share/doc/xterm-*/ctlseqs.txt
sed "
s#\x1b[^\x1b]*\x1b\\\##g # strip anything between \e and ST
s#\x1b][0-9]*;[^\a]*\a##g # strip any OSC (xterm title etc.)
#handle carriage returns
s#^.*\r\{1,\}\([^$]\)#\1#
s#\r\$## # strip trailing \r
# strip other non SGR escape sequences
s#[\x07]##g
s#\x1b[]>=\][0-9;]*##g
s#\x1bP+.\{5\}##g
s#${p}[0-9;?]*[^0-9;?m]##g
#remove backspace chars and what they're backspacing over
:rm_bs
s#[^\x08]\x08##g; t rm_bs
" |
# Normalize the input before transformation
sed "
# escape HTML
s#\&#\&amp;#g; s#>#\&gt;#g; s#<#\&lt;#g; s#\"#\&quot;#g
# normalize SGR codes a little
# split 256 colors out and mark so that they're not
# recognised by the following 'split combined' line
:e
s#${p}\([0-9;]\{1,\}\);\([34]8;5;[0-9]\{1,3\}\)m#${p}\1m${p}¬\2m#g; t e
s#${p}\([34]8;5;[0-9]\{1,3\}\)m#${p}¬\1m#g;
:c
s#${p}\([0-9]\{1,\}\);\([0-9;]\{1,\}\)m#${p}\1m${p}\2m#g; t c # split combined
s#${p}0\([0-7]\)#${p}\1#g #strip leading 0
s#${p}1m\(\(${p}[4579]m\)*\)#\1${p}1m#g #bold last (with clr)
s#${p}m#${p}0m#g #add leading 0 to norm
# undo any 256 color marking
s#${p}¬\([34]8;5;[0-9]\{1,3\}\)m#${p}\1m#g;
# map 16 color codes to color + bold
s#${p}9\([0-7]\)m#${p}3\1m${p}1m#g;
s#${p}10\([0-7]\)m#${p}4\1m${p}1m#g;
# change 'reset' code to a single char, and prepend a single char to
# other codes so that we can easily do negative matching, as sed
# does not support look behind expressions etc.
s#°#\&deg;#g; s#${p}0m#°#g
s#¡#\&iexcl;#g; s#${p}[0-9;]*m#¡&#g
" |
# Convert SGR sequences to HTML
sed "
:ansi_to_span # replace ANSI codes with CSS classes
t ansi_to_span # hack so t commands below only apply to preceeding s cmd
/^[]*°/ { b span_end } # replace 'reset code' if no preceeding code
# common combinations to minimise html (optional)
s#${P}3\([0-7]\)${p}4\([0-7]\)m#\1<span class=\"f\2 b\3\">#;t span_count
s#${P}4\([0-7]\)${p}3\([0-7]\)m#\1<span class=\"f\3 b\2\">#;t span_count
s#${P}1m#\1<span class=\"bold\">#; t span_count
s#${P}4m#\1<span class=\"underline\">#; t span_count
s#${P}5m#\1<span class=\"blink\">#; t span_count
s#${P}7m#\1<span class=\"reverse\">#; t span_count
s#${P}9m#\1<span class=\"line-through\">#; t span_count
s#${P}3\([0-9]\)m#\1<span class=\"f\2\">#; t span_count
s#${P}4\([0-9]\)m#\1<span class=\"b\2\">#; t span_count
s#${P}38;5;\([0-9]\{1,3\}\)m#\1<span class=\"ef\2\">#; t span_count
s#${P}48;5;\([0-9]\{1,3\}\)m#\1<span class=\"eb\2\">#; t span_count
s#${P}[0-9;]*m#\1#g; t ansi_to_span # strip unhandled codes
b # next line of input
# add a corresponding span end flag
:span_count
x; s/^/s/; x
b ansi_to_span
# replace 'reset code' with correct number of </span> tags
:span_end
x
/^s/ {
s/^.//
x
s#°#</span>°#
b span_end
}
x
s#°##
b ansi_to_span
" |
# Convert alternative character set
# Note we convert here, as if we do at start we have to worry about avoiding
# conversion of SGR codes etc., whereas doing here we only have to
# avoid conversions of stuff between &...; or <...>
#
# Note we could use sed to do this based around:
# sed 'y/abcdefghijklmnopqrstuvwxyz{}`~/▒␉␌␍␊°±␤␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π£◆·/'
# However that would be very awkward as we need to only conv some input.
# The basic scheme that we do in the python script below is:
# 1. enable transliterate once ¡ char seen
# 2. disable once µ char seen (may be on diff line to ¡)
# 3. never transliterate between &; or <> chars
sed "
# change 'smacs' and 'rmacs' to a single char so that we can easily do
# negative matching, as sed does not support look behind expressions etc.
# Note we don't use ° like above as that's part of the alternate charset.
s#\x1b(0#¡#g;
s#µ#\&micro;#g; s#\x1b(B#µ#g
" |
(
python -c "
# vim:fileencoding=utf8
import sys
import locale
encoding=locale.getpreferredencoding()
old='abcdefghijklmnopqrstuvwxyz{}\`~'
new='▒␉␌␍␊°±␤␋┘┐┌└┼⎺⎻─⎼⎽├┤┴┬│≤≥π£◆·'
new=unicode(new, 'utf-8')
table=range(128)
for o,n in zip(old, new): table[ord(o)]=n
(STANDARD, ALTERNATIVE, HTML_TAG, HTML_ENTITY) = (0, 1, 2, 3)
state = STANDARD
last_mode = STANDARD
for c in unicode(sys.stdin.read(), encoding):
if state == HTML_TAG:
if c == '>':
state = last_mode
elif state == HTML_ENTITY:
if c == ';':
state = last_mode
else:
if c == '<':
state = HTML_TAG
elif c == '&':
state = HTML_ENTITY
elif c == u'¡' and state == STANDARD:
state = ALTERNATIVE
last_mode = ALTERNATIVE
continue
elif c == u'µ' and state == ALTERNATIVE:
state = STANDARD
last_mode = STANDARD
continue
elif state == ALTERNATIVE:
c = c.translate(table)
sys.stdout.write(c.encode(encoding))
" 2>/dev/null ||
sed 's/[¡µ]//g' # just strip aternative flag chars
)
echo "</pre>
</body>
</html>"

51
apt-fast Executable file
View File

@ -0,0 +1,51 @@
# !/bin/sh
# apt-fast v0.03 by Matt Parnell http://www.mattparnell.com, this thing is fully open-source
# if you do anything cool with it, let me know so I can publish or host it for you
# contact me at admin@mattparnell.com
# Special thanks
# Travis/travisn000 - support for complex apt-get commands
# Allan Hoffmeister - aria2c support
# Abhishek Sharma - aria2c with proxy support
# Richard Klien - Autocompletion, Download Size Checking (made for on ubuntu, untested on other distros)
# Patrick Kramer Ruiz - suggestions - see Suggestions.txt
# Sergio Silva - test to see if axel is installed, root detection/sudo autorun
# Use this just like apt-get for faster package downloading.
# Check for proper priveliges
[ "`whoami`" = root ] || exec sudo "$0" "$@"
# Test if the axel is installed
if [ ! -x /usr/bin/axel ]
then echo "axel is not installed, perform this?(y/n)"
read ops
case $ops in
y) if apt-get install axel -y --force-yes
then echo "axel installed"
else echo "unable to install the axel. you are using sudo?" ; exit
fi ;;
n) echo "not possible usage apt-fast" ; exit ;;
esac
fi
# If the user entered arguments contain upgrade, install, or dist-upgrade
if echo "$@" | grep -q "upgrade\|install\|dist-upgrade"; then
echo "Working...";
# Go into the directory apt-get normally puts downloaded packages
cd /var/cache/apt/archives/;
# Have apt-get print the information, including the URI's to the packages
# Strip out the URI's, and download the packages with Axel for speediness
# I found this regex elsewhere, showing how to manually strip package URI's you may need...thanks to whoever wrote it
apt-get -y --print-uris $@ | egrep -o -e "(ht|f)tp://[^\']+" > apt-fast.list && cat apt-fast.list | xargs -l1 axel -a
# Perform the user's requested action via apt-get
apt-get $@;
echo -e "\nDone! Verify that all packages were installed successfully. If errors are found, run apt-get clean as root and try again using apt-get directly.\n";
else
apt-get $@;
fi

5
bluetooth-pan.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
sudo modprobe bnep
sudo pand --listen -c 78:CA:04:B7:9E:35 --role=NAP -n --persist
sudo ifconfig bnep0
sudo ifup bnep0

22
calibre_cleanup.php Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/php
<?php
$directory = '/home/nemo/.gvfs/Nemo%27s iPad/Books/Purchases/';
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
while($it->valid()){
if (!$it->isDot()){
$filename = $it->key();
if(substr($filename,-6)=='.xhtml'){
echo $filename."\n";
$f = file($filename);
if(count($f)>10){
if(strpos($f[10],"@namespace")!==false){
$f[10]="<div>\n";
$contents = join("",$f);
file_put_contents($filename,$contents);
echo "Updated\n";
}
}
}
}
$it->next();
}

3
changed.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
echo Search whole filesystem for changed files in the last $1 minutes
find /bin /dev /etc /home /lib /media /mnt /opt /root /sbin /srv /tmp /usr /var -cmin -$1

1
git-dude Symbolic link
View File

@ -0,0 +1 @@
/home/nemo/projects/~github/git-dude/git-dude

60
gmail.py Executable file
View File

@ -0,0 +1,60 @@
import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
# The site we will navigate into, handling it's session
br.open('http://gmail.com')
# Select the first (index zero) form
br.select_form(nr=0)
# User credentials
br.form['Email'] = 'captn3m0'
br.form['Passwd'] = 'bot_add_ct Shark'
# Login
br.submit()
# Filter all links to mail messages in the inbox
all_msg_links = [l for l in br.links(url_regex='\?v=c&th=')]
# Select the first 3 messages
for msg_link in all_msg_links[0:3]:
print msg_link
# Open each message
br.follow_link(msg_link)
html = br.response().read()
soup = BeautifulSoup(html)
# Filter html to only show the message content
msg = str(soup.findAll('div', attrs={'class': 'msg'})[0])
# Show raw message content
print msg
# Convert html to text, easier to read but can fail if you have intl
# chars
# print html2text.html2text(msg)
print
# Go back to the Inbox
br.follow_link(text='Inbox')
# Logout
br.follow_link(text='Sign out')

1707
hub Executable file

File diff suppressed because it is too large Load Diff

102
json.sh Executable file
View File

@ -0,0 +1,102 @@
throw () {
echo "$*" >&2
exit 1
}
tokenize () {
local ESCAPE='(\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
local CHAR='[^[:cntrl:]"\\]'
local STRING="\"$CHAR*($ESCAPE$CHAR*)*\""
local NUMBER='-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?'
local KEYWORD='null|false|true'
local SPACE='[[:space:]]+'
egrep -ao "$STRING|$NUMBER|$KEYWORD|$SPACE|." --color=never |
egrep -v "^$SPACE$" # eat whitespace
}
parse_array () {
local index=0
local ary=''
read -r token
case "$token" in
']') ;;
*)
while :
do
parse_value "$1" "$index"
let index=$index+1
ary="$ary""$value"
read -r token
case "$token" in
']') break ;;
',') ary="$ary," ;;
*) throw "EXPECTED , or ] GOT ${token:-EOF}" ;;
esac
read -r token
done
;;
esac
value=`printf '[%s]' $ary`
}
parse_object () {
local key
local obj=''
read -r token
case "$token" in
'}') ;;
*)
while :
do
case "$token" in
'"'*'"') key=$token ;;
*) throw "EXPECTED string GOT ${token:-EOF}" ;;
esac
read -r token
case "$token" in
':') ;;
*) throw "EXPECTED : GOT ${token:-EOF}" ;;
esac
read -r token
parse_value "$1" "$key"
obj="$obj$key:$value"
read -r token
case "$token" in
'}') break ;;
',') obj="$obj," ;;
*) throw "EXPECTED , or } GOT ${token:-EOF}" ;;
esac
read -r token
done
;;
esac
value=`printf '{%s}' "$obj"`
}
parse_value () {
local jpath="${1:+$1,}$2"
case "$token" in
'{') parse_object "$jpath" ;;
'[') parse_array "$jpath" ;;
# At this point, the only valid single-character tokens are digits.
''|[^0-9]) throw "EXPECTED value GOT ${token:-EOF}" ;;
*) value=$token ;;
esac
printf "[%s]\t%s\n" "$jpath" "$value"
}
parse () {
read -r token
parse_value
read -r token
case "$token" in
'') ;;
*) throw "EXPECTED EOF GOT $token" ;;
esac
}
if [ $0 = $BASH_SOURCE ];
then
tokenize | parse
fi

BIN
kiss.sh Executable file

Binary file not shown.

12
mfd.sh Executable file
View File

@ -0,0 +1,12 @@
#! /bin/bash
#echo Mediafire Download Script using Plowdown + Axel
#echo Usage mfd URL [num]
url=$1
if [ ${url:0:4} != http ]; then
url="http://$url"
fi
#echo ${url:0:4}
echo Downloading $url
plowdown -p mtvz --run-download="axel -n 20 -a %url" $url
#Plowdown using axel and 10 threads to download the url

142
offline_filter.pl Executable file
View File

@ -0,0 +1,142 @@
#!/usr/bin/perl -Tw
# Simple liferea (and possibly for other things) conversion filter to download
# content for offline viewing during feed updates.
#
# Pigeon <pigeon at pigeond dot net>
#
# http://pigeond.net/
#
# Latest version of this script can be found at:
# git://pigeond.net/offline_filter/
#
# GPLv2
#
#
# What it currently does:
# - Look for matching pattern (e.g. img src url).
# - Download it using wget if it is not already downloaded.
# - Replace original src in the feed with the local downloaded one.
#
# Limitations:
# - Will download all matched elements (img), one by one.
# - Will not redownload a file if it has been changed remotely.
#
# TODO:
# - Doesn't handle things spanned across multiple lines
#
use strict;
use Digest::SHA1 qw(sha1_hex);
use HTML::Entities;
delete @ENV{qw(IFS CDPATH ENV BASH_ENV PATH)};
my ($HOME) = ($ENV{'HOME'} =~ /([a-zA-Z0-9\/\.\_]+)/);
my $SAVE_PATH = "${HOME}/.liferea_1.4/cache/saves";
my $WGET = '/usr/bin/wget';
my $WGET_TIMEOUT = 5;
my @BLACKLIST_RE = (
);
my $debug = 0;
sub url_fetch {
my ($url) = @_;
my ($ok) = undef;
my $outfile = $SAVE_PATH.'/'.sha1_hex($url);
if ($url =~ m/(\.[a-zA-Z]{3,4})$/) {
$outfile .= lc($1);
}
if (-f $outfile) {
if ($debug) {
print(STDERR "Skipping [${url}], already in [${outfile}]\n");
}
} else {
$url = decode_entities($url);
# use one upper level as referer
my $referer = $url;
$referer =~ s![^/]*?$!!;
my @args = ($WGET, '-O', $outfile, '-T', $WGET_TIMEOUT);
if (!$debug) {
push(@args, '-q');
}
push(@args, "--referer=${referer}");
push(@args, $url);
if ($debug) {
print(STDERR "Running [".join(' ', @args)."]\n");
}
if (system(@args) != 0) {
if ($debug) {
print(STDERR "Fetch failed for [${url}]\n");
}
unlink(${outfile});
$outfile = undef;
}
}
return $outfile;
}
sub img_func {
my ($matched, $src) = @_;
my ($ok) = undef;
if ($src ne '') {
foreach my $u (@BLACKLIST_RE) {
return ${matched} if (${src} =~ ${u});
}
my $outfile = url_fetch($src);
if ($outfile) {
$matched =~ s!\Q${src}\E!file://${outfile}!g;
}
}
return $matched;
}
my %handler = (
# save <img> images for offline viewing
qr{(?:<|&lt;)img .*?src=(?:"|'|&quot;)?(http://.*?)(?:>|&gt;|"|'|&quot;|\s)}i =>
'img_func($&, $1)',
);
my @lines = <>;
system("mkdir -p ${SAVE_PATH}");
foreach my $l (@lines) {
foreach my $regex (keys(%handler)) {
$l =~ s/$regex/$handler{$regex}/gee;
}
print($l);
}
exit(0);

21
pass.php Executable file
View File

@ -0,0 +1,21 @@
#! /usr/bin/php
<?php
/**
* My password generator
* based on the lifehacker suggestion
* Password = md5("l"+key+"r");
* l,r = first,last letter of domain name
*/
//you get individual secure passwords that you can
//regenrate easily
$cout = fopen("php://stdout","w");
fwrite($cout,"Enter domain name: ");
$cin = fopen('php://stdin','r');
$domain = fread($cin,4096);
fwrite($cout,"Enter key pass phrase: ");
$cin = fopen('php://stdin','r');
$key = fread($cin,4096);
echo "Password : ". md5($domain[0].$key.substr($domain,-1))."\n";

BIN
phpCB Executable file

Binary file not shown.

9
port_block_check.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
for i in {1..65535}
do
nc -w 2 open.zorinaq.com $i
rc=$?
if [[ $rc == 0 ]] ; then
echo "Port $i unblocked"
fi
done

4
sleepsize.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
sleep 5
ls $1 -hs
sleepsize.sh $1

84
vimeo_downloader.sh Executable file
View File

@ -0,0 +1,84 @@
#!/bin/sh
#
# Vimeo Downloader
#
# Copyright (C) 2008, 2010 Denver Gingerich
# Copyright (C) 2009 Jori Hamalainen
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
if [ $# -ne 1 ]; then
echo "Vimeo Downloader v0.3.1"
echo "by Denver Gingerich (http://ossguy.com/)"
echo " with script improvements by Jori Hamalainen"
echo
echo "Usage: $0 <vimeo_id|vimeo_URL>"
exit 1
fi
VIMEO_ID=`echo $1 | awk -F / '{print $NF}'`
which wget
if [ $? -eq 0 ]; then
echo "Using wget..."
GET_CMD="wget -O -"
else
which curl
if [ $? -eq 0 ]; then
echo "Using curl..."
GET_CMD="curl -L"
else
echo "Could not find wget or curl"
exit 2
fi
fi
which perl
if [ $? -eq 0 ]; then
echo "Using perl..."
USING_PERL=1
else
echo "Using sed..."
USING_PERL=0
fi
VIDEO_XML=`${GET_CMD} http://www.vimeo.com/moogaloop/load/clip:${VIMEO_ID}`
if [ $USING_PERL -eq 1 ]; then
REQUEST_SIGNATURE=`echo $VIDEO_XML | perl -p -e 's:^.*?\<request_signature\>(.*?)\</request_signature\>.*$:$1:g'`
REQUEST_SIGNATURE_EXPIRES=`echo $VIDEO_XML | perl -p -e 's:^.*?\<request_signature_expires\>(.*?)\</request_signature_expires\>.*$:$1:g'`
CAPTION=`echo $VIDEO_XML | perl -p -e 's:^.*?\<caption\>(.*?)\</caption\>.*$:$1:g'`
ISHD=`echo $VIDEO_XML | perl -p -e 's:^.*?\<isHD\>(.*?)\</isHD\>.*$:$1:g'`
if [ ${ISHD} -eq 1 ]; then
ISHD="hd"
else
ISHD="sd"
fi
# caption can contain bad characters (like '/') so don't use it for now
#FILENAME="${CAPTION}-(${ISHD}${VIMEO_ID}).flv"
FILENAME="${VIMEO_ID}-${ISHD}.flv"
else
REQUEST_SIGNATURE=`echo $VIDEO_XML | sed -e 's/^.*<request_signature>\([^<]*\)<.*$/\1/g'`
REQUEST_SIGNATURE_EXPIRES=`echo $VIDEO_XML | sed -e 's/^.*<request_signature_expires>\([^<]*\)<.*$/\1/g'`
ISHD="sd"
FILENAME=${VIMEO_ID}.flv
fi
echo "\nDownloading video ${VIMEO_ID} to ${FILENAME}...\nRequest_signature=${REQUEST_SIGNATURE}\nRequest_signature_expires=${REQUEST_SIGNATURE_EXPIRES}\n"
axel -n 10 -a "http://www.vimeo.com/moogaloop/play/clip:${VIMEO_ID}/${REQUEST_SIGNATURE}/${REQUEST_SIGNATURE_EXPIRES}/?q=${ISHD}" -o "${FILENAME}"
echo "Video ${VIMEO_ID} saved to ${FILENAME}"
echo `file "${FILENAME}"`
echo