parent
6acf6b9128
commit
f7116a15e1
@ -0,0 +1,235 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Initial script for Live operating system
|
||||
# This script are launching before starting init from linux-live script.
|
||||
# Current dir allways must be set to root (/)
|
||||
# All system path must be relative, except initrd dirs
|
||||
|
||||
ENABLED=no
|
||||
[ "$ENABLED" != "yes" ] && exit 0
|
||||
|
||||
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin
|
||||
|
||||
LINKATI=/etc/ld.so.conf.d/GL/standard.conf
|
||||
LINKNVIDIA96=/etc/nvidia96xx/ld.so.conf
|
||||
LINKNVIDIA173=/etc/nvidia173/ld.so.conf
|
||||
LINKNVIDIA304=/etc/nvidia304/ld.so.conf
|
||||
LINKNVIDIA340=/etc/nvidia340/ld.so.conf
|
||||
LINKNVIDIA360=/etc/nvidia360/ld.so.conf
|
||||
LINKNVIDIACUR=/etc/nvidia-current/ld.so.conf
|
||||
LINKFBDEV=/etc/ld.so.conf.d/GL/standard.conf
|
||||
NVIDIATEST="nvidia-current nvidia340 nvidia304 nvidia"
|
||||
FAILSAFENVIDIA=nouveau
|
||||
CREATE_XORG_CONF=yes
|
||||
GLLDCONFIG=yes
|
||||
BUMBLEBEE=no
|
||||
OPTIRUN=
|
||||
PRIMUSRUN=
|
||||
VGABUSID=
|
||||
INTEGRATEDVGA=yes
|
||||
SORTOPT=
|
||||
XFILE=etc/X11/xorg.conf
|
||||
DELETE_XORG_CONF=no
|
||||
|
||||
DEBUGMODE=no
|
||||
. usr/lib/ublinux/functions
|
||||
. usr/lib/ublinux/os-config
|
||||
debug_mode "$0" "$@"
|
||||
|
||||
[ -f /memory/changes/etc/ld.so.cache ] && GLLDCONFIG=no
|
||||
[ -f /memory/changes/etc/X11/xorg.conf ] && CREATE_XORG_CONF=no
|
||||
|
||||
# forcing modes=auto for xorg.conf
|
||||
#grep -q XORG_RES etc/ublinux/config || echo XORG_RES=auto >>etc/ublinux/config
|
||||
|
||||
# reading last hw data VGAID CARDID XDRIVER
|
||||
. $HARDCONF
|
||||
# reading all values from etc/ublinux/config
|
||||
echo $SYSCONF | grep -q ^/ && SYSCONF=.$SYSCONF
|
||||
SOURCE=${SYSCONF}/config; [ -f "${SOURCE}" ] && . ${SOURCE} 2>/dev/null
|
||||
SOURCE=${SYSCONF}/video; [ -f "${SOURCE}" ] && . ${SOURCE} 2>/dev/null
|
||||
|
||||
# cmdline parameter has the highest priority
|
||||
CLXD=$(cmdline_value xdriver)
|
||||
if [ "$CLXD" ] ;then
|
||||
if [ "$CLXD" != "$XDRIVER" -a "$XDRIVER" ];then
|
||||
unset VGAID VGAVEN DELETE_XORG_CONF VGABUSID
|
||||
[ -f $XFILE ] && mv $XFILE $XFILE.$XDRIVER.bak
|
||||
CREATE_XORG_CONF=yes && GLLDCONFIG=yes
|
||||
fi
|
||||
XDRIVER=$CLXD
|
||||
fi
|
||||
|
||||
# auto detecting hadware
|
||||
[ "$INTEGRATEDVGA" != "yes" ] && SORTOPT='-r'
|
||||
# scan all vga cards
|
||||
NUM=$(lspci -nmm | sed s/"Class "// | grep -c '[.]. "0300"')
|
||||
# using VGABUSID if specified
|
||||
[ "$VGABUSID" ] && CARD=$(lspci -nmm | sed s/"Class "// | grep ^"$VGABUSID" | head -n1)
|
||||
# trying to find VGA card for specidied XDRIVER
|
||||
[ -z "$CARD" -a "$XDRIVER" = "intel" ] && CARD=$(lspci -nmm | sed s/"Class "// | grep '0300" "8086"' | sort $SORTOPT | head -n1)
|
||||
[ -z "$CARD" -a "$XDRIVER" = "ati" ] && CARD=$(lspci -nmm | sed s/"Class "// | grep '0300" "1002"' | sort $SORTOPT | head -n1)
|
||||
[ -z "$CARD" -a "$XDRIVER" = "nouveau" ] && CARD=$(lspci -nmm | sed s/"Class "// | grep '0300" "10de"' | sort $SORTOPT | head -n1)
|
||||
echo "$XDRIVER" | grep -q nvidia && [ -z "$CARD" ] && CARD=$(lspci -nmm | sed s/"Class "// | grep '0300" "10de"' | sort $SORTOPT | head -n1)
|
||||
# if card are not found we are getting first/last card (it depends of INTEGRATEDVGA)
|
||||
[ -z "$CARD" ] && CARD=$(lspci -nmm | sed s/"Class "// | grep '[.]. "0300"' | sort $SORTOPT | head -n1)
|
||||
|
||||
PCIID=$(echo $CARD | awk -F\" '{print $6}')
|
||||
PCIVEN=$(echo $CARD | awk -F\" '{print $4}')
|
||||
|
||||
# in case video was changed
|
||||
if [ "$PCIID" != "$VGAID" -a "$VGAID" ] ;then
|
||||
[ -f $XFILE ] && mv $XFILE $XFILE.$VGAVEN:$VGAID.bak
|
||||
unset VGAID VGAVEN DELETE_XORG_CONF VGABUSID
|
||||
CREATE_XORG_CONF=yes && GLLDCONFIG=yes
|
||||
XDRIVER=$CLXD
|
||||
fi
|
||||
|
||||
# deleting xorg.conf when xdriver=xorg specified
|
||||
[ "$XDRIVER" = "xorg" ] && DELETE_XORG_CONF=yes && CREATE_XORG_CONF=no && XDRIVER=
|
||||
|
||||
# setting VGABUSID only on multicard hardware
|
||||
[ "$NUM" != "1" ] && VGABUSID=$(echo $CARD | awk '{print $1}')
|
||||
|
||||
# looking exceptions
|
||||
if [ -z "$XDRIVER" ] ; then
|
||||
XDRIVER=$(grep -im1 ^$PCIVEN:$PCIID usr/share/ublinux/hwdata/xdriver/* | awk -F: '{print $1}')
|
||||
[ -z "$XDRIVER" ] || XDRIVER=$(basename $XDRIVER)
|
||||
fi
|
||||
|
||||
# detecting XDRIVER
|
||||
if [ -z "$XDRIVER" ] ; then
|
||||
[ "$PCIVEN" = "8086" ] && XDRIVER=intel
|
||||
[ "$PCIVEN" = "1002" ] && XDRIVER=ati
|
||||
[ "$PCIVEN" = "10de" ] && XDRIVER=nvidia
|
||||
fi
|
||||
|
||||
# testing nonfree nvidia modules (nvidia-current nvidia340 nvidia304 nvidia)
|
||||
if echo "$XDRIVER" | grep -q "nvidia" ;then
|
||||
XDRIVERTESTED=
|
||||
XDRIVERCURRENT=$XDRIVER
|
||||
[ "$XDRIVER" = "nvidia" ] && XDRIVERCURRENT=
|
||||
for a in $XDRIVERCURRENT $NVIDIATEST ;do
|
||||
chroot . modprobe $a
|
||||
lsmod | grep -q nvidia && XDRIVERTESTED=$a
|
||||
[ -z "$XDRIVERTESTED" ] || break
|
||||
done
|
||||
[ -z "$XDRIVERTESTED" ] || XDRIVER=$XDRIVERTESTED
|
||||
# nouveau driver
|
||||
[ -z "$XDRIVERTESTED" ] && XDRIVER=$FAILSAFENVIDIA
|
||||
fi
|
||||
|
||||
# storing data in config file
|
||||
if [ ! -z "$XDRIVER" ] ;then
|
||||
sed -i /^XDRIVER=/d $HARDCONF
|
||||
sed -i /^VGAID=/d $HARDCONF
|
||||
sed -i /^VGAVEN=/d $HARDCONF
|
||||
sed -i /^VGABUSID=/d $HARDCONF
|
||||
sed -i /DELETE_XORG_CONF=/d $HARDCONF
|
||||
echo XDRIVER=$XDRIVER >> $HARDCONF
|
||||
echo VGAID=$PCIID >> $HARDCONF
|
||||
echo VGAVEN=$PCIVEN >> $HARDCONF
|
||||
[ "$DELETE_XORG_CONF" = "yes" ] && echo DELETE_XORG_CONF=yes >> $HARDCONF
|
||||
[ "$VGABUSID" ] && echo VGABUSID=$VGABUSID >> $HARDCONF
|
||||
fi
|
||||
|
||||
# removing blocking conflict modules if its forced
|
||||
[ "$XDRIVER" = "nouveau" ] && sed -i /^blacklist.*nouveau/d etc/modprobe.d/blacklist-ublinux.conf
|
||||
echo "$XDRIVER" | grep -q "nvidia" && sed -i /^blacklist.*nvidia/d etc/modprobe.d/blacklist-ublinux.conf
|
||||
|
||||
# first run ldconfig tweak
|
||||
if [ "$GLLDCONFIG" = "yes" ] ;then
|
||||
LINK=$LINKFBDEV
|
||||
[ "$XDRIVER" = "ati" ] && LINK=$LINKATI
|
||||
[ "$XDRIVER" = "nvidia" -o "$XDRIVER" = "nvidia-current" ] && LINK=$LINKNVIDIACUR
|
||||
[ "$XDRIVER" = "nvidia96" ] && LINK=$LINKNVIDIA96
|
||||
[ "$XDRIVER" = "nvidia173" ] && LINK=$LINKNVIDIA173
|
||||
[ "$XDRIVER" = "nvidia304" ] && LINK=$LINKNVIDIA304
|
||||
[ "$XDRIVER" = "nvidia340" ] && LINK=$LINKNVIDIA340
|
||||
[ "$XDRIVER" = "nvidia360" ] && LINK=$LINKNVIDIA360
|
||||
[ -x 'usr/sbin/alternatives' ] && chroot . /usr/sbin/alternatives --set gl_conf $LINK >/dev/null 2>&1
|
||||
LDCACHE=$XDRIVER
|
||||
[ -z "$LDCACHE" -o ! -d usr/share/ublinux/ld.so.cache/$LDCACHE ] && LDCACHE=fbdev
|
||||
[ -d "usr/share/ublinux/ld.so.cache/$LDCACHE" ] && cp -pfR usr/share/ublinux/ld.so.cache/$LDCACHE/* ./
|
||||
fi
|
||||
|
||||
# create or delete xorg.conf
|
||||
if [ "$DELETE_XORG_CONF" = "yes" ] ;then
|
||||
rm -f etc/X11/xorg.conf
|
||||
else
|
||||
if [ "$CREATE_XORG_CONF" = "yes" ] ;then
|
||||
[ ! -z "$XDRIVER" -a -d usr/share/ublinux/xorg/$XDRIVER ] && cp -pfR usr/share/ublinux/xorg/$XDRIVER/* etc/X11
|
||||
[ -d usr/share/ublinux/xorg/$PCIVEN ] && cp -pfR usr/share/ublinux/xorg/$PCIVEN/* etc/X11
|
||||
[ -d usr/share/ublinux/xorg/$PCIVEN$PCIID ] && cp -pfR usr/share/ublinux/xorg/$PCIVEN$PCIID/* etc/X11
|
||||
fi
|
||||
fi
|
||||
|
||||
# bumblebee service for nvidia optimus card
|
||||
[ "$XDRIVER" = "intel" ] && lspci -nmm | sed s/"Class "// | grep -q '"0302" "10de"' && BUMBLEBEE=yes
|
||||
[ -f etc/bumblebee/bumblebee.conf ] || BUMBLEBEE=no
|
||||
if [ "$BUMBLEBEE" = "yes" ] ;then
|
||||
rm -f etc/systemd/system/bumblebeed.service
|
||||
ln -sf /lib/systemd/system/bumblebeed.service etc/systemd/system/graphical.target.wants/bumblebeed.service
|
||||
|
||||
# test for kernel module
|
||||
[ -z "$BUMBLEBEEDRIVER" ] && for a in $NVIDIATEST ;do
|
||||
chroot . modprobe $a
|
||||
lsmod | grep -q nvidia && BUMBLEBEEDRIVER=$a
|
||||
[ -z "$BUMBLEBEEDRIVER" ] || break
|
||||
done
|
||||
[ -z "$BUMBLEBEEDRIVER" ] && BUMBLEBEEDRIVER=nouveau
|
||||
|
||||
#settings for bumblebeed service
|
||||
sed -i /^KernelDriver=/d etc/bumblebee/bumblebee.conf
|
||||
sed -i "s/^\\[driver-nouveau\\]/\\[driver-nouveau\\]\\nKernelDriver=nouveau/" etc/bumblebee/bumblebee.conf
|
||||
if [ "$BUMBLEBEEDRIVER" = "nouveau" ] ;then
|
||||
sed -i "s/^Driver=.*/Driver=nouveau/" etc/bumblebee/bumblebee.conf
|
||||
sed -i "s/^\\[driver-nvidia\\]/\\[driver-nvidia\\]\\nKernelDriver=nvidia-current/" etc/bumblebee/bumblebee.conf
|
||||
else
|
||||
sed -i "s/^Driver=.*/Driver=nvidia/" etc/bumblebee/bumblebee.conf
|
||||
sed -i "s/^\\[driver-nvidia\\]/\\[driver-nvidia\\]\\nKernelDriver="$BUMBLEBEEDRIVER"/" etc/bumblebee/bumblebee.conf
|
||||
[ -d "usr/lib/$BUMBLEBEEDRIVER" ] && [ ! -h usr/lib/nvidia ] && ln -s "$BUMBLEBEEDRIVER" usr/lib/nvidia
|
||||
[ -d "usr/lib64/$BUMBLEBEEDRIVER" ] && [ ! -h usr/lib64/nvidia ] && ln -s "$BUMBLEBEEDRIVER" usr/lib64/nvidia
|
||||
fi
|
||||
[ -z "$BBBUSID" ] && BBBUSID=$(lspci -mn | sed s/'"Class '// | awk '{ print $1 " " $2 }' | grep -m1 0302 | awk '{print $1}' | tr . :)
|
||||
[ -z "$BBBUSID" ] || sed -i s/PCI:..:..:./PCI:$BBBUSID/ etc/bumblebee/xorg.conf.nvidia
|
||||
[ -z "$BBBUSID" ] || sed -i s/PCI:..:..:./PCI:$BBBUSID/ etc/bumblebee/xorg.conf.nouveau
|
||||
|
||||
echo "$OPTIRUN" | tr ',;' \\n | while read a ;do
|
||||
FILE=usr/share/applications/$a.desktop
|
||||
[ -f $FILE ] || FILE=usr/share/applications/kde4/$a.desktop
|
||||
if [ -f $FILE ] ;then
|
||||
sed -i "s|Exec=primusrun |Exec=|" $FILE
|
||||
grep -q optirun $FILE || sed -i "s|Exec=|Exec=optirun -b primus |" $FILE
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$PRIMUSRUN" | tr ',;' \\n | while read a ;do
|
||||
FILE=usr/share/applications/$a.desktop
|
||||
[ -f $FILE ] || FILE=usr/share/applications/kde4/$a.desktop
|
||||
if [ -f $FILE ] ;then
|
||||
sed -i "s|Exec=optirun -b primus |Exec=|" $FILE
|
||||
grep -q primusrun $FILE || sed -i "s|Exec=|Exec=primusrun |" $FILE
|
||||
fi
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
#setting BusID option for multicard hardware
|
||||
if [ -f $XFILE -a "$VGABUSID" ] ;then
|
||||
VGABUSID=$(echo "$VGABUSID" | tr '.' :)
|
||||
if ! grep -q "$VGABUSID" $XFILE ;then
|
||||
a=$XDRIVER
|
||||
echo $a | grep -q nvidia && a=nvidia
|
||||
a=$(grep -i driver.*$a $XFILE)
|
||||
sed -i /BusID/d $XFILE
|
||||
sed -i /"$a"/s/$/\\n'BusID "PCI:'$VGABUSID'"'/ $XFILE
|
||||
fi
|
||||
fi
|
||||
|
||||
#preloading kernel module to help xorg (all nvidia* modules are using one name 'nvidia')
|
||||
if echo "$XDRIVER" | egrep -q 'nvidia|nouveau' ;then
|
||||
sed -i /^nvidia/d etc/modprobe.preload
|
||||
sed -i /^nouveau/d etc/modprobe.preload
|
||||
echo "$XDRIVER" >> etc/modprobe.preload
|
||||
fi
|
||||
Loading…
Reference in new issue