develop branch merged
This commit is contained in:
commit
4b1a6d27e2
14
Makefile
14
Makefile
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
;;
|
||||
|
||||
*)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
10
share/init.d/snail-watcher.systemd
Normal file
10
share/init.d/snail-watcher.systemd
Normal 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
|
8
share/init.d/snail-xserver.systemd
Normal file
8
share/init.d/snail-xserver.systemd
Normal 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
|
Loading…
x
Reference in New Issue
Block a user