develop branch merged

This commit is contained in:
Kolan Sh 2012-04-08 19:39:40 +04:00
commit 4b1a6d27e2
12 changed files with 329 additions and 245 deletions

View File

@ -10,9 +10,9 @@ install:
install bin/* ${DESTDIR}/${PREFIX}/bin
install -d ${DESTDIR}/${PREFIX}/sbin
install sbin/* ${DESTDIR}/${PREFIX}/sbin
install -d ${DESTDIR}/${PREFIX}/lib
install lib/*.so ${DESTDIR}/${PREFIX}/lib
install -d ${DESTDIR}/${PREFIX}/lib/snail
install -d ${DESTDIR}/${PREFIX}/lib64
install lib64/*.so ${DESTDIR}/${PREFIX}/lib64
install -d ${DESTDIR}/${PREFIX}/lib64/snail
install -d ${DESTDIR}/${PREFIX}/share
install -d ${DESTDIR}/${PREFIX}/share/snail
install -d ${DESTDIR}/${PREFIX}/share/snail/init.d
@ -21,10 +21,10 @@ install:
uninstall:
rm -f ${DESTDIR}/etc/X11/xorg.conf.*.snail
rm -f ${DESTDIR}/etc/init.d/snail*
rm -f ${DESTDIR}/${PREFIX}/lib/libdlfaker.so
rm -f ${DESTDIR}/${PREFIX}/lib/libgefaker.so
rm -f ${DESTDIR}/${PREFIX}/lib/librrfaker.so
rm -rf ${DESTDIR}/${PREFIX}/lib/snail
rm -f ${DESTDIR}/${PREFIX}/lib64/libdlfaker.so
rm -f ${DESTDIR}/${PREFIX}/lib64/libgefaker.so
rm -f ${DESTDIR}/${PREFIX}/lib64/librrfaker.so
rm -rf ${DESTDIR}/${PREFIX}/lib64/snail
rm -rf ${DESTDIR}/${PREFIX}/share/snail
rm -f ${DESTDIR}/${PREFIX}/bin/nvrun
rm -f ${DESTDIR}/${PREFIX}/bin/snail.vglrun

View File

@ -8,14 +8,13 @@ let INTEL_IF_FAIL=1 # run on Intel if nVidia fails
LOCK_FILE=/tmp/.snail.lock
FIFO_FILE=/tmp/.snail.fifo
{
echo -n > $FIFO_FILE &
flock -w $TIMEOUT -s 9
if [ 0 -eq $? ]; then
echo "Running $@ on nVidia"
export LD_LIBRARY_PATH=/usr/lib/snail:/usr/lib/snail/lib
export LD_LIBRARY_PATH=/usr/lib/snail
snail.vglrun -d :1 "$@"
echo "Application $@ was performed on nVidia"

View File

@ -24,6 +24,6 @@ Section "Device"
EndSection
Section "Extensions"
Option "Composite" "Disable" # Enable in case you are using Compiz
# Option "Composite" "Disable" # Uncomment if you want to disable composite extensions
Option "RENDER" "Enable"
EndSection

View File

@ -2,12 +2,23 @@
PATH=/usr/local/sbin:/usr/local/bin:$PATH
SERVICE=/etc/init.d/snail-xserver
XSERVER_START_CMD=
XSERVER_STOP_CMD=
if [ -f /etc/init.d/snail-xserver ]; then
XSERVER_START_CMD="/etc/init.d/snail-xserver start"
XSERVER_STOP_CMD="/etc/init.d/snail-xserver stop"
elif [ -f /etc/systemd/system/snail-xserver.service ]; then
XSERVER_START_CMD="systemctl start snail-xserver.service"
XSERVER_STOP_CMD="systemctl stop snail-xserver.service"
else
echo "Error: snail-xservice not found ;-("
exit -1
fi
LOCK_FILE=/tmp/.snail.lock
FIFO_FILE=/tmp/.snail.fifo
$SERVICE stop && snail.nv_pwr_off # stop X service
$XSERVER_STOP_CMD && snail.nv_pwr_off # stop X service
touch $LOCK_FILE && chown root:video $LOCK_FILE && chmod 660 $LOCK_FILE # create lock file
rm -f $FIFO_FILE && mkfifo --mode 660 $FIFO_FILE && chgrp video $FIFO_FILE # create fifo
@ -18,10 +29,10 @@ rm -f $FIFO_FILE && mkfifo --mode 660 $FIFO_FILE && chgrp video $FIFO_FILE # cre
while [ 1 ]; do
read <$FIFO_FILE
snail.nv_pwr_on && $SERVICE start # starting X server
snail.nv_pwr_on && $XSERVER_START_CMD # starting X server
flock -u 9
flock 9
echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo
$SERVICE stop && snail.nv_pwr_off # stopping X server
$XSERVER_STOP_CMD && snail.nv_pwr_off # stopping X server
done
} 9>$LOCK_FILE

View File

@ -1,38 +1,39 @@
#!/bin/bash
echo "Test for nVidia driver"
lsmod | grep '^nvidia ' &>/dev/null
[ 0 -ne $? ] && snail.nv_pwr_on && modprobe nvidia ; snail.nv_pwr_off
if [ 0 -eq $? ]; then
echo "nVidia driver is OK! ;-)"
modprobe -r nvidia
echo "Test for acpi_call/vgaswitcheroo"
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
echo "vgaswitcheroo is OK! ;-)"
else
echo "You must install standart nVidia driver first!"
exit -1
fi
echo "Test for acpi_call module..."
lsmod | grep '^acpi_call ' &>/dev/null
if [ 0 -eq $? ]; then
echo "acpi_call is OK! ;-)"
else
modprobe acpi_call && lsmod | grep '^acpi_call ' &>/dev/null
if [ 0 -eq $? ]; then
modprobe -rf acpi_call
echo "Please configure acpi_call module for autoloading on system start and try again!"
exit -1
if [ -f /proc/acpi/call ]; then
echo "acpi_call is OK! ;-)"
else
echo "acpi_call kernel module not found, please install it!"
exit -1
modprobe acpi_call
if [ -f /proc/acpi/call ]; then
echo "Warning: Please configure acpi_call module for autoloading on system startup!"
else
echo "No vgaswitcheroo/acpi_call found. Please configure/install one of them! ;-("
exit -1
fi
fi
fi
echo "Test for nVidia driver"
snail.nv_pwr_on && snail.nv_pwr_off
if [ 0 -eq $? ]; then
echo "nVidia driver is OK! ;-)"
else
echo "Test failed ;-("
echo "Probably you need to install standart nVidia driver or make a bug report..."
exit -1
fi
echo "Test for dmidecode utility..."
dmidecode &>/dev/null
which dmidecode &>/dev/null
if [ 0 -eq $? ]; then
echo "dmidecode utility is OK! ;-)"
else
echo "Please install dmidecode and run the script as root again."
echo "Please install dmidecode and run the script again."
exit -1
fi
echo "Detecting your distribution..."
@ -59,7 +60,7 @@ elif [ -f /etc/arch-release ]; then
elif [ -f /etc/slackware_version ]; then
DISTRIB_ID=slackware
DISTRIB_DESCRIPTION=`cat /etc/slackware_version`
elif [ `which lsb_release` ]; then
elif [ `which lsb_release &>/dev/null` ]; then
DISTRIB_ID=`lsb_release | grep '^Distributor' | sed 's~[^:]*:~~' | tr 'A-Z' 'a-z'`
DISTRIB_DESCRIPTION=`lsb_release | grep '^Description' | sed 's~[^:]*:~~'`
DISTRIB_RELEASE=`lsb_release | grep '^Release' | sed 's~[^:]*:~~'`
@ -69,6 +70,13 @@ elif [ -f /etc/os-release ]; then
DISTRIB_DESCRIPTION=`grep '^PRETTY_NAME=' /etc/os-release | cut -d'=' -f2`
DISTRIB_RELEASE=`grep '^VERSION_ID=' /etc/os-release | cut -d'=' -f2`
DISTRIB_CODENAME=`grep '^NAME=' /etc/os-release | cut -d'=' -f2`
elif [ -f /etc/fedora-release ]; then
DISTRIB_ID=fedora
DISTRIB_DESCRIPTION=`cat /etc/fedora-release`
DISTRIB_RELEASE=${DISTRIB_DESCRIPTION% *}
DISTRIB_RELEASE=${DISTRIB_RELEASE##* }
DISTRIB_CODENAME=${DISTRIB_DESCRIPTION##*\(}
DISTRIB_CODENAME=${DISTRIB_CODENAME%%\)*}
else
DISTRIB_DESCRIPTION=`cat /etc/*release* | head -n1`
DISTRIB_ID=`echo ${DISTRIB_DESCRIPTION%% *} | tr 'A-Z' 'a-z'`
@ -82,8 +90,9 @@ echo "DISTRIB_DESCRIPTION=$DISTRIB_DESCRIPTION"
echo "DISTRIB_RELEASE=$DISTRIB_RELEASE"
echo "DISTRIB_CODENAME=$DISTRIB_CODENAME"
echo "Copying system init scripts to /etc/init.d and start snail-watcher"
SNAIL_INIT_D_PATH=/usr/share/snail/init.d
echo "Copying system init scripts (SysV/OpenRC/Systemd), start snail-watcher, configuring kernel modules and OpenGL libraries"
[[ -d /usr/lib64/snail && ! -d /usr/lib/snail ]] && ln -s /usr/lib64/snail /usr/lib/snail
case "$DISTRIB_ID" in
"gentoo")
cp -f $SNAIL_INIT_D_PATH/snail-watcher.openrc /etc/init.d/snail-watcher
@ -93,6 +102,17 @@ case "$DISTRIB_ID" in
eselect rc add snail-watcher default
eselect rc stop snail-xserver
eselect rc restart snail-watcher
eselect opengl set xorg-x11
for arch in 32bit 64bit; do
for chip in i915 i965 r300 r600 sw; do
eselect mesa set $arch $chip classic &>/dev/null;
done;
done
ln -sf /usr/lib/opengl/nvidia/extensions /usr/lib/snail/
ln -sf /usr/lib/opengl/nvidia/lib /usr/lib/snail/
ln -sf /usr/lib/xorg/modules /usr/lib/snail/
grep acpi_call /etc/conf.d/modules || echo 'modules="${modules} acpi_call' >> /etc/conf.d/modules
;;
"debian")
@ -102,34 +122,7 @@ case "$DISTRIB_ID" in
update-rc.d snail-watcher defaults
/etc/init.d/snail-xserver stop
/etc/init.d/snail-watcher start
;;
"fedora")
echo ""
;;
*)
echo "No rules for Your distribution. Please make a bug report."
exit -1
;;
esac
echo "Configuring kernel modules and OpenGL libraries"
case "$DISTRIB_ID" in
"gentoo")
eselect opengl set xorg-x11
for arch in 32bit 64bit; do
for chip in i915 i965 r300 r600 sw; do
eselect mesa set $arch $chip classic &>/dev/null;
done;
done
ln -sf /usr/lib/opengl/nvidia/extensions /usr/lib/snail/extensions
ln -sf /usr/lib/opengl/nvidia/lib /usr/lib/snail/lib
ln -sf /usr/lib/xorg/modules /usr/lib/snail/modules
grep acpi_call /etc/conf.d/modules || echo 'modules="${modules} acpi_call' >> /etc/conf.d/modules
;;
"debian")
grep '^acpi_call$' /etc/modules || echo acpi_call >> /etc/modules
case "$DISTRIB_RELEASE" in
6.?.?)
@ -185,7 +178,28 @@ case "$DISTRIB_ID" in
;;
"fedora")
echo ""
case "$DISTRIB_CODENAME" in
Verne)
echo acpi_call > /etc/modules-load.d/snail.conf
cp -f $SNAIL_INIT_D_PATH/snail-watcher.systemd /etc/systemd/system/snail-watcher.service
cp -f $SNAIL_INIT_D_PATH/snail-xserver.systemd /etc/systemd/system/snail-xserver.service
systemctl --system daemon-reload
systemctl start snail-watcher.service
systemctl enable snail-watcher.service
ln -sf /usr/lib64/xorg/modules/libfb.so /usr/lib/snail/libfb.so
ln -sf /usr/lib64/xorg/modules/libwfb.so /usr/lib/snail/libwfb.so
ln -sf /usr/lib64/xorg/modules/drivers/nvidia_drv.so /usr/lib/snail/nvidia_drv.so
rm -f /usr/lib64/xorg/modules/extensions/nvidia/libglx.so
rm -f /usr/lib64/nvidia/libGL.so.1
ln -sf /usr/lib64/nvidia/libGL.so.[0-9][0-9]* /usr/lib/snail/libGL.so.1
ln -sf /usr/lib64/xorg/modules/extensions/nvidia/libglx.so.[0-9][0-9]* /usr/lib/snail/libglx.so
;;
*)
echo "No rules for Your distribution. Please make a bug report."
exit -1
;;
esac
;;
*)

View File

@ -1,95 +1,116 @@
#!/bin/bash
model=`dmidecode $@ -s system-product-name`
TRIES=8
let retry=8
while [ 0 -lt $retry ]; do
lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
case "$model" in
M11XR2)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P2.PEGP.NVOP 0 0x100 0x1A {255,255,255,255}' > /proc/acpi/call \
&& echo '\_SB.PCI0.P0P2.PEGP._PS3' > /proc/acpi/call \
&& exit 0
;;
1015PN)
modprobe -r nvidia \
&& echo '\OSGS 0x03' > /proc/acpi/call \
&& exit 0
;;
1215N)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P4.GFX0._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.P0P4.GFX0._PS3' > /proc/acpi/call \
&& exit 0
;;
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call \
&& exit 0
;;
N61Jv|N73Sv)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call \
&& exit 0
;;
P31Jg)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call \
&& exit 0
;;
U43Jc)
modprobe -r nvidia \
&& echo '\_SB.PCI0.RP00.VGA._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.RP00.VGA._PS3' > /proc/acpi/call \
&& exit 0
;;
UL30Vt)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call \
&& exit 0
;;
E6420)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
InspironN5110|XPSL702X)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG0.PEGP._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG0.PEGP._PS3' > /proc/acpi/call \
&& exit 0
;;
Vostro3300|Vostro3500)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
XPS15)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT410)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT420)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG.VID._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& exit 0
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
# Trying vgaswitcheroo method
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
let tries=$TRIES
while [ 0 -lt $tries ]; do
modprobe -r nvidia \
&& echo 'OFF DIS' > /sys/kernel/debug/vgaswitcheroo/switch \
&& exit 0
sleep 0.2
let retry--
echo "retry countdown: $retry"
done
sleep 0.01
let tries--
echo "tries left: $tries"
done
echo "Cann't power off nVidia chip ;-("
exit -1
fi
# Trying acpi_call method
if [ -f /proc/acpi/call ]; then
model=`dmidecode $@ -s system-product-name`
tries=$TRIES
while [ 0 -lt $tries ]; do
case "$model" in
M11XR2)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P2.PEGP.NVOP 0 0x100 0x1A {255,255,255,255}' > /proc/acpi/call \
&& echo '\_SB.PCI0.P0P2.PEGP._PS3' > /proc/acpi/call \
&& exit 0
;;
1015PN)
modprobe -r nvidia \
&& echo '\OSGS 0x03' > /proc/acpi/call \
&& exit 0
;;
1215N)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P4.GFX0._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.P0P4.GFX0._PS3' > /proc/acpi/call \
&& exit 0
;;
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call \
&& exit 0
;;
N61Jv|N73Sv)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call \
&& exit 0
;;
P31Jg)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call \
&& exit 0
;;
U43Jc)
modprobe -r nvidia \
&& echo '\_SB.PCI0.RP00.VGA._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.RP00.VGA._PS3' > /proc/acpi/call \
&& exit 0
;;
UL30Vt)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call \
&& exit 0
;;
E6420)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
InspironN5110|XPSL702X)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG0.PEGP._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG0.PEGP._PS3' > /proc/acpi/call \
&& exit 0
;;
Vostro3300|Vostro3500)
modprobe -r nvidia \
&& echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
XPS15)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT410)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT420)
modprobe -r nvidia \
&& echo '\_SB.PCI0.PEG.VID._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& exit 0
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
sleep 0.01
let tries--
echo "tries left: $tries"
done
fi
echo "Cann't power off nVidia chip"
exit -1

View File

@ -1,95 +1,116 @@
#!/bin/bash
model=`dmidecode $@ -s system-product-name`
TRIES=8
let retry=8
while [ 0 -lt $retry ]; do
lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
case "$model" in
M11XR2)
echo '\_SB.PCI0.P0P2.PEGP._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
1015PN)
echo '\_SB.PCI0.P0P4.DGPU.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
1215N)
echo '\_SB.PCI0.P0P4.GFX0._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
echo '\_SB.PCI0.PEG1.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
N53Sn|U41Sv|N53Sv)
echo '\_SB.PCI0.PEG0.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
N61Jv|N73Sv)
echo '\_SB.PCI0.PEGR.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
P31Jg)
echo '\_SB.PCI0.PEG1.GFX0._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
U43Jc)
echo '\_SB.PCI0.RP00.VGA._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
UL30Vt)
echo '\_SB.PCI0.P0P1.VGA._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
E6420)
echo '\_SB.PCI0.PEG0.VID._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
InspironN5110|XPSL702X)
echo '\_SB.PCI0.PEG0.PEGP._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
Vostro3300|Vostro3500)
echo '\_SB.PCI0.P0P1.PEGP._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
XPS15)
echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
ThinkPadT410)
echo '\_SB.PCI0.PEG.VID._ON' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
ThinkPadT420)
echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
# Trying vgaswitcheroo method
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
let tries=$TRIES
while [ 0 -lt $tries ]; do
echo 'ON DIS' > /sys/kernel/debug/vgaswitcheroo/switch \
&& modprobe nvidia \
&& exit 0
sleep 0.01
let retry--
echo "retry countdown $retry"
done
sleep 0.01
let tries--
echo "tries left: $tries"
done
echo "Cann't power on nVidia chip ;-("
exit -1
fi
# Trying acpi_call method
if [ -f /proc/acpi/call ]; then
model=`dmidecode $@ -s system-product-name`
tries=$TRIES
while [ 0 -lt $tries ]; do
case "$model" in
M11XR2)
echo '\_SB.PCI0.P0P2.PEGP._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
1015PN)
echo '\_SB.PCI0.P0P4.DGPU.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
1215N)
echo '\_SB.PCI0.P0P4.GFX0._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
echo '\_SB.PCI0.PEG1.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
N53Sn|U41Sv|N53Sv)
echo '\_SB.PCI0.PEG0.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
N61Jv|N73Sv)
echo '\_SB.PCI0.PEGR.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
P31Jg)
echo '\_SB.PCI0.PEG1.GFX0._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
U43Jc)
echo '\_SB.PCI0.RP00.VGA._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
UL30Vt)
echo '\_SB.PCI0.P0P1.VGA._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
E6420)
echo '\_SB.PCI0.PEG0.VID._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
InspironN5110|XPSL702X)
echo '\_SB.PCI0.PEG0.PEGP._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
Vostro3300|Vostro3500)
echo '\_SB.PCI0.P0P1.PEGP._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
XPS15)
echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
ThinkPadT410)
echo '\_SB.PCI0.PEG.VID._ON' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
ThinkPadT420)
echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
sleep 0.01
let tries--
echo "tries left: $tries"
done
fi
echo "Cann't power on nVidia chip"
exit -1

View File

@ -0,0 +1,10 @@
[Unit]
Description=Daemon to auto start/stop power up/down nVidia graphics.
After=syslog.target
[Service]
ExecStart=/bin/bash -c '(nohup /usr/sbin/snail-watcher.sh &>/dev/null)&'
Type=forking
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,8 @@
[Unit]
Description=Daemon to auto start/stop power up/down nVidia graphics.
After=syslog.target
[Service]
ExecStart=/bin/bash -c '(nohup /usr/bin/X -ac -config /etc/X11/xorg.conf.nvidia -sharevts -modulepath /usr/lib/snail -nolisten tcp -noreset :1 vt9 &>/dev/null)&'
ExecStop=/usr/sbin/snail.nv_pwr_off
Type=forking