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 bin/* ${DESTDIR}/${PREFIX}/bin
|
||||||
install -d ${DESTDIR}/${PREFIX}/sbin
|
install -d ${DESTDIR}/${PREFIX}/sbin
|
||||||
install sbin/* ${DESTDIR}/${PREFIX}/sbin
|
install sbin/* ${DESTDIR}/${PREFIX}/sbin
|
||||||
install -d ${DESTDIR}/${PREFIX}/lib
|
install -d ${DESTDIR}/${PREFIX}/lib64
|
||||||
install lib/*.so ${DESTDIR}/${PREFIX}/lib
|
install lib64/*.so ${DESTDIR}/${PREFIX}/lib64
|
||||||
install -d ${DESTDIR}/${PREFIX}/lib/snail
|
install -d ${DESTDIR}/${PREFIX}/lib64/snail
|
||||||
install -d ${DESTDIR}/${PREFIX}/share
|
install -d ${DESTDIR}/${PREFIX}/share
|
||||||
install -d ${DESTDIR}/${PREFIX}/share/snail
|
install -d ${DESTDIR}/${PREFIX}/share/snail
|
||||||
install -d ${DESTDIR}/${PREFIX}/share/snail/init.d
|
install -d ${DESTDIR}/${PREFIX}/share/snail/init.d
|
||||||
@ -21,10 +21,10 @@ install:
|
|||||||
uninstall:
|
uninstall:
|
||||||
rm -f ${DESTDIR}/etc/X11/xorg.conf.*.snail
|
rm -f ${DESTDIR}/etc/X11/xorg.conf.*.snail
|
||||||
rm -f ${DESTDIR}/etc/init.d/snail*
|
rm -f ${DESTDIR}/etc/init.d/snail*
|
||||||
rm -f ${DESTDIR}/${PREFIX}/lib/libdlfaker.so
|
rm -f ${DESTDIR}/${PREFIX}/lib64/libdlfaker.so
|
||||||
rm -f ${DESTDIR}/${PREFIX}/lib/libgefaker.so
|
rm -f ${DESTDIR}/${PREFIX}/lib64/libgefaker.so
|
||||||
rm -f ${DESTDIR}/${PREFIX}/lib/librrfaker.so
|
rm -f ${DESTDIR}/${PREFIX}/lib64/librrfaker.so
|
||||||
rm -rf ${DESTDIR}/${PREFIX}/lib/snail
|
rm -rf ${DESTDIR}/${PREFIX}/lib64/snail
|
||||||
rm -rf ${DESTDIR}/${PREFIX}/share/snail
|
rm -rf ${DESTDIR}/${PREFIX}/share/snail
|
||||||
rm -f ${DESTDIR}/${PREFIX}/bin/nvrun
|
rm -f ${DESTDIR}/${PREFIX}/bin/nvrun
|
||||||
rm -f ${DESTDIR}/${PREFIX}/bin/snail.vglrun
|
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
|
LOCK_FILE=/tmp/.snail.lock
|
||||||
FIFO_FILE=/tmp/.snail.fifo
|
FIFO_FILE=/tmp/.snail.fifo
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
echo -n > $FIFO_FILE &
|
echo -n > $FIFO_FILE &
|
||||||
flock -w $TIMEOUT -s 9
|
flock -w $TIMEOUT -s 9
|
||||||
|
|
||||||
if [ 0 -eq $? ]; then
|
if [ 0 -eq $? ]; then
|
||||||
echo "Running $@ on nVidia"
|
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 "$@"
|
snail.vglrun -d :1 "$@"
|
||||||
echo "Application $@ was performed on nVidia"
|
echo "Application $@ was performed on nVidia"
|
||||||
|
|
||||||
|
@ -24,6 +24,6 @@ Section "Device"
|
|||||||
EndSection
|
EndSection
|
||||||
|
|
||||||
Section "Extensions"
|
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"
|
Option "RENDER" "Enable"
|
||||||
EndSection
|
EndSection
|
||||||
|
@ -2,12 +2,23 @@
|
|||||||
|
|
||||||
PATH=/usr/local/sbin:/usr/local/bin:$PATH
|
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
|
LOCK_FILE=/tmp/.snail.lock
|
||||||
FIFO_FILE=/tmp/.snail.fifo
|
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
|
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
|
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
|
while [ 1 ]; do
|
||||||
read <$FIFO_FILE
|
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 -u 9
|
||||||
flock 9
|
flock 9
|
||||||
echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo
|
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
|
done
|
||||||
} 9>$LOCK_FILE
|
} 9>$LOCK_FILE
|
||||||
|
@ -1,38 +1,39 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "Test for nVidia driver"
|
echo "Test for acpi_call/vgaswitcheroo"
|
||||||
lsmod | grep '^nvidia ' &>/dev/null
|
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
|
||||||
[ 0 -ne $? ] && snail.nv_pwr_on && modprobe nvidia ; snail.nv_pwr_off
|
echo "vgaswitcheroo is OK! ;-)"
|
||||||
if [ 0 -eq $? ]; then
|
|
||||||
echo "nVidia driver is OK! ;-)"
|
|
||||||
modprobe -r nvidia
|
|
||||||
else
|
else
|
||||||
echo "You must install standart nVidia driver first!"
|
if [ -f /proc/acpi/call ]; then
|
||||||
exit -1
|
echo "acpi_call is OK! ;-)"
|
||||||
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
|
|
||||||
else
|
else
|
||||||
echo "acpi_call kernel module not found, please install it!"
|
modprobe acpi_call
|
||||||
exit -1
|
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
|
||||||
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..."
|
echo "Test for dmidecode utility..."
|
||||||
dmidecode &>/dev/null
|
which dmidecode &>/dev/null
|
||||||
if [ 0 -eq $? ]; then
|
if [ 0 -eq $? ]; then
|
||||||
echo "dmidecode utility is OK! ;-)"
|
echo "dmidecode utility is OK! ;-)"
|
||||||
else
|
else
|
||||||
echo "Please install dmidecode and run the script as root again."
|
echo "Please install dmidecode and run the script again."
|
||||||
|
exit -1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Detecting your distribution..."
|
echo "Detecting your distribution..."
|
||||||
@ -59,7 +60,7 @@ elif [ -f /etc/arch-release ]; then
|
|||||||
elif [ -f /etc/slackware_version ]; then
|
elif [ -f /etc/slackware_version ]; then
|
||||||
DISTRIB_ID=slackware
|
DISTRIB_ID=slackware
|
||||||
DISTRIB_DESCRIPTION=`cat /etc/slackware_version`
|
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_ID=`lsb_release | grep '^Distributor' | sed 's~[^:]*:~~' | tr 'A-Z' 'a-z'`
|
||||||
DISTRIB_DESCRIPTION=`lsb_release | grep '^Description' | sed 's~[^:]*:~~'`
|
DISTRIB_DESCRIPTION=`lsb_release | grep '^Description' | sed 's~[^:]*:~~'`
|
||||||
DISTRIB_RELEASE=`lsb_release | grep '^Release' | 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_DESCRIPTION=`grep '^PRETTY_NAME=' /etc/os-release | cut -d'=' -f2`
|
||||||
DISTRIB_RELEASE=`grep '^VERSION_ID=' /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`
|
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
|
else
|
||||||
DISTRIB_DESCRIPTION=`cat /etc/*release* | head -n1`
|
DISTRIB_DESCRIPTION=`cat /etc/*release* | head -n1`
|
||||||
DISTRIB_ID=`echo ${DISTRIB_DESCRIPTION%% *} | tr 'A-Z' 'a-z'`
|
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_RELEASE=$DISTRIB_RELEASE"
|
||||||
echo "DISTRIB_CODENAME=$DISTRIB_CODENAME"
|
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
|
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
|
case "$DISTRIB_ID" in
|
||||||
"gentoo")
|
"gentoo")
|
||||||
cp -f $SNAIL_INIT_D_PATH/snail-watcher.openrc /etc/init.d/snail-watcher
|
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 add snail-watcher default
|
||||||
eselect rc stop snail-xserver
|
eselect rc stop snail-xserver
|
||||||
eselect rc restart snail-watcher
|
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")
|
"debian")
|
||||||
@ -102,34 +122,7 @@ case "$DISTRIB_ID" in
|
|||||||
update-rc.d snail-watcher defaults
|
update-rc.d snail-watcher defaults
|
||||||
/etc/init.d/snail-xserver stop
|
/etc/init.d/snail-xserver stop
|
||||||
/etc/init.d/snail-watcher start
|
/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
|
grep '^acpi_call$' /etc/modules || echo acpi_call >> /etc/modules
|
||||||
case "$DISTRIB_RELEASE" in
|
case "$DISTRIB_RELEASE" in
|
||||||
6.?.?)
|
6.?.?)
|
||||||
@ -185,7 +178,28 @@ case "$DISTRIB_ID" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
"fedora")
|
"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
|
#!/bin/bash
|
||||||
|
|
||||||
model=`dmidecode $@ -s system-product-name`
|
TRIES=8
|
||||||
|
|
||||||
let retry=8
|
lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
|
||||||
while [ 0 -lt $retry ]; do
|
|
||||||
|
|
||||||
case "$model" in
|
# Trying vgaswitcheroo method
|
||||||
M11XR2)
|
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
|
||||||
modprobe -r nvidia \
|
let tries=$TRIES
|
||||||
&& echo '\_SB.PCI0.P0P2.PEGP.NVOP 0 0x100 0x1A {255,255,255,255}' > /proc/acpi/call \
|
while [ 0 -lt $tries ]; do
|
||||||
&& echo '\_SB.PCI0.P0P2.PEGP._PS3' > /proc/acpi/call \
|
modprobe -r nvidia \
|
||||||
&& exit 0
|
&& echo 'OFF DIS' > /sys/kernel/debug/vgaswitcheroo/switch \
|
||||||
;;
|
&& 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.2
|
sleep 0.01
|
||||||
let retry--
|
let tries--
|
||||||
echo "retry countdown: $retry"
|
echo "tries left: $tries"
|
||||||
done
|
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
|
exit -1
|
||||||
|
|
||||||
|
@ -1,95 +1,116 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
model=`dmidecode $@ -s system-product-name`
|
TRIES=8
|
||||||
|
|
||||||
let retry=8
|
lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
|
||||||
while [ 0 -lt $retry ]; do
|
|
||||||
|
|
||||||
case "$model" in
|
# Trying vgaswitcheroo method
|
||||||
M11XR2)
|
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
|
||||||
echo '\_SB.PCI0.P0P2.PEGP._PS0' > /proc/acpi/call \
|
let tries=$TRIES
|
||||||
&& modprobe nvidia \
|
while [ 0 -lt $tries ]; do
|
||||||
&& exit 0
|
echo 'ON DIS' > /sys/kernel/debug/vgaswitcheroo/switch \
|
||||||
;;
|
&& modprobe nvidia \
|
||||||
1015PN)
|
&& exit 0
|
||||||
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
|
sleep 0.01
|
||||||
let retry--
|
let tries--
|
||||||
echo "retry countdown $retry"
|
echo "tries left: $tries"
|
||||||
done
|
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
|
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