Skip to content

Instantly share code, notes, and snippets.

@j1cs
Last active August 29, 2015 14:17
Show Gist options
  • Save j1cs/5e6001c834e09f4a67c8 to your computer and use it in GitHub Desktop.
Save j1cs/5e6001c834e09f4a67c8 to your computer and use it in GitHub Desktop.
Revisa si corre compiz o si tu driver de video está vien instalado
#!/bin/bash
# Compiz-Check -- script to test if your system is able to run Compiz
#
# Copyright (c) 2008 Nick Bauermeister <Forlong@gmx.de>
#
# This program is free software. Feel free to redistribute and/or
# modify it under the terms of the GNU General Public License v3
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful
# but comes 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.
VERSION="0.4.6"
usage()
{
printf "\nAbout:\n"
printf "%6s Compiz-Check will check if your system satisfies all requirements to\n"
printf "%6s run Compiz properly.\n"
printf "%6s It will also help you trace back the problem(s) you may be facing.\n\n"
printf "%6s Visit\033[1m http://forlong.blogage.de/article/pages/Compiz-Check \033[0m\n"
printf "%6s for further information.\n\n"
printf "Usage:\n"
printf "%6s Run this script without any arguments.\n\n"
printf "Available arguments:\n"
printf " -h or --help %8s List available arguments and usage (this message).\n"
printf " -v or --version %5s Print version of Compiz-Check in use.\n\n"
}
banana()
{
printf "//\\ \nV%2s\\ \n \\%2s\\ \n%2s\\ \033[1;33m.\`-.\n%3s|\\ \`. \`.\n%3s( \\%2s\`. \`-.%24s_,.-:\\ \n%4s\\ \\%3s\`.%2s\`-._%13s__..--' ,-';/\n%5s\\ \`.%3s\`-.%3s\`-..___..---'%3s_.--' ,'/\n%6s\`. \`.%4s\`-._%8s__..--'%4s,' /\n%8s\`. \`-_%4s \`\`--..''%6s _.-' ,'\n%10s\`-_ \`-.___%8s__,--'%3s,'\n%13s\`-.__%2s\`----'''%4s__.-'\n%18s\`--..____..--'\033[0m\n\n"
}
if [ $# != 0 ]; then
case $1 in
-h | --help)
usage
exit 0
;;
-v | --version)
echo $VERSION
exit 0
;;
--banana)
banana
exit 0
;;
*)
printf "Error, unknown option: \"$1\"\nRun \033[1m$0 --help\033[0m for details.\n"
exit 1
;;
esac
fi
# Exit when running as root
if [ "$(whoami)" = root ]; then
printf "\n Do not run this script as root, because it might distort its outcome.\n Aborting.\n\n"
exit 0
fi
# Needed for lspci, because it's not in the $PATH of every distro
export PATH=$PATH:/sbin:/usr/sbin
# Can't handle more than one graphics card or X server at a time
if [ $(lspci | grep VGA -c) -gt 1 ]; then
ERROR_DEVICE="graphics chip"
elif [ $(xdpyinfo | grep -i dimensions: -c) -gt 1 ]; then
ERROR_DEVICE="running X server"
fi
if [ ! -z "$ERROR_DEVICE" ]; then
printf "\n More than one $ERROR_DEVICE detected -- sorry, the script can not handle that.\n Aborting.\n\n"
exit 0
fi
# Skip system checks if they are harmful or useless
SKIP=yes
# Coloured output (there are other emphases hardcoded in the script, so
# it would be pretty useless changing those here)
UNKNOWN="\033[1;31mUnknown\033[0m"
OK=" \033[1;32mOK\033[0m "
FAIL="\033[1;31mFAIL\033[0m"
SKIPPING="\033[33mSKIP\033[0m"
WARN="\033[33mWARN\033[0m"
# General distribution info file
DIST_INFO="/etc/lsb-release"
# Detect distribution
# If your distro is not on this list, contact me.
detect_distro()
{
if [ -d /etc/linuxmint ]; then
DISTRIB_ID="Linux Mint"
return 0
elif [ -r $DIST_INFO ]; then
. $DIST_INFO
fi
if [ -z $DISTRIB_ID ]; then
unset DISTRIB_RELEASE
if [ -f /etc/arch-release ]; then
DISTRIB_ID="Arch Linux"
elif [ -r /etc/knoppix-version ]; then
DISTRIB_ID="Knoppix"
DISTRIB_RELEASE="($(cat /etc/knoppix_version))"
elif [ -r /etc/sidux-version ]; then
DISTRIB_ID="Sidux"
DISTRIB_RELEASE="($(cat /etc/sidux-version | awk '{print $4}'))"
elif [ -r /etc/debian_version ]; then
DISTRIB_ID="Debian GNU/Linux"
DISTRIB_RELEASE="($(cat /etc/debian_version))"
elif [ -r /etc/fedora-release ]; then
DISTRIB_ID="$(cat /etc/redhat-release)"
elif [ -r /etc/gentoo-release ]; then
DISTRIB_ID="Gentoo"
DISTRIB_RELEASE="($(cat /etc/gentoo-release | awk '{print $5}'))"
elif [ -f /etc/lfs-version ]; then
DISTRIB_ID="Linux from scratch"
elif [ -r /etc/pclinuxos-release ]; then
DISTRIB_ID="PCLinuxOS"
elif [ -f /etc/mandriva-release ] || [ -f /etc/mandrake-release ]; then
DISTRIB_ID="Mandriva"
elif [ -f /etc/redhat-release ]; then
DISTRIB_ID="RedHat"
elif [ -r /etc/vector-version ]; then
DISTRIB_ID="VectorLinux"
DISTRIB_RELEASE="($(cat /etc/vector-version))"
elif [ -r /etc/slackware-version ]; then
DISTRIB_ID="$(cat /etc/slackware-version)"
elif [ -f /etc/release ]; then
DISTRIB_ID="Solaris"
elif [ -r /etc/SuSE-release ]; then
DISTRIB_ID="$(grep -i suse /etc/SuSE-release)"
elif [ -f /etc/yellowdog-release ]; then
DISTRIB_ID="YellowDog Linux"
elif [ -f /etc/zenwalk-version ]; then
DISTRIB_ID="Zenwalk"
else
DISTRIB_ID="Unknown"
fi
fi
}
# Detect desktop environment in use
detect_de()
{
if [ ! -z $GNOME_DESKTOP_SESSION_ID ]; then
DE=GNOME
elif [ "$KDE_SESSION_VERSION" = 4 ]; then
DE=KDE4
elif [ "$KDE_FULL_SESSION" = true ]; then
DE=KDE
elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1 ; then
DE=Xfce
else
DE=Unknown
fi
}
# Detect graphics card
detect_video()
{
if lspci | grep -q VGA ; then
VIDEO=$(lspci | grep VGA | sed 's/.*: //')
else
VIDEO=$UNKNOWN # TODO abort?
fi
}
XSET=$(command -v xset)
# Detect location of the Xorg log file
if [ ! -z $XSET ]; then
XORG_LOG=$($XSET q | grep "Log file" | awk '{print $3}')
fi
# Fallback Xorg log
if [ -z $XORG_LOG ]; then
if [ -f /var/log/Xorg.0.log ]; then
XORG_LOG=/var/log/Xorg.0.log
fi
fi
# advise to look for proprietary drivers in Ubuntu
detect_driver_manager()
{
if [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 710 ] && [ $DE = GNOME ] || [ $DE = Xfce ]; then
DRVS_MNGR=hardy-gtk
elif [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 710 ] && [ $DE = KDE ]; then
DRVS_MNGR=hardy-kde
elif [ "$DISTRIB_RELEASE" = "7.10" ] && [ $DE = GNOME ] || [ $DE = Xfce ]; then
DRVS_MNGR=gutsy-gtk
elif [ "$DISTRIB_RELEASE" = "7.10" ] && [ $DE = KDE ]; then
DRVS_MNGR=gutsy-kde
elif [ "$DISTRIB_RELEASE" = "7.04" ] && [ $DE = GNOME ] || [ $DE = Xfce ]; then
DRVS_MNGR=feisty-gtk
fi
}
# Drivers known to work with Compiz
WHITELIST="nvidia intel i810 ati radeon fglrx"
# Drivers taken from Hardy's /usr/lib/xorg/modules/drivers/ directory
# plus radeonhd, vboxvideo, nouveau and the proprietary one's.
# Contact me, if your driver is not on this list.
KNOWN_DRIVERS="$WHITELIST apm ark chips cirrus cyrix fbdev glint i128
i740 imstt mga mtx neomagic newport nsc nv openchrome
rendition s3virge savage siliconmotion sis sisusb tdfx
tga trident tseng vesa vga via vmware vboxvideo voodoo
radeonhd s3 nouveau"
# Detect driver in use.
# TODO not really satisfied with this. Just because the module is
# loaded doesn't necessarily mean the driver is properly working.
detect_driver()
{
if [ -z $XORG_LOG ]; then
DRV=$SKIPPING
CHECKS=$SKIP
SKIP_MESSAGE="Unable to locate your Xorg log"
return 1
elif [ ! -r $XORG_LOG ]; then
DRV=$SKIPPING
CHECKS=$SKIP
SKIP_MESSAGE="No permission to read $XORG_LOG"
return 1
fi
for i in $KNOWN_DRIVERS ; do
if grep Loading $XORG_LOG | grep -q "${i}_drv\.so" &&
! grep Unloading $XORG_LOG | grep -q "${i}_drv\.so" ; then
DRV=$i
fi
done
if [ -z $DRV ]; then
DRV=$UNKNOWN
return 0
fi
# glxinfo might kill X if vesa or vga are in use (LP#119341)
# 'LIBGL_ALWAYS_INDIRECT=1 glxinfo' kills X on openchrome driver
# according to user feedback (same for unichrome)
# nv driver blocks AIGLX
case $DRV in
vesa | vga | nv)
CHECKS=$SKIP
SKIP_MESSAGE="$DRV driver in use"
ERROR_MESSAGE="The $DRV driver is not capable of running Compiz, you need to install\n the proper driver for your graphics card."
if [ "$DISTRIB_ID" = Ubuntu ]; then
detect_driver_manager
fi
;;
unichrome | openchrome)
CHECKS=$SKIP
SKIP_MESSAGE="$DRV driver in use" #TODO ERROR_MESSAGE
;;
esac
}
# Detect rendering method
detect_rendering()
{
XVINFO=$(command -v xvinfo)
if [ ! -z $XVINFO ]; then
if $XVINFO | grep -q Xgl ; then
RENDER=Xgl
return 0
fi
fi
if xdpyinfo | grep -q NV-GLX ; then
RENDER=Nvidia
return 0
fi
AIGLX_STAT="AIGLX enabled\|AIGLX disabled"
if [ -z $XORG_LOG ] || [ ! -r $XORG_LOG ]; then
RENDER=$SKIPPING
return 1
elif grep "$AIGLX_STAT" $XORG_LOG | tail -1 | grep -q "AIGLX enabled" ; then
RENDER=AIGLX
return 0
elif grep -q "AIGLX: Loaded and initialized" $XORG_LOG ; then
RENDER=AIGLX
return 0
fi
if [ -z $XVINFO ]; then
RENDER=$SKIPPING
CHECKS=$SKIP
SKIP_MESSAGE="Unable to check for Xgl, could not run xvinfo"
else
RENDER="\033[31mNone\033[0m"
CHECKS=$SKIP # Checks can be OK nonetheless
SKIP_MESSAGE="No rendering method in use (AIGLX, Xgl or Nvidia)"
fi
}
GLXINFO=$(command -v glxinfo)
# Check for texture_from_pixmap
check_tfp()
{
if [ "$RENDER" = Xgl ]; then
TFP=$SKIPPING
return 0
elif [ -z $GLXINFO ]; then
TFP=$SKIPPING
SKIP_MESSAGE="glxinfo not installed"
ERROR_MESSAGE="The program glxinfo is needed to perform a number of crucial tests."
if [ -e /etc/debian_version ]; then
DIST_HELP="You need to install the package \033[1mmesa-utils\033[0m\n Type e.g. \033[1msudo apt-get install mesa-utils\033[0m to install it."
elif [ -e /etc/mandriva-release ]; then
DIST_HELP="You need to install \033[1mmesa-demos\033[0m\n"
fi
return 0
fi
if [ $(glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c) -gt 2 ]; then
TFP=$OK
elif [ $(LIBGL_ALWAYS_INDIRECT=1 glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c) -gt 2 ]; then
TFP=$OK
else
TFP=$FAIL
fi
}
# Check for non power of two texture support
check_npo2()
{
if [ "$RENDER" = Xgl ] || [ -z $GLXINFO ]; then
NPO2=$SKIPPING
elif glxinfo 2>/dev/null | egrep -q '(GL_ARB_texture_non_power_of_two|GL_NV_texture_rectangle|GL_EXT_texture_rectangle|GL_ARB_texture_rectangle)' ; then
NPO2=$OK
else
NPO2=$FAIL
fi
}
# Check for composite extension
check_composite()
{
if xdpyinfo -queryExtensions | grep -q Composite ; then
COMP=$OK
else
COMP=$FAIL
fi
}
# Check for FBConfig
check_fbconfig()
{
if [ -z $GLXINFO ]; then
FBC=$SKIPPING
elif glxinfo 2>/dev/null | grep -q GLX.*fbconfig ; then
FBC=$OK
elif [ "$DRV" = via ]; then
FBC=$SKIPPING # 'glxinfo -i' kills X on some setups using the via driver
elif glxinfo -i 2>/dev/null | grep -q GLX.*fbconfig ; then
FBC=$OK
else
FBC=$FAIL
fi
}
# Check if fglrx driver supports composite
check_fglrx()
{
if [ "$DRV" = fglrx ]; then
FGLRXINFO=$(command -v fglrxinfo)
if [ ! -z "$FGLRXINFO" ]; then
if $FGLRXINFO | grep -q mesa ; then
STATUS=$FAIL
ERROR="Fglrx driver not properly installed, you are using the Mesa driver."
return 0
else
DIGITS=$($FGLRXINFO | grep version | sed 's/[a-Z:(.)]//g')
for i in $DIGITS ; do
if [ $i -gt 100000 ]; then
FGLRX_VERSION=$i
fi
done
FGLRX_COMPOSITE=206958 # 2.0.6958 first release to support AIGLX
if [ ! -z $FGLRX_VERSION ]; then
if [ $FGLRX_VERSION -lt $FGLRX_COMPOSITE ] && [ "$RENDER" != Xgl ]; then
STATUS=$FAIL
ERROR="The version of fglrx in use needs Xgl to work with Compiz."
ERROR_MESSAGE="Older versions of fglrx do not support AIGLX, so you have to use Xgl in order\n to make Compiz run with this driver.\n You can either install Xgl or a newer version of the fglrx driver."
if [ "$DISTRIB_ID" = Ubuntu ]; then
if [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 704 ]; then
DIST_HELP="Type \033[1msudo apt-get install xserver-xgl\033[0m to install Xgl."
fi
fi
return 0
fi
return 1
fi
STATUS=$SKIPPING
SKIP_MESSAGE="Unable to detect fglrx driver version in use."
return 0
fi
fi
STATUS=$FAIL
ERROR="Fglrx driver not properly installed. Could not run fglrxinfo."
return 0
fi
return 1
}
if [ -z $XDG_CONFIG_DIRS ]; then
XDG_CONFIG_DIRS=/etc/xdg
fi
if [ -z $XDG_CONFIG_HOME ]; then
XDG_CONFIG_HOME=$HOME/.config
fi
COMPIZ_MNGR_HOME=$XDG_CONFIG_HOME/compiz/compiz-manager
# Check if checks are skipped (by compiz-manager, not here!)
check_skip()
{
OLD_IFS=$IFS
IFS=:
for m in $XDG_CONFIG_DIRS
do
test -r $m/compiz/compiz-manager && . $m/compiz/compiz-manager
done
IFS=$OLD_IFS
unset OLD_IFS
if [ -r $COMPIZ_MNGR_HOME ]; then
. $COMPIZ_MNGR_HOME
fi
if [ "$SKIP_CHECKS" = yes ]; then
return 1
fi
return 0
}
# Check max texture size compared to resolution in use
check_resolution()
{
if [ -z $GLXINFO ]; then
STATUS=$SKIPPING
return 0
fi
TEXTURE_LIMIT=$(glxinfo -l 2>/dev/null | grep GL_MAX_TEXTURE_SIZE | sed 's/.*=[^0-9]//g')
RESOLUTION=$(xdpyinfo | grep -i dimensions: | sed 's/[^0-9]*pixels.*(.*).*//' | sed 's/[^0-9x]*//')
VRES=$(echo $RESOLUTION | sed 's/.*x//')
HRES=$(echo $RESOLUTION | sed 's/x.*//')
if [ -z $TEXTURE_LIMIT ]; then
STATUS=$SKIPPING
SKIP_MESSAGE="Unable to detect maximum 3D texture size"
return 0
elif [ $VRES -gt $TEXTURE_LIMIT ] || [ $HRES -gt $TEXTURE_LIMIT ]; then
STATUS=$FAIL
ERROR="Your current resolution is too high to run Compiz."
ERROR_MESSAGE="Your resolution is \033[1m${RESOLUTION}\033[0m but the maximum 3D texture size that your\n graphics card is capable of is \033[1m${TEXTURE_LIMIT}x${TEXTURE_LIMIT}\033[0m. Thus Compiz will not be able to run\n on this setup. You have to decrease the resolution first (in case you are\n using a dual-head setup, try disabling one monitor and run the script again)."
return 0
fi
return 1
}
# Check if there is already another compositing manager running
check_compositor()
{
XCOMPMGR_PID=$(ps -o pid= -C xcompmgr)
METACITY_PID=$(ps -o pid= -C metacity)
XFWM_PID=$(ps -o pid= -C xfwm4)
if [ ! -z $XCOMPMGR_PID ]; then
OTHER_COMP=true
COMP_MSG="It has been detected, that you are currently running \033[1mxcompmgr\033[0m, which is a\n standalone compositing manager."
QUERY_XCOMPMGR=yes
elif [ ! -z $METACITY_PID ]; then
METACITY=$(command -v metacity)
if [ ! -z $METACITY ]; then
if [ $($METACITY --version | grep metacity | awk '{print $2}' | sed 's/\.//g') -gt 2200 ]; then
GCONFTOOL=$(command -v gconftool-2)
if [ ! -z $GCONFTOOL ]; then
if $GCONFTOOL -a /apps/metacity/general | grep -q compositing_manager &&
[ "$($GCONFTOOL -g /apps/metacity/general/compositing_manager)" = true ]; then
OTHER_COMP=true
WM_COMP=GNOME
QUERY_METACITY=yes
fi
fi
fi
fi
elif [ ! -z $XFWM_PID ]; then
if [ -r $XDG_CONFIG_HOME/xfce4/mcs_settings/wmtweaks.xml ]; then
if grep UseCompositing $XDG_CONFIG_HOME/xfce4/mcs_settings/wmtweaks.xml | grep -q 'value="1"' &&
! ps -ef | grep xfwm4 | grep -q compositor=off ; then
OTHER_COMP=true
WM_COMP=Xfce
QUERY_XFWM=yes
fi
fi
fi
if [ ! -z $OTHER_COMP ]; then
ERROR="Another compositing manager in use."
if [ ! -z $WM_COMP ]; then
COMP_MSG="The default window manager of $WM_COMP has its own compositing manager to\n provide basic desktop effects."
fi
ERROR_MESSAGE="${COMP_MSG}\n If this one is in use, Compiz will not be able to run."
return 0
fi
return 1
}
# Hardy blacklists laptops using ati/radeon driver (LP#201330)
check_laptop_ati()
{
if [ "$DISTRIB_ID $DISTRIB_RELEASE" = "Ubuntu 8.04" ]; then
if [ "$DRV" = ati ] || [ "$DRV" = radeon ] ; then
if laptop-detect && check_skip ; then
ERROR="Laptop using $DRV driver."
ERROR_MESSAGE="It has been detected, that you are running a laptop with an ATI chip.\n The $DRV driver supports Compiz out-of-the-box but because of a nasty bug\n in the driver that causes X to freeze on some cards, this particular\n combination had to be blacklisted in Ubuntu \"Hardy Heron\".\n\n In case you already used Compiz successfully on Ubuntu 7.10 (Gutsy), it is\n safe to skip the blacklist."
QUERY_SKIP=yes
return 0
fi
fi
fi
return 1
}
# Check if "Composite" has been disabled in the xorg.conf
check_cmpst_xorg()
{
if [ "$COMP" = "$OK" ]; then
return 1
fi
# Detect location of the Xorg log file
if [ ! -z $XSET ]; then
XORG_CONF=$($XSET q | grep "Config file" | awk '{print $3}')
fi
# Fallback xorg.conf
if [ -z $XORG_CONF ]; then
if [ -f /etc/X11/xorg.conf ]; then
XORG_CONF=/etc/X11/xorg.conf
else
return 1
fi
fi
if [ ! -r $XORG_CONF ]; then
SKIP_MESSAGE="No permission to read $XORG_CONF"
return 1
else
CMPST=$(grep -i "Composite" $XORG_CONF)
if echo $CMPST | grep -qi "0" ; then
COMPST_STAT='"0"'
COMPST_FIX='"1"'
elif echo $CMPST | grep -qi "Disable" ; then
COMPST_STAT='"Disable"'
COMPST_FIX='"Enable"'
elif echo $CMPST | grep -qi "false" ; then
COMPST_STAT='"false"'
COMPST_FIX='"true"'
fi
fi
case $DE in
GNOME)
EDITOR=gedit
;;
KDE4 | KDE)
EDITOR=kate
;;
Xfce)
EDITOR=mousepad
;;
esac
if [ ! -z $COMPST_STAT ]; then
ERROR="Composite manually disabled"
ERROR_MESSAGE="It has been detected that the \"Composite\" option of your ${XORG_CONF}\n has been set to $COMPST_STAT"
if [ "$DRV" = fglrx ] && [ $FGLRX_VERSION -lt $FGLRX_COMPOSITE ]; then
return 0
fi
if [ ! -z $EDITOR ] && [ -x $EDITOR ]; then
DIST_HELP="Open the file being root, e.g. \033[1msudo $EDITOR $XORG_CONF\033[0m\n Then change $COMPST_STAT to $COMPST_FIX and save. Finally restart X and try again."
else
DIST_HELP="Open the file being root and change $COMPST_STAT to $COMPST_FIX\n Then restart X and try again."
fi
return 0
fi
return 1
}
# Check for Software Rasterizer
check_rasterizer()
{
if glxinfo 2>/dev/null | grep -q 'OpenGL renderer string: Software Rasterizer' ; then
ERROR="Software Rasterizer in use" #TODO add $ERROR_MESSAGE
return 0
else
return 1
fi
}
DISCLAIMER="You can skip this blacklist -- but keep in mind that you did so.\n Do not complain if you encounter any problems with Compiz afterwards."
# Check if driver in use is on the whitelist
check_whitelist()
{
for i in $WHITELIST ; do
if [ "$DRV" = "$i" ]; then
return 1
fi
done
if [ "$DRV" = "$UNKNOWN" ]; then
DRV_MSG="Unknown driver in use."
else
DRV_MSG="Detected driver is not on the whitelist."
fi
if [ "$TFP" = "$OK" -o "$SKIPPING" ] && [ "$NPO2" = "$OK" -o "$SKIPPING" ] &&
[ "$COMP" = "$OK" ] && [ "$FBC" = "$OK" -o "$SKIPPING" ]; then
if ! check_skip ; then
return 1
fi
STATUS=$WARN
WARNING=$DRV_MSG
ERROR_MESSAGE="Your driver is not widely known to work with Compiz and thus may be\n blacklisted on certain distributions.\n\n $DISCLAIMER"
QUERY_SKIP=yes
return 0
elif [ "$DRV" = vmware ] || [ "$DRV" = vboxvideo ]; then
STATUS=$FAIL
ERROR="$DRV driver in use"
ERROR_MESSAGE="Compiz can not be run in a virtual environment."
return 0
fi
STATUS=$FAIL
ERROR=$DRV_MSG
ERROR_MESSAGE="Your driver is not known (most probably not able) to work with Compiz.\n See http://wiki.compiz-fusion.org/Hardware for details."
if [ "$DISTRIB_ID" = Ubuntu ]; then
detect_driver_manager
fi
return 0
}
# PCI IDs that may be blacklist on certain distributions
# List taken from Gutsy
GUTSY_BLACKLIST="1002:5954 1002:5854 1002:5955 1002:4153 8086:2982 8086:2992
8086:29a2 8086:2a02 8086:2a12 8086:2972 1002:3152 1002:3150
1002:5462 1002:5653"
# Blacklisted IDs on Intrepid
BLACKLISTED_PCIIDS="$GUTSY_BLACKLIST 8086:1132 8086:2e02 8086:3577 8086:2562"
# My own private PCI IDs (added for testing reasons)
# Please let me know if I really was that stupid to let those in here.
#BLACKLISTED_PCIIDS="$BLACKLISTED_PCIIDS 1002:4152 1002:4e50 10de:0429"
# Check if PCI ID in use is on the blacklist
check_pciid()
{
if [ "$DISTRIB_ID" = Ubuntu ] && [ "$DISTRIB_RELEASE" = "8.04" ]; then
return 1
fi
for PCIID in $BLACKLISTED_PCIIDS ; do
if $(lspci -n | grep -q "$PCIID") && check_skip ; then
STATUS=$WARN
WARNING="PCI ID \033[1m${PCIID}\033[0m detected."
ERROR_MESSAGE="Your particular graphics chip may be blacklisted on certain distributions.\n However that does not necessarily mean you will not be able to run Compiz.\n\n $DISCLAIMER"
QUERY_SKIP=yes
return 0
fi
done
return 1
}
# Check for needed xdg files in Ubuntu
check_xdg()
{
if [ "$DISTRIB_ID" = Ubuntu ]; then
if [ $(echo "$DISTRIB_RELEASE" | sed 's/\.//g') -gt 704 ]; then
XDG_COMPIZ=/etc/xdg/compiz
if [ ! -e $XDG_COMPIZ/compiz-manager ] && [ -e /usr/bin/compiz.real ]; then
check_skip
if [ "$COMPIZ_BIN_PATH" = /usr/bin/ ] && [ "$COMPIZ_NAME" = compiz.real ] &&
[ "$PLUGIN_PATH" = /usr/lib/compiz/ ]; then
return 1
else
STATUS=$WARN
WARNING="No path to Compiz found."
ERROR_MESSAGE="In case you did not compile Compiz manually, this will result in Compiz\n failing to run."
if [ -d $XDG_COMPIZ ]; then
BACKUP=$(echo $(ls $XDG_COMPIZ | grep "compiz-manager\.") | awk '{print $1}')
fi
if [ ! -z $BACKUP ] ; then
DIST_HELP="You can try to fix this, by typing the following command in the terminal:\n\033[1msudo mv $XDG_COMPIZ/$BACKUP $XDG_COMPIZ/compiz-manager\033[0m"
fi
return 0
fi
fi
fi
fi
return 1
}
# Check if Nvidia card in use has enough memory
check_nvidia_mem()
{
if [ "$DRV" = nvidia ]; then
if [ "$RENDER" = Xgl ]; then
STATUS=$SKIPPING
SKIP_MESSAGE="Xgl on Nvidia chip."
return 0
fi
NVIDIA_SETTINGS=$(command -v nvidia-settings)
if [ ! -z $NVIDIA_SETTINGS ] ; then
MEM=$($NVIDIA_SETTINGS -q VideoRam | egrep Attribute\ \'VideoRam\'\ .*: | cut -d: -f3 | sed 's/[^0-9]//g')
NVIDIA_MEMORY=65536 # 64MB
if [ "$MEM" -lt $NVIDIA_MEMORY ] && check_skip ; then
STATUS=$WARN
WARNING="Nvidia card has not enough memory ($MEM KB) to run Compiz properly."
ERROR_MESSAGE="It is not recommended to run Compiz on a Nvidia chip with such a low amount\n of memory. Because of that, your hardware may be blacklisted on certain\n distributions.\n\n $DISCLAIMER"
QUERY_SKIP=yes
return 0
fi
return 1
fi
STATUS=$SKIPPING
SKIP_MESSAGE="Could not check the amount of memory on your Nvidia chip."
ERROR_MESSAGE="That does \033[1mnot\033[0m mean, you will not be able to use Compiz.\n If everything else went OK you are most probably fine.\n\n In case you want the script to check this step as well, install the program\n \033[1mnvidia-settings\033[0m on your system."
return 0
fi
return 1
}
# Check for proprietary driver (Ubuntu only)
check_prop_driver()
{
printf "Check if there's an alternate (proprietary) driver available? (Y/n) "
read REPLY
case $REPLY in
"" | y | Y | yes | Yes)
case $DRVS_MNGR in
hardy-gtk)
exec gksu jockey-gtk & exit 0
;;
hardy-kde)
exec kdesu jockey-kde & exit 0
;;
gutsy-gtk)
exec gksu restricted-manager & exit 0
;;
gutsy-kde)
exec kdesu restricted-manager-kde & exit 0
;;
feisty-gtk)
exec gksu restricted-manager & exit 0
;;
esac
;;
n | N | no | No)
exit 0
;;
*)
check_prop_driver
;;
esac
}
# Query if the user wants to skip checks in compiz-manager
query_skip_checks()
{
printf "Do you want to skip blacklist checks by Compiz? (y/N) "
read REPLY
case $REPLY in
y | Y | yes | Yes)
mkdir -p $XDG_CONFIG_HOME/compiz
echo SKIP_CHECKS=yes >> $COMPIZ_MNGR_HOME
;;
"" | n | N | no | No)
exit 0
;;
*)
query_skip_checks
;;
esac
}
# Query if the user wants to kill xcompmgr
query_xcompmgr()
{
printf "Do you want to disable xcompmgr? (Y/n) "
read REPLY
case $REPLY in
"" | y | Y | yes | Yes)
kill $XCOMPMGR_PID
;;
n | N | no | No)
exit 0
;;
*)
query_xcompmgr
;;
esac
}
# Query to disable Metacity's compositing manager
query_metacity_comp()
{
printf "Do you want to disable GNOME's compositing manager? (Y/n) "
read REPLY
case $REPLY in
"" | y | Y | yes | Yes)
$GCONFTOOL -s -t bool /apps/metacity/general/compositing_manager false
kill -9 $METACITY_PID 2>/dev/null
exec $METACITY --replace &
;;
n | N | no | No)
exit 0
;;
*)
query_metacity_comp
;;
esac
}
# Query if the user wants to disable Xfwm's compsitor
query_xfwm_comp()
{
printf "Do you want to disable Xfce's compositing manager? (Y/n) "
read REPLY
case $REPLY in
"" | y | Y | yes | Yes)
kill $XFWM_PID
sleep 1
exec xfwm4 --compositor=off --daemon &
exit 0
;;
n | N | no | No)
exit 0
;;
*)
query_xfwm_comp
;;
esac
}
# Ask user to print additional info (Starship Troopers style).
more_info()
{
printf "Would you like to know more? (Y/n) "
read REPLY
case $REPLY in
"" | y | Y | yes | Yes)
return 0
;;
n | N | no | No)
return 1
;;
*)
more_info
;;
esac
}
# --- Output starts here ---
# System info
printf "\nGathering information about your system...\n\n"
detect_distro
printf " Distribution: %9s\033[1m${DISTRIB_ID} ${DISTRIB_RELEASE}\033[0m\n"
detect_de
printf " Desktop environment: %2s\033[1m${DE}\033[0m\n"
detect_video
printf " Graphics chip: %8s\033[1m${VIDEO}\033[0m\n"
detect_driver
printf " Driver in use: %8s\033[1m${DRV}\033[0m\n"
detect_rendering
printf " Rendering method: %5s\033[1m${RENDER}\033[0m\n"
# System checks
printf "\nChecking if it's possible to run Compiz on your system..."
if [ "$CHECKS" = yes ]; then
printf "%2s[${SKIPPING}]\n\n"
else
printf "\n\n Checking for texture_from_pixmap..."
check_tfp
printf "%15s[${TFP}]\n"
printf " Checking for non power of two support..."
check_npo2
printf "%10s[${NPO2}]\n"
printf " Checking for composite extension..."
check_composite
printf "%15s[${COMP}]\n"
printf " Checking for FBConfig..."
check_fbconfig
printf "%26s[${FBC}]\n"
fi
# Hardware checks
printf " Checking for hardware/setup problems..."
if [ "$CHECKS" = yes ]; then
printf "%11s[${SKIPPING}]\n\n"
elif check_compositor || check_laptop_ati || check_cmpst_xorg || check_rasterizer ; then
printf "%11s[${FAIL}]\n\n"
elif check_fglrx || check_whitelist || check_resolution || check_xdg || check_pciid || check_nvidia_mem ; then
printf "%11s[${STATUS}]\n\n"
else
printf "%11s[${OK}]\n\n"
fi
# Print error or warning (if any)
# The $ERROR, $WARNING and $SKIP_MESSAGE outputs are supposed to be a
# short description of the respective error.
if [ "x$ERROR" != "x" ]; then
printf "There has been (at least) one error detected with your setup:\n \033[31mError:\033[0m $ERROR \n\n"
elif [ "x$WARNING" != "x" ]; then
printf "Something potential problematic has been detected with your setup:\n \033[33mWarning:\033[0m $WARNING \n\n"
elif [ "x$SKIP_MESSAGE" != "x" ]; then
printf "At least one check had to be skipped:\n \033[33mError:\033[0m $SKIP_MESSAGE \n\n"
fi
# Interactive output begins here
if [ "x$ERROR_MESSAGE" != "x" ] && more_info ; then
printf "\n $ERROR_MESSAGE \n\n"
if [ ! -z $QUERY_SKIP ]; then
query_skip_checks
elif [ ! -z $QUERY_XCOMPMGR ]; then
query_xcompmgr
elif [ ! -z $QUERY_METACITY ]; then
query_metacity_comp
elif [ ! -z $QUERY_XFWM ]; then
query_xfwm_comp
elif [ "x$DRVS_MNGR" != "x" ]; then
check_prop_driver
elif [ "x$DIST_HELP" != "x" ]; then
printf " $DIST_HELP \n\n"
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment