From d064701c19d88c4e181a33f32b6f41028e655cb3 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Fri, 6 Apr 2012 15:00:30 -0400 Subject: [PATCH 01/14] lib->lib64 --- Makefile | 14 +++++++------- {lib => lib64}/libdlfaker.so | Bin {lib => lib64}/libgefaker.so | Bin {lib => lib64}/librrfaker.so | Bin 4 files changed, 7 insertions(+), 7 deletions(-) rename {lib => lib64}/libdlfaker.so (100%) rename {lib => lib64}/libgefaker.so (100%) rename {lib => lib64}/librrfaker.so (100%) diff --git a/Makefile b/Makefile index 69744bb..d84b41f 100644 --- a/Makefile +++ b/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 diff --git a/lib/libdlfaker.so b/lib64/libdlfaker.so similarity index 100% rename from lib/libdlfaker.so rename to lib64/libdlfaker.so diff --git a/lib/libgefaker.so b/lib64/libgefaker.so similarity index 100% rename from lib/libgefaker.so rename to lib64/libgefaker.so diff --git a/lib/librrfaker.so b/lib64/librrfaker.so similarity index 100% rename from lib/librrfaker.so rename to lib64/librrfaker.so From 7ba3e230aea229f189e1fca1edccb67e57e4a61b Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 01:28:12 -0400 Subject: [PATCH 02/14] Add vgaswitcheroo support --- sbin/snail.nv_pwr_off | 167 ++++++++++++++++++++++-------------------- sbin/snail.nv_pwr_on | 167 ++++++++++++++++++++++-------------------- 2 files changed, 172 insertions(+), 162 deletions(-) diff --git a/sbin/snail.nv_pwr_off b/sbin/snail.nv_pwr_off index deff6fb..c2a5561 100755 --- a/sbin/snail.nv_pwr_off +++ b/sbin/snail.nv_pwr_off @@ -4,87 +4,92 @@ model=`dmidecode $@ -s system-product-name` let retry=8 while [ 0 -lt $retry ]; 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 + if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then + modprobe -r nvidia \ + && echo 'OFF DIS' > /sys/kernel/debug/vgaswitcheroo/switch \ + && exit 0 + else + 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 + fi sleep 0.2 let retry-- diff --git a/sbin/snail.nv_pwr_on b/sbin/snail.nv_pwr_on index 1d6a5a4..b300378 100755 --- a/sbin/snail.nv_pwr_on +++ b/sbin/snail.nv_pwr_on @@ -4,87 +4,92 @@ model=`dmidecode $@ -s system-product-name` let retry=8 while [ 0 -lt $retry ]; 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 + if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then + echo 'ON DIS' > /sys/kernel/debug/vgaswitcheroo/switch \ + && modprobe nvidia \ + && exit 0 + else + 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 + fi sleep 0.01 let retry-- From e97786e97972b095f182d1ebbaf1fdf87f17808f Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 11:57:45 -0400 Subject: [PATCH 03/14] More logical pwr_{on,off}. --- sbin/snail.nv_pwr_off | 38 +++++++++++++++++++++++++++----------- sbin/snail.nv_pwr_on | 38 +++++++++++++++++++++++++++----------- 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/sbin/snail.nv_pwr_off b/sbin/snail.nv_pwr_off index c2a5561..8d4a0f8 100755 --- a/sbin/snail.nv_pwr_off +++ b/sbin/snail.nv_pwr_off @@ -1,14 +1,30 @@ #!/bin/bash -model=`dmidecode $@ -s system-product-name` +TRIES=8 -let retry=8 -while [ 0 -lt $retry ]; do - if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then +lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null + +# 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 - else + + 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 \ @@ -89,12 +105,12 @@ while [ 0 -lt $retry ]; do *) echo "Snail: unknown Notebook model: $model"; exit -1 ;; esac - fi - sleep 0.2 - let retry-- - echo "retry countdown: $retry" -done + sleep 0.01 + let tries-- + echo "tries left: $tries" + done +fi +echo "Cann't power off nVidia chip" exit -1 - diff --git a/sbin/snail.nv_pwr_on b/sbin/snail.nv_pwr_on index b300378..c25a02a 100755 --- a/sbin/snail.nv_pwr_on +++ b/sbin/snail.nv_pwr_on @@ -1,14 +1,30 @@ #!/bin/bash -model=`dmidecode $@ -s system-product-name` +TRIES=8 -let retry=8 -while [ 0 -lt $retry ]; do - if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then +lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null + +# 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 - else + + 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 \ @@ -89,12 +105,12 @@ while [ 0 -lt $retry ]; do *) echo "Snail: unknown Notebook model: $model"; exit -1 ;; esac - fi - sleep 0.01 - let retry-- - echo "retry countdown $retry" -done + sleep 0.01 + let tries-- + echo "tries left: $tries" + done +fi +echo "Cann't power on nVidia chip" exit -1 - From 0c5417a7c142754c3b36a6dcf0b0721ae5b35123 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 12:42:28 -0400 Subject: [PATCH 04/14] snail.configure small fixes --- sbin/snail.configure | 70 +++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/sbin/snail.configure b/sbin/snail.configure index 11376d1..d68c76c 100755 --- a/sbin/snail.configure +++ b/sbin/snail.configure @@ -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,7 +90,7 @@ 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" +echo "Copying system init scripts (SysV/OpenRC/Systemd) and start snail-watcher" SNAIL_INIT_D_PATH=/usr/share/snail/init.d case "$DISTRIB_ID" in "gentoo") @@ -185,7 +193,15 @@ case "$DISTRIB_ID" in ;; "fedora") - echo "" + case "$DISTRIB_CODENAME" in + Verne) + ;; + + *) + echo "No rules for Your distribution. Please make a bug report." + exit -1 + ;; + esac ;; *) From 1cab2481a588d691ac41f3e67f58403b466f94fb Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 13:00:17 -0400 Subject: [PATCH 05/14] acpi_call autoload for Fedora 16 (Verne) --- sbin/snail.configure | 1 + 1 file changed, 1 insertion(+) diff --git a/sbin/snail.configure b/sbin/snail.configure index d68c76c..b8f8f08 100755 --- a/sbin/snail.configure +++ b/sbin/snail.configure @@ -195,6 +195,7 @@ case "$DISTRIB_ID" in "fedora") case "$DISTRIB_CODENAME" in Verne) + echo acpi_call > /etc/modules-load.d/snail.conf ;; *) From e8099df867ae5232c162103aa978be61c5cc7a4c Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 13:06:00 -0400 Subject: [PATCH 06/14] templates of init scripts for Fedora --- share/init.d/snail-watcher.systemd | 10 ++++++++++ share/init.d/snail-xserver.systemd | 0 2 files changed, 10 insertions(+) create mode 100644 share/init.d/snail-watcher.systemd create mode 100644 share/init.d/snail-xserver.systemd diff --git a/share/init.d/snail-watcher.systemd b/share/init.d/snail-watcher.systemd new file mode 100644 index 0000000..0bf7e75 --- /dev/null +++ b/share/init.d/snail-watcher.systemd @@ -0,0 +1,10 @@ +[Unit] +Description=Daemon to auto start/stop power up/down nVidia graphics. +After=syslog.target + +[Service] +ExecStart=/usr/sbin/snail-watcher.sh +Type=oneshot + +[Install] +WantedBy=multi-user.target diff --git a/share/init.d/snail-xserver.systemd b/share/init.d/snail-xserver.systemd new file mode 100644 index 0000000..e69de29 From b17a7f20a516cb7aee21127d52a7c1e91d39f7bf Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 13:17:38 -0400 Subject: [PATCH 07/14] snail-watcher.systemd ready ;-) --- share/init.d/snail-watcher.systemd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/init.d/snail-watcher.systemd b/share/init.d/snail-watcher.systemd index 0bf7e75..87a460b 100644 --- a/share/init.d/snail-watcher.systemd +++ b/share/init.d/snail-watcher.systemd @@ -3,8 +3,8 @@ Description=Daemon to auto start/stop power up/down nVidia graphics. After=syslog.target [Service] -ExecStart=/usr/sbin/snail-watcher.sh -Type=oneshot +ExecStart=/bin/bash -c '(nohup /usr/sbin/snail-watcher.sh &>/dev/null)&' +Type=forking [Install] WantedBy=multi-user.target From f7a0b2e9b2b3357b902fc93dc5f343c388b23dae Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sat, 7 Apr 2012 14:19:30 -0400 Subject: [PATCH 08/14] Concatenate configure actions --- sbin/snail.configure | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/sbin/snail.configure b/sbin/snail.configure index b8f8f08..fe9cc89 100755 --- a/sbin/snail.configure +++ b/sbin/snail.configure @@ -90,8 +90,8 @@ echo "DISTRIB_DESCRIPTION=$DISTRIB_DESCRIPTION" echo "DISTRIB_RELEASE=$DISTRIB_RELEASE" echo "DISTRIB_CODENAME=$DISTRIB_CODENAME" -echo "Copying system init scripts (SysV/OpenRC/Systemd) 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" case "$DISTRIB_ID" in "gentoo") cp -f $SNAIL_INIT_D_PATH/snail-watcher.openrc /etc/init.d/snail-watcher @@ -101,30 +101,7 @@ case "$DISTRIB_ID" in eselect rc add snail-watcher default eselect rc stop snail-xserver eselect rc restart snail-watcher - ;; - - "debian") - cp -f $SNAIL_INIT_D_PATH/snail-watcher.sysv /etc/init.d/snail-watcher - cp -f $SNAIL_INIT_D_PATH/snail-xserver.sysv /etc/init.d/snail-xserver - update-rc.d snail-xserver remove - 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 @@ -138,6 +115,13 @@ case "$DISTRIB_ID" in ;; "debian") + cp -f $SNAIL_INIT_D_PATH/snail-watcher.sysv /etc/init.d/snail-watcher + cp -f $SNAIL_INIT_D_PATH/snail-xserver.sysv /etc/init.d/snail-xserver + update-rc.d snail-xserver remove + update-rc.d snail-watcher defaults + /etc/init.d/snail-xserver stop + /etc/init.d/snail-watcher start + grep '^acpi_call$' /etc/modules || echo acpi_call >> /etc/modules case "$DISTRIB_RELEASE" in 6.?.?) @@ -196,6 +180,11 @@ case "$DISTRIB_ID" in 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 ;; *) From e0c7d7d0d95325017ba1c516877fac1126373b3f Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Apr 2012 04:34:27 -0400 Subject: [PATCH 09/14] snail-xserver for Systemd --- share/init.d/snail-xserver.systemd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/share/init.d/snail-xserver.systemd b/share/init.d/snail-xserver.systemd index e69de29..98bea51 100644 --- a/share/init.d/snail-xserver.systemd +++ b/share/init.d/snail-xserver.systemd @@ -0,0 +1,8 @@ +[Unit] +Description=Daemon to auto start/stop power up/down nVidia graphics. +After=syslog.target + +[Service] +ExecStart=/bin/bash -c '(/usr/sbin/snail.nv_pwr_on && 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 From 268a45a02fb6c20102323d294a5984bb7aa0f8b5 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Apr 2012 09:13:49 -0400 Subject: [PATCH 10/14] /usr/lib/snail symlink --- sbin/snail.configure | 1 + 1 file changed, 1 insertion(+) diff --git a/sbin/snail.configure b/sbin/snail.configure index fe9cc89..d0482a9 100755 --- a/sbin/snail.configure +++ b/sbin/snail.configure @@ -92,6 +92,7 @@ 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" +[[ -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 From fe89748dc00fc707bc519080f84f34ec99dc5d61 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Apr 2012 09:26:49 -0400 Subject: [PATCH 11/14] Snail library symlinks for Fedora 16 --- sbin/snail.configure | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sbin/snail.configure b/sbin/snail.configure index d0482a9..56424cc 100755 --- a/sbin/snail.configure +++ b/sbin/snail.configure @@ -186,6 +186,11 @@ case "$DISTRIB_ID" in systemctl --system daemon-reload systemctl start snail-watcher.service systemctl enable snail-watcher.service + ln -sf /usr/lib64/nvidia/libGL.so.1 /usr/lib/snail/libGL.so.1 + 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/extensions/nvidia/libglx.so /usr/lib/snail/libglx.so + ln -sf /usr/lib64/xorg/modules/drivers/nvidia_drv.so /usr/lib/snail/nvidia_drv.so ;; *) From e032425207787eea4afe429e598fe12a40ae3954 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Apr 2012 09:59:23 -0400 Subject: [PATCH 12/14] Fedora symlinks creation in now correct --- sbin/snail.configure | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sbin/snail.configure b/sbin/snail.configure index 56424cc..f3c0f37 100755 --- a/sbin/snail.configure +++ b/sbin/snail.configure @@ -186,11 +186,13 @@ case "$DISTRIB_ID" in systemctl --system daemon-reload systemctl start snail-watcher.service systemctl enable snail-watcher.service - ln -sf /usr/lib64/nvidia/libGL.so.1 /usr/lib/snail/libGL.so.1 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/extensions/nvidia/libglx.so /usr/lib/snail/libglx.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 ;; *) From 18fd2cd1021ccdccd24b6bfd65c023010ee21cd2 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Apr 2012 10:04:14 -0400 Subject: [PATCH 13/14] Enable composite extensions by default --- etc/X11/xorg.conf.intel.snail | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/X11/xorg.conf.intel.snail b/etc/X11/xorg.conf.intel.snail index 335a691..60339c9 100644 --- a/etc/X11/xorg.conf.intel.snail +++ b/etc/X11/xorg.conf.intel.snail @@ -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 From c2c54aabd4647586832c3c2f450346f68d2bba11 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Sun, 8 Apr 2012 10:44:17 -0400 Subject: [PATCH 14/14] Fedora 16 x86_64 (64bit) support is done --- bin/nvrun | 3 +-- sbin/snail-watcher.sh | 19 +++++++++++++++---- share/init.d/snail-xserver.systemd | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/bin/nvrun b/bin/nvrun index b4e5bce..157ab8e 100755 --- a/bin/nvrun +++ b/bin/nvrun @@ -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" diff --git a/sbin/snail-watcher.sh b/sbin/snail-watcher.sh index 7a21eb1..bfb3abb 100755 --- a/sbin/snail-watcher.sh +++ b/sbin/snail-watcher.sh @@ -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 diff --git a/share/init.d/snail-xserver.systemd b/share/init.d/snail-xserver.systemd index 98bea51..217e9e6 100644 --- a/share/init.d/snail-xserver.systemd +++ b/share/init.d/snail-xserver.systemd @@ -3,6 +3,6 @@ Description=Daemon to auto start/stop power up/down nVidia graphics. After=syslog.target [Service] -ExecStart=/bin/bash -c '(/usr/sbin/snail.nv_pwr_on && nohup /usr/bin/X -ac -config /etc/X11/xorg.conf.nvidia -sharevts -modulepath /usr/lib/snail -nolisten tcp -noreset :1 vt9 &>/dev/null)&' +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