Compare commits

...

66 Commits

Author SHA1 Message Date
Kolan Sh 87b1bc751a Auto reconfigure on nvidia-drivers rebuild. (works for Gentoo) 2012-10-13 23:20:57 +04:00
Kolan Sh 906db09e41 Fixed: flock: timeout cannot be zero 2012-09-29 16:19:44 +04:00
Kolan Sh 115c5151f1 Makefile fixed 2012-05-19 14:25:08 +04:00
Kolan Sh 1e312098ae Manifest created 2012-05-19 14:15:18 +04:00
Kolan Sh 3dcdfa10ec SRC_URI from 9999.ebuild removed 2012-05-19 14:12:28 +04:00
Kolan Sh b367e25435 More readable warning for X-server errors. 2012-05-18 00:56:48 +04:00
Kolan Sh 24badcb2fb Show nVidia X-server error log. 2012-05-18 00:44:23 +04:00
Kolan Sh 74f4dacc9a small fix 2012-05-17 20:26:23 +04:00
Kolan Sh 8ebb0c6f90 Check is Snail daemon is running. 2012-05-17 20:25:12 +04:00
Kolan Sh 82b80f6038 Added acpi_call rule for Lenovo T420 (Product Name: 41786VU) laptop 2012-05-16 18:50:45 +04:00
Kolan Sh 13acbebb29 small fix 2012-05-16 18:26:28 +04:00
Kolan Sh 1e5cf1fa07 9999-ebuild created but not tested. 2012-05-16 18:18:27 +04:00
Kolan Sh 54c0ab5125 More debug messages in nvrun script. 2012-05-16 18:02:16 +04:00
Kolan Sh ff414cebfd small fix 2012-05-16 18:02:10 +04:00
Kolan Sh 9b3e0113ca sys-power/bbswitch added to Gentoo ebuild dependencies. 2012-05-16 17:42:36 +04:00
Kolan Sh b0a367d8cd FIXME: baseboard-product-name or 41786VU to the ThinkPad T420 list? 2012-05-16 17:39:16 +04:00
Kolan Sh b82852047e FIXME: Test with baseboard-product-name instead of system-product-name? 2012-05-16 17:35:42 +04:00
Kolan Sh 7347ff2e9a nvidia-current kernel module name on Ubuntu 2012-05-16 02:26:25 +04:00
Kolan Sh eb8b54f5ac Gentoo ebuild updated 2012-05-16 01:59:12 +04:00
Kolan Sh 25cc887c25 Test for nVidia kernel module fixed 2012-05-16 01:48:09 +04:00
Kolan Sh 4d6bf1b256 Power ON/OFF methodics improved. 2012-05-16 01:44:16 +04:00
Kolan Sh 5b59f169e3 snail pwr off TRIES := 48 2012-05-16 00:00:50 +04:00
Kolan Sh 80028b2005 snail pwr off TRIES := 24 2012-05-15 23:42:24 +04:00
Kolan Sh 4a2acbbf06 Configure messages with prompt for manual reconfigure. 2012-05-15 23:33:15 +04:00
Kolan Sh 3e4ea058b8 r300 and r600 is spare in the list 2012-05-15 22:59:17 +04:00
Kolan Sh a15b1d2117 Don't mix switch methods. 2012-05-15 22:23:19 +04:00
Kolan Sh a374be74ce Power off sleep changed to 0.1s 2012-05-15 22:01:07 +04:00
Kolan Sh 59b4525a81 Increase timeout for acpi_call method 2012-05-15 20:56:14 +04:00
Kolan Sh 75eb8f9fdb Gentoo ebuild updated 2012-05-15 20:04:31 +04:00
Kolan Sh f29f8fa32a 32-bit libraries was not correctly installed. Fixed. 2012-05-15 20:02:57 +04:00
Kolan Sh e2a6252c76 Gentoo ebuild updated 2012-05-15 17:47:22 +04:00
Kolan Sh 695ecc7306 Remove broken or incorrect symlinks 2012-05-15 17:29:42 +04:00
Kolan Sh 93d452832e libnvidia-tls.so symlink on Debian-6 changed 2012-05-15 17:25:52 +04:00
Kolan Sh 8e077bbba3 Slashes in LD_PRELOAD 2012-05-15 17:10:04 +04:00
Kolan Sh 84be3fa6e3 LD_PRELOAD finally fixed. 2012-05-15 17:02:25 +04:00
Kolan Sh d7fce6d10f LD_PRLELOAD bugfix merged. 2012-05-15 16:00:39 +04:00
Kolan Sh d100e88e36 fixed bug with LD_PRELOAD library list 2012-05-15 15:58:57 +04:00
Kolan Sh b9586b1870 Merge commit '39ea202' 2012-05-15 14:40:30 +04:00
Kolan Sh 39ea202df2 TRIES reduced 2012-05-15 14:40:19 +04:00
Kolan Sh 969eb80026 Merge commit '16bb1e0' 2012-05-15 13:32:29 +04:00
Kolan Sh 16bb1e08e4 Improper symlink on Fedora fixed 2012-05-15 13:32:14 +04:00
kolan 70c774de20 Waiting for nVidia chip to power on is updated to 2 seconds 2012-05-15 12:12:55 +04:00
kolan 9e2d683478 Restart snail.watcher on Uprade in all other distros 2012-05-15 12:02:24 +04:00
Kolan Sh b040c57d84 Restarting snail-watcher on Upgade in Fedora 2012-05-15 05:14:49 +04:00
Kolan Sh c84542b1cf Gentoo ebuild updated 2012-05-15 04:50:37 +04:00
Kolan Sh f8a5cb7ecb nvrun wait timeout reduced 2012-05-15 04:38:58 +04:00
Kolan Sh 905823610d Stability improved. Latency reduced. Also fixes #76. 2012-05-15 04:29:29 +04:00
Kolan Sh 2afa920ce7 Gentoo ebuild updated 2012-05-15 01:17:50 +04:00
Kolan Sh 30981196a3 Merge commit '29e2e51' 2012-05-15 01:14:41 +04:00
Kolan Sh 29e2e510c2 Fixed bug with multilib preload libraries. 2012-05-15 01:13:24 +04:00
Kolan Sh 5cb8cce033 Gentoo ebuild 2012-05-14 01:08:06 +04:00
Kolan Sh 2c348e50fe README updated 2012-05-13 19:39:57 +04:00
Kolan Sh 81b9877b2e multilib for Ubuntu 12.04 2012-05-13 18:32:44 +04:00
Kolan Sh 4aef233f2b multilib for Ubuntu 12.04 2012-05-13 18:11:07 +04:00
kolan c37ed3c8e0 multilibs for Debian-6 (previous was for Wheezy) 2012-05-13 09:48:25 -04:00
Kolan Sh 47ea4e747a multilib for Verne 2012-05-13 17:14:23 +04:00
kolan 1431123410 Merge branch 'develop' of git://git.backbone.ws/snail/snail into develop 2012-05-13 16:49:16 +04:00
kolan 8e7f3f3332 Trying to add multilib on Debian 6.0 2012-05-13 16:49:12 +04:00
Kolan Sh 6a6558d99d Flush request queue after X-server start 2012-05-13 15:19:49 +04:00
Kolan Sh 2b98295e12 Gentoo lib32 symlinks changed 2012-05-13 14:52:06 +04:00
Kolan Sh 21cddd9d2b Uninstallation of 32bit lib*faker.so 2012-05-13 13:42:49 +04:00
Kolan Sh deae038661 Installation of 32bit lib*faker.so 2012-05-13 13:41:50 +04:00
Kolan Sh f6bb5d475b less warning messages 2012-05-13 13:33:39 +04:00
Kolan Sh 1c3cd44d3f Makefile and rules for Gentoo updated 2012-05-13 13:22:15 +04:00
Kolan Sh 798409ddbc Trying to add 32-bit support for applications like Doom-3 on multilib x86_64 platforms. 2012-05-13 13:09:41 +04:00
Kolan Sh f5f24b84f0 README updated 2012-05-12 00:33:28 +04:00
13 changed files with 327 additions and 280 deletions

View File

@ -11,6 +11,13 @@ install:
install -d ${DESTDIR}/${PREFIX}/sbin
install sbin/* ${DESTDIR}/${PREFIX}/sbin
if test x86_64 = `uname -m` ; then \
if test -d /usr/lib32 ; then \
install -d ${DESTDIR}/${PREFIX}/lib32; \
install lib32/*.so ${DESTDIR}/${PREFIX}/lib32; \
else \
install -d ${DESTDIR}/${PREFIX}/lib; \
install lib32/*.so ${DESTDIR}/${PREFIX}/lib; \
fi; \
if test -d /usr/lib64 ; then \
install -d ${DESTDIR}/${PREFIX}/lib64; \
install lib64/*.so ${DESTDIR}/${PREFIX}/lib64; \
@ -21,16 +28,21 @@ install:
if test ! -d /usr/lib ; then \
ln -sf lib64 /usr/lib; \
fi; \
install -d ${DESTDIR}/${PREFIX}/lib/snail; \
install -d ${DESTDIR}/${PREFIX}/lib/snail/lib32; \
else \
install -d ${DESTDIR}/${PREFIX}/lib; \
install lib32/*.so ${DESTDIR}/${PREFIX}/lib; \
install -d ${DESTDIR}/${PREFIX}/lib/snail; \
fi; \
install -d ${DESTDIR}/${PREFIX}/share; \
install -d ${DESTDIR}/${PREFIX}/share/snail; \
install -d ${DESTDIR}/${PREFIX}/share/snail/init.d; \
install share/init.d/* ${DESTDIR}/${PREFIX}/share/snail/init.d
install share/init.d/* ${DESTDIR}/${PREFIX}/share/snail/init.d ; \
if test -d /lib/modules/`uname -r` ; then \
mkdir -p ${DESTDIR}/lib/modules/`uname -r`/video \
touch ${DESTDIR}/lib/modules/`uname -r`/video/snail_autorebuild ; \
elif test -d /lib64/modules/`uname -r` ; then \
mkdir -p ${DESTDIR}/lib64/modules/`uname -r`/video \
touch ${DESTDIR}/lib64/modules/`uname -r`/video/snail_autorebuild ; \
fi
uninstall:
rm -f ${DESTDIR}/etc/X11/xorg.conf.*.snail
@ -40,6 +52,9 @@ uninstall:
rm -f ${DESTDIR}/${PREFIX}/lib/libgefaker.so
rm -f ${DESTDIR}/${PREFIX}/lib/librrfaker.so
rm -rf ${DESTDIR}/${PREFIX}/lib/snail
rm -f ${DESTDIR}/${PREFIX}/lib32/libdlfaker.so
rm -f ${DESTDIR}/${PREFIX}/lib32/libgefaker.so
rm -f ${DESTDIR}/${PREFIX}/lib32/librrfaker.so
rm -f ${DESTDIR}/${PREFIX}/lib64/libdlfaker.so
rm -f ${DESTDIR}/${PREFIX}/lib64/libgefaker.so
rm -f ${DESTDIR}/${PREFIX}/lib64/librrfaker.so

2
README
View File

@ -5,6 +5,7 @@ Features
Auto power off for second X-server and nVidia chip.
Easy installation (look at Wiki).
Multiuser access.
Multilib support.
Run in a way nvrun app.
Tested distros
@ -13,6 +14,7 @@ Tested distros
Debian Squeeze amd64
Debian Wheezy amd64
Fedora 16 (Verne) x86_64
Ubuntu 12.04 x86_64
Supported Models: All that supported by bbswitch, vgaswitcheroo (most of laptops with recent Linux kernel) + several by acpi_call (M11XR2, 1015PN, 1215N,
K42Jc, K52Jc, N53Jf, N53Jg, N71Jv, N73Jf, P52Jc, PL80Jt, U30Jc, U33Jc, U35Jc, U36Jc, UL80Jt, N53Sn, U41Sv, N53Sv, N61Jv, N73Sv, P31Jg, U43Jc, UL30Vt, E6420,

View File

@ -2,26 +2,34 @@
PATH=/usr/local/sbin:/usr/local/bin:$PATH
TIMEOUT=10 # wait timeout for X server start
let INTEL_IF_FAIL=1 # run on Intel if nVidia fails
TIMEOUT=8 # wait timeout for X server start
LOCK_FILE=/tmp/.snail.lock
FIFO_FILE=/tmp/.snail.fifo
[ ! -f $LOCK_FILE ] && echo "Snail daemon is not running. Please start it." && exit -1
{
echo -n > $FIFO_FILE &
flock -w $TIMEOUT -s 9
flock -w 1 -s 9
if [ 0 -ne $? ]; then
(nohup echo -n > $FIFO_FILE &>/dev/null)&
flock -w $TIMEOUT -s 9
fi
if [ 0 -eq $? ]; then
echo "Running $@ on nVidia"
export LD_LIBRARY_PATH=/usr/lib/snail
snail.vglrun -d :8293 "$@"
echo "Application $@ was performed on nVidia"
echo "Trying to run $@ on nVidia"
export LD_LIBRARY_PATH=/usr/lib/snail
LD_PRELOAD="/usr/lib/snail/lib32/libGL.so.1 \
/usr/lib/snail/lib32/libnvidia-tls.so \
/usr/lib/snail/lib32/libnvidia-glcore.so" \
snail.vglrun -d :8293 "$@" 2>/dev/null \
&& echo "Application $@ was performed on nVidia ;-)" && exit 0
echo "nvrun $@ returns an error. Here is nVidia X-server error log:"
grep '] (EE) ' /var/log/Xorg.8293.log
elif [ 0 -ne $INTEL_IF_FAIL ]; then
echo "Running $@ on Intel"
"$@"
echo "Application $@ was performed on Intel"
else
echo "Timout received for 'power on' request to Snail-daemon ;-("
fi
flock -u 9

View File

@ -1,34 +0,0 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=4
inherit eutils
DESCRIPTION="Snail - nVidia Optimus support"
SRC_URI="ftp://backbone.ws/projects/snail/${P}.tar.bz2"
HOMEPAGE="https://chili.backbone.ws/projects/snail"
KEYWORDS="-* ~x86 ~amd64"
SLOT="0"
LICENSE="GPL-3"
IUSE=""
DEPEND="x11-drivers/nvidia-drivers
sys-apps/dmidecode"
RDEPEND="${DEPEND}"
src_install() {
emake install DESTDIR="${D}" || die
}
pkg_postinst() {
snail.configure
}

View File

@ -0,0 +1,3 @@
DIST snail-1.2.6.tar.bz2 628927 RMD160 64a1c556fc72729ea19e25355769b528187d9542 SHA1 d7381c4c86dcd3c08ceb8d88e2a882aafa90a9d7 SHA256 3b4f81d3a2b46281bf494343ecdf0980b231cfe558e57f1403ea873ddcc35196
EBUILD snail-1.2.6.ebuild 976 RMD160 3f6d32cf30f0f98ef51a6c18c8a2912baca69e62 SHA1 413f601abf3b8ce458e07b8dfd3f49012d769fd1 SHA256 0d623003f723d520a901af0d096c7055a33b69427f9394788230605898e22d42
EBUILD snail-9999.ebuild 919 RMD160 406c48d01df438632f76564877867da5c300e2ea SHA1 af8e6f07f6846800ac4695b68da5f4a0daf1e929 SHA256 6f3866d6f6c5466627563042425a2dc7d1144a64d6edb04c1e57a0be676263d1

View File

@ -0,0 +1,53 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=4
inherit eutils
if [[ ${PV} == "9999" ]] ; then
EGIT_REPO_URI=${EGIT_REPO_URI:-"git://github.com/backbone/snail.git"}
inherit git-2
KEYWORDS=""
else
SRC_URI="ftp://backbone.ws/projects/snail/${P}.tar.bz2"
KEYWORDS="-* ~x86 ~amd64"
fi
DESCRIPTION="Snail - nVidia Optimus support"
SRC_URI="ftp://backbone.ws/projects/snail/${P}.tar.bz2"
HOMEPAGE="https://chili.backbone.ws/projects/snail"
SLOT="0"
LICENSE="GPL-3"
IUSE=""
DEPEND="x11-drivers/nvidia-drivers
sys-power/bbswitch
sys-apps/dmidecode"
RDEPEND="${DEPEND}"
src_prepare() {
if [[ ${PV} == "9999" ]] ; then
# Allow user patches to be applied without modifying the ebuild
epatch_user
fi
}
src_install() {
if [[ ${PV} == "9999" ]] ; then
emake install DESTDIR="${D}"
else
emake install DESTDIR="${D}" || die
fi
}
pkg_postinst() {
snail.configure
}

View File

@ -0,0 +1,51 @@
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=4
inherit eutils
if [[ ${PV} == "9999" ]] ; then
EGIT_REPO_URI=${EGIT_REPO_URI:-"git://github.com/backbone/snail.git"}
inherit git-2
KEYWORDS=""
else
SRC_URI="ftp://backbone.ws/projects/snail/${P}.tar.bz2"
KEYWORDS="-* ~x86 ~amd64"
fi
DESCRIPTION="Snail - nVidia Optimus support"
HOMEPAGE="https://chili.backbone.ws/projects/snail"
SLOT="0"
LICENSE="GPL-3"
IUSE=""
DEPEND="x11-drivers/nvidia-drivers
sys-power/bbswitch
sys-apps/dmidecode"
RDEPEND="${DEPEND}"
src_prepare() {
if [[ ${PV} == "9999" ]] ; then
# Allow user patches to be applied without modifying the ebuild
epatch_user
fi
}
src_install() {
if [[ ${PV} == "9999" ]] ; then
emake install DESTDIR="${D}"
else
emake install DESTDIR="${D}" || die
fi
}
pkg_postinst() {
snail.configure
}

View File

@ -20,6 +20,15 @@ FIFO_FILE=/tmp/.snail.fifo
$XSERVER_STOP_CMD && snail.nv_pwr_off # stop X service
sigterm ()
{
rm -f $LOCK_FILE
rm -f $FIFO_FILE
exit 0
}
trap sigterm SIGTERM
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
@ -29,8 +38,10 @@ rm -f $FIFO_FILE && mkfifo --mode 660 $FIFO_FILE && chgrp video $FIFO_FILE # cre
while [ 1 ]; do
read <$FIFO_FILE
echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo
snail.nv_pwr_on && $XSERVER_START_CMD # starting X server
flock -u 9
echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo
flock 9
echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo
$XSERVER_STOP_CMD && snail.nv_pwr_off # stopping X server

View File

@ -11,16 +11,18 @@ elif [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
echo "vgaswitcheroo is OK! ;-)"
else
echo "No bbswitch/acpi_call/vgaswitcheroo found. Please configure/install one of them! ;-("
echo "Also You can run 'snail.configure' manually when the problem is resolved."
exit -1
fi
echo "Test for nVidia driver"
snail.nv_pwr_on && snail.nv_pwr_off
modinfo nvidia &>/dev/null || modinfo nvidia-current &>/dev/null
if [ 0 -eq $? ]; then
echo "nVidia driver is OK! ;-)"
echo "nVidia kernel module found! ;-)"
else
echo "Test failed ;-("
echo "nVidia kernel module not found ;-("
echo "Probably you need to install standart nVidia driver or make a bug report..."
echo "Also You can run 'snail.configure' manually when the problem is resolved."
exit -1
fi
@ -29,7 +31,7 @@ which dmidecode &>/dev/null
if [ 0 -eq $? ]; then
echo "dmidecode utility is OK! ;-)"
else
echo "Please install dmidecode and run the script again."
echo "Please install dmidecode and run the 'snail.configure' script again."
exit -1
fi
@ -98,6 +100,8 @@ echo "DISTRIB_CODENAME=$DISTRIB_CODENAME"
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"
rm -f /usr/lib/snail/* &>/dev/null
rm -f /usr/lib/snail/lib32/* &>/dev/null
case "$DISTRIB_ID" in
"gentoo")
cp -f $SNAIL_INIT_D_PATH/snail-watcher.openrc /etc/init.d/snail-watcher
@ -113,15 +117,17 @@ case "$DISTRIB_ID" in
eselect opengl set xorg-x11
for arch in 32bit 64bit; do
for chip in i915 i965 r300 r600 sw; do
for chip in i915 i965 sw; do
eselect mesa set $arch $chip classic &>/dev/null;
done;
done
ln -sf /usr/lib/opengl/nvidia/lib/libGL.so.[0-9][0-9]* /usr/lib/snail/libGL.so.1
ln -sf /usr/lib32/opengl/nvidia/lib/libGL.so.1 /usr/lib/snail/lib32/libGL.so.1
ln -sf /usr/lib/xorg/modules/libfb.so /usr/lib/snail/libfb.so
ln -sf /usr/lib/xorg/modules/libwfb.so /usr/lib/snail/libwfb.so
ln -sf /usr/lib/opengl/nvidia/extensions/libglx.so.[0-9][0-9]* /usr/lib/snail/libglx.so
ln -sf /usr/lib/opengl/nvidia/lib/libnvidia-tls.so.[0-9][0-9]* /usr/lib/snail/
ln -sf /usr/lib32/opengl/nvidia/lib/libnvidia-tls.so /usr/lib/snail/lib32/libnvidia-tls.so
ln -sf /usr/lib/xorg/modules/drivers/nvidia_drv.so /usr/lib/snail/nvidia_drv.so
;;
@ -131,6 +137,7 @@ case "$DISTRIB_ID" in
update-rc.d snail-xserver remove
update-rc.d snail-watcher defaults
/etc/init.d/snail-xserver stop
/etc/init.d/snail-watcher stop
/etc/init.d/snail-watcher start
grep '^bbswitch$' /etc/modules || echo bbswitch >> /etc/modules
@ -165,6 +172,13 @@ case "$DISTRIB_ID" in
mv -f /usr/lib/libGL.so.* /tmp
apt-get install --reinstall libgl1-mesa-glx
mv -f /tmp/libGL.so.* /usr/lib
rm -f /usr/lib32/libGL.so.1
rm -f /usr/lib32/libGL.so
ln -sf libGL.so.1.2 /usr/lib32/libGL.so.1
ln -sf libGL.so.1 /usr/lib32/libGL.so
ln -sf /usr/lib32/libGL.so.[0-9][0-9]* /usr/lib/snail/lib32/libGL.so.1
ln -sf /usr/lib32/tls/libnvidia-tls.so.[0-9][0-9]* /usr/lib/snail/lib32/libnvidia-tls.so
fi
;;
@ -173,6 +187,10 @@ case "$DISTRIB_ID" in
ln -sf /usr/lib/mesa-diverted/x86_64-linux-gnu/libGL.so.1 /etc/alternatives/glx--libGL.so.1-x86_64-linux-gnu
rm -f /etc/alternatives/glx--linux-libglx.so
ln -sf /usr/lib/xorg/modules/extensions/libglx.so /etc/alternatives/glx--linux-libglx.so
rm -f /etc/alternatives/ia32-libGL.so.1
ln -sf /usr/lib32/nvidia/diversions/libGL.so.1.2 /etc/alternatives/ia32-libGL.so.1
rm -f /etc/alternatives/ia32-libGL.so
ln -sf /usr/lib32/nvidia/diversions/libGL.so.1.2 /etc/alternatives/ia32-libGL.so
ln -sf /usr/lib/xorg/modules/libfb.so /usr/lib/snail/libfb.so
ln -sf /usr/lib/xorg/modules/libwfb.so /usr/lib/snail/libwfb.so
@ -180,6 +198,7 @@ case "$DISTRIB_ID" in
ln -sf /usr/lib/x86_64-linux-gnu/nvidia/current/libGL.so.1 /usr/lib/snail/libGL.so.1
ln -sf /etc/alternatives/nvidia/libglx.so /usr/lib/snail/libglx.so
ln -sf /usr/lib/nvidia/nvidia/nvidia_drv.so /usr/lib/snail/nvidia_drv.so
ln -sf /usr/lib32/nvidia/libGL.so.1 /usr/lib/snail/lib32/libGL.so.1
;;
*)
@ -195,6 +214,7 @@ case "$DISTRIB_ID" in
update-rc.d snail-xserver remove
update-rc.d snail-watcher defaults
/etc/init.d/snail-xserver stop
/etc/init.d/snail-watcher stop
/etc/init.d/snail-watcher start
grep '^bbswitch$' /etc/modules || echo bbswitch >> /etc/modules
@ -213,6 +233,12 @@ case "$DISTRIB_ID" in
ln -sf /usr/lib/nvidia-current/tls/libnvidia-tls.so.[0-9][0-9]* /usr/lib/snail/
ln -sf /usr/lib/xorg/modules/libwfb.so /usr/lib/snail/libwfb.so
ln -sf /usr/lib/nvidia-current/xorg/nvidia_drv.so /usr/lib/snail/nvidia_drv.so
rm -f /etc/alternatives/i386-linux-gnu_gl_conf
ln -sf /usr/lib/i386-linux-gnu/mesa/ld.so.conf /etc/alternatives/i386-linux-gnu_gl_conf
ln -sf /usr/lib32/nvidia-current/libGL.so.1 /usr/lib/snail/lib32/libGL.so.1
ln -sf /usr/lib32/nvidia-current/tls/libnvidia-tls.so.[0-9][0-9]* /usr/lib/snail/lib32/libnvidia-tls.so
ln -sf /usr/lib32/nvidia-current/libnvidia-glcore.so.[0-9][0-9]* /usr/lib/snail/lib32/libnvidia-glcore.so
;;
*)
@ -230,6 +256,8 @@ case "$DISTRIB_ID" in
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 stop snail-xserver.service
systemctl stop snail-watcher.service
systemctl start snail-watcher.service
systemctl enable snail-watcher.service
ln -sf /usr/lib64/xorg/modules/libfb.so /usr/lib/snail/libfb.so
@ -239,6 +267,7 @@ case "$DISTRIB_ID" in
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
ln -sf /usr/lib/nvidia/libGL.so.1 /usr/lib/snail/lib32/libGL.so.1
;;
*)

View File

@ -1,128 +1,85 @@
#!/bin/bash
TRIES=8
lsmod | grep '^nouveau ' >/dev/null && rmmod -f nouveau &>/dev/null
rmmod -w nvidia &>/dev/null
# Trying bbswitch method
if [ -f /proc/acpi/bbswitch ]; then
let tries=$TRIES
while [ 0 -lt $tries ]; do
rmmod nvidia \
&& echo 'OFF' > /proc/acpi/bbswitch \
&& exit 0
echo 'OFF' > /proc/acpi/bbswitch \
&& a=`cat /proc/acpi/bbswitch` \
&& [ OFF == ${a##* } ] \
&& echo "nVidia chip powered off using bbswitch" \
&& exit 0
sleep 0.01
let tries--
echo "tries left: $tries"
done
echo "Cann't power off nVidia chip using bbswitch"
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)
rmmod 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)
rmmod nvidia \
&& echo '\OSGS 0x03' > /proc/acpi/call \
&& exit 0
;;
1215N)
rmmod 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)
rmmod nvidia \
&& echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call \
&& exit 0
;;
N61Jv|N73Sv)
rmmod nvidia \
&& echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call \
&& exit 0
;;
P31Jg)
rmmod nvidia \
&& echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call \
&& exit 0
;;
U43Jc)
rmmod 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)
rmmod nvidia \
&& echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call \
&& exit 0
;;
E6420)
rmmod nvidia \
&& echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
InspironN5110|XPSL702X)
rmmod 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)
rmmod nvidia \
&& echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
XPS15)
rmmod nvidia \
&& echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT410)
rmmod nvidia \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT420)
rmmod 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
model=`dmidecode -s system-product-name`
case "$model" in
M11XR2)
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
;;
1015PN)
echo '\OSGS 0x03' > /proc/acpi/call
;;
1215N)
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
;;
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call
;;
N61Jv|N73Sv)
echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call
;;
P31Jg)
echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call
;;
U43Jc)
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
;;
UL30Vt)
echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call
;;
E6420)
echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call
;;
InspironN5110|XPSL702X)
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
;;
Vostro3300|Vostro3500)
echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call
;;
XPS15)
echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call
;;
ThinkPadT410)
echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call
;;
ThinkPadT420|41786VU)
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
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
sleep 0.01
let tries--
echo "tries left: $tries"
done
echo "acpi_call used to power OFF nVidia chip"
exit 0
fi
# Trying vgaswitcheroo method
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
let tries=$TRIES
while [ 0 -lt $tries ]; do
rmmod nvidia \
&& echo 'OFF' > /sys/kernel/debug/vgaswitcheroo/switch \
&& exit 0
echo 'OFF' > /sys/kernel/debug/vgaswitcheroo/switch \
&& echo "nVidia chip powered off using vgaswitcheroo" \
&& exit 0
sleep 0.01
let tries--
echo "tries left: $tries"
done
echo "Cann't power off nVidia chip using vgaswitcheroo"
exit -1
fi
echo "Cann't power off nVidia chip"
exit -1

View File

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

View File

@ -8,7 +8,7 @@ PIDFILE=/var/run/snail-xserver.pid
start() {
ebegin "Starting Snail nVidia Optimus"
snail.nv_pwr_on || eend -1
export LD_LIBRARY_PATH=/usr/lib/snail:/usr/lib/snail/lib
export LD_LIBRARY_PATH=/usr/lib/snail
pid=`cat $PIDFILE 2>/dev/null`
rm -f $PIDFILE
[ -z $pid ] || ! pgrep -s $pid X &>/dev/null && \

2
share/init.d/snail-xserver.sysv Executable file → Normal file
View File

@ -27,7 +27,7 @@ case "$1" in
start)
log_begin_msg "Starting Snail nVidia Optimus"
snail.nv_pwr_on || log_end_msg 1
export LD_LIBRARY_PATH=/usr/lib/snail:/usr/lib/snail/lib
export LD_LIBRARY_PATH=/usr/lib/snail
pid=`cat $PIDFILE 2>/dev/null`
rm -f $PIDFILE
[ -z $pid ] || ! pgrep -s $pid X &>/dev/null && \