#!/bin/bash
##
# Author: Mikhaylov Anton aka Anion155 <anion155@gmail.com>
##
## usage string
USAGE="Usage: $0 [-d] [-r] [-h] \n\n
Script automaticaly installs fglrx driver.\n\n
-d Download new driver version.\n
-i Install (for Unity DE only) indicator for hybrid graphics switching maded by beidl <https://github.com/beidl/amd-indicator>.\n
-r Remove fglrx drivers.\n
-p Purge fglrx drivers and reinstall open_source drivers.\n\n
-q Quiet work.\n
-h This prompt.\n"
## download new driver version
DOWNLOAD_NEW=false
DOWNLOAD_LAST_DRIVER_TYPE=b
## quiet
QUIET=false
## install or update indicator for hybrid graphics switching
INSTALL_INDICATOR=false
## temp files directory
TMP_FILES='/tmp/FGLRX_INSTALLER'
## permanent files directory
PERMANENT_FILES="`readlink -fn $(dirname $0)`/.fglrx"
## check root privileges
if [ `whoami` != 'root' ]; then
echo "E $0: Permission denied. Run $0 as the root"
exit 1;
fi
## cleaning procedure
function clean {
cd /
echo 'Cleaning...'
rm -rf "$TMP_FILES"
}
clean
mkdir "$TMP_FILES"
## remove current installed fglrx drivers
remove_drv() {
sh /usr/share/ati/fglrx-uninstall.sh
_1=$?
apt-get remove --purge -y fglrx fglrx-amdcccle fglrx-dev fglrx-amdcccle-updates fglrx-updates fglrx-updates-dev
_2=$?
if [[ $_1 != 0 && $_2 != 0 ]]; then
return 1
fi
return 0
}
## purge pieces of fglrx drivers and reinstall open-source drivers
purge_drv() {
apt-get remove --purge -y xserver-xorg-video-ati xserver-xorg-video-radeon
apt-get install -y xserver-xorg-video-all
apt-get install --reinstall -y libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core
if [[ $? != 0 ]]; then
apt-get install --reinstall -y libgl1-mesa-glx:i386 libgl1-mesa-glx:amd64 libgl1-mesa-dri:i386 libgl1-mesa-dri:amd64 xserver-xorg-core
fi
mv /etc/X11/xorg.conf{,.amd_fglrx-backup}
mv /etc/X11/xorg.conf{.clean_from_fglrx-backup,}
rm -rf /etc/ati
return 0
}
## what to do
while getopts ":drpiqh" opt; do
case "$opt" in
"d")
DOWNLOAD_NEW=true;;
"r")
remove_drv
if [[ $? != 0 ]]; then
echo "E $0: Error while removing fglrx drivers"
exit 1
fi
exit 0;;
"p")
remove_drv
if [[ $? != 0 ]]; then
echo "E $0: Error while removing fglrx drivers"
exit 1
fi
purge_drv
exit 0;;
"i")
INSTALL_INDICATOR=true;;
"q")
QUIET=true;;
"h")
echo -e $USAGE
exit 0;;
"?")
echo "E $0: Invalid option $OPTARG. Try $0 -h for help"
exit 1;;
*)
echo "E $0: Unknown error while processing options"
exit 1;;
esac
done
if $INSTALL_INDICATOR; then
PWD_=`pwd`
cd "$TMP_FILES"
IND_URL='https://github.com/beidl/amd-indicator'
git clone "$IND_URL" 'indicator/'
cd 'indicator'
if [[ `lsb_release -is` == 'Ubuntu' ]]; then
wget 'https://www.dropbox.com/s/q8huhz4h9i3g4o6/amd-indicator_scripts.patch'
patch -i 'scripts.patch'
fi
bash 'setup.sh'
cd $PWD_
fi
if [ ! -f "$PERMANENT_FILES/fglrx.run" ]; then
DOWNLOAD_NEW=true
fi
if $DOWNLOAD_NEW; then
! $QUIET && read -p 'What type of driver do you want to use release or beta? <r|b>:' DOWNLOAD_LAST_DRIVER_TYPE
sed "/^DOWNLOAD_LAST_DRIVER_TYPE=/cDOWNLOAD_LAST_DRIVER_TYPE=$DOWNLOAD_LAST_DRIVER_TYPE"
PWD_=`pwd`
cd "$TMP_FILES"
wget -O page "http://support.amd.com/us/gpudownload/linux/Pages/radeon_linux.aspx"
sed -e '/Download</a>/!d' page --in-place
LINK_RELEASE=`sed -e '2d' -e 's/.*a href="\(.*\)$/\1/' page | cut -d\" -f1`
LINK_BETA=`sed -e '1d' -e 's/.*a href="\(.*\)$/\1/' page | cut -d\" -f1`
if [[ $DOWNLOAD_LAST_DRIVER_TYPE == 'r' ]]; then
LINK=$LINK_RELEASE
elif [[ $DOWNLOAD_LAST_DRIVER_TYPE == 'b' ]]; then
LINK=$LINK_BETA
fi
mkdir "$PERMANENT_FILES"
cd "$PERMANENT_FILES"
wget -O "`basename $LINK`" "$LINK"
unzip "`basename $LINK`"
mv "`basename $LINK | sed -e 's/zip$/run/'`" 'fglrx.run'
cd "$PWD_"
fi
remove_drv
PWD_=`pwd`
cd "$PERMANENT_FILES"
apt-get install build-essential cdbs dh-make dkms execstack dh-modaliases linux-headers-generic
if [ `uname -m` == 'x86_64' ]; then
apt-get install lib32gcc1
fi
fglrx.run --buildpkg "`lsb_release -is`/`lsb_release -cs`"
if [[ $? == 0 ]]; then
dpkg -i fglrx*.deb
apt-get install -f
else
echo 'Do not reboot computer, until this script ask you!'
fglrx.run
fi
cd /etc/X11/
mv xorg.conf{,.clean_from_fglrx-backup}
amdconfig --initial -f
cp xorg.conf{,.amd_fglrx-backup}
cd "$PWD_"
exit 0