1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
#!/bin/sh
# ***************************************************************************
# * Copyright (C) 2007-2008 by Heinz Wiesinger *
# * HMWiesinger@gmx.at *
# * http://hw.3kisses.net *
# * *
# * This program is free software; you can redistribute it and/or modify *
# * it under the terms of the GNU General Public License as published by *
# * the Free Software Foundation; either version 3 of the License, or *
# * (at your option) any later version. *
# * *
# * This program is distributed in the hope that it will be useful, *
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# * GNU General Public License for more details. *
# * *
# * You should have received a copy of the GNU General Public License *
# * along with this program; if not, write to the *
# * Free Software Foundation, Inc., *
# * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
# ***************************************************************************/
# nvidia-switch utility 0.5
#
# A tool to switch between nvidia-binary-driver and stock xorg-driver
# if both are installed in parallel.
set -e
INC="/usr/include/GL"
LIB="/usr/lib"
XMOD="/usr/lib/xorg/modules"
XLIB="$XMOD/extensions"
NV_VERSION='PKGVERSION' # This will be replaced in the build script
GL_VERSION="1.2"
if [ "$1" = '--nvidia' ]; then
echo $'Switching to nvidia-driver files!\n'
echo "You have to ENABLE the nvidia driver in /etc/X11/xorg.conf."
echo "Otherwise, this may lead to improperly working drivers."
#Change to includes path
cd $INC
#if gl*.h exists and is a link, then remove the old link and create the new one
#else, if it exists and is not a link, move it to gl*.h-xorg and create a link.
#else, it it does not exist, create a link to gl*.h-nvidia
for i in glxext.h glext.h glx.h gl.h; do
if [ -L $i ]; then
rm -f $i
ln -s $i-nvidia $i
elif [ -e $i ]; then
mv $i $i-xorg
ln -s $i-nvidia $i
else
ln -s $i-nvidia $i
fi
done
for i in $LIB/libGL.so $XLIB/libglx.so; do
#If libGL.so.$NV_VERSION-nvidia does exists, then remove the -nvidia and make it usable that way
if [ -e "$i.$NV_VERSION-nvidia" ]; then
rm -f $i.$NV_VERSION
ln -s $i.$NV_VERSION-nvidia $i.$NV_VERSION
fi
done
#if libGL.so.$GL_VERSION does exist, move it to libGL.so.$GL_VERSION-xorg, as it conflicts if nvidia's libGL.so
# then remove the libGL.so.1 symlink and create a new one pointing to nvidia's libGL.so
if [ -e "$LIB/libGL.so.$GL_VERSION" ]; then
cd $LIB
mv libGL.so.$GL_VERSION libGL.so.$GL_VERSION-xorg
rm -f libGL.so.1
ln -s $LIB/libGL.so.$NV_VERSION libGL.so.1
fi
#If libGLcore.so.$NV_VERSION-nvidia does exists, then remove the -nvidia and make it usable that way
if [ -e "$LIB/libGLcore.so.$NV_VERSION-nvidia" ]; then
rm -f $LIB/libGLcore.so.$NV_VERSION $LIB/libGLcore.so.1
ln -s $LIB/libGLcore.so.$NV_VERSION-nvidia $LIB/libGLcore.so.$NV_VERSION
ln -s $LIB/libGLcore.so.$NV_VERSION $LIB/libGLcore.so.1
fi
for i in libGLcore.so libGLcore.la libglx.la; do
#If this library exists, move it to *-xorg
if [ -e "$XLIB/$i" ]; then
mv $XLIB/$i $XLIB/$i-xorg
fi
done
# if libglx.so is not a link, back it up to *-xorg, and create a symlink to nvidia's one
# if it's a link, then remove it and create a new one.
if ! [ -L "$XLIB/libglx.so" ]; then
cd $XLIB
mv libglx.so libglx.so-xorg
ln -s $XLIB/libglx.so.$NV_VERSION libglx.so
else
cd $XLIB
rm -f libglx.so
ln -s $XLIB/libglx.so.$NV_VERSION libglx.so
fi
#Recreate the link removed by --xorg
if ! [ -e "$XMOD/libwfb.so" ]; then
ln -s $XMOD/libnvidia-wfb.so.1 $XMOD/libwfb.so
fi
/sbin/ldconfig
#Generate correct symink for that lib
/sbin/ldconfig -l /usr/lib/libGL.so.169.09-nvidia
elif [ "$1" = '--xorg' ]; then
echo $'Switching to stock xorg files.\n'
echo "You have to DISABLE the nvidia driver in /etc/X11/xorg.conf."
echo "Otherwise, this may lead to improperly working drivers."
#Change to includes path
cd $INC
#if gl*.h exists and is a link, then remove the old link and create the new one
#else, if it exists and is not a link, move it to gl*.h-xorg and create a link.
#else, it it does not exist, create a link to gl*.h-xorg
for i in glxext.h glext.h glx.h gl.h; do
if [ -L $i ]; then
rm -f $i
ln -s $i-xorg $i
elif [ -e $i ]; then
mv $i $i-xorg
ln -s $i-xorg $i
else
ln -s $i-xorg $i
fi
done
for i in libGL.so libGLcore.so; do
#if this link exists, remove it, if it's a file, move it to *.nvidia
if [ -L "$LIB/$i.$NV_VERSION" ]; then
rm -f $LIB/$i.$NV_VERSION
elif [ -e "$LIB/$i.$NV_VERSION" ]; then
mv $LIB/$i.$NV_VERSION $LIB/$i.$NV_VERSION-nvidia
fi
if [ -L "$LIB/$i.1" ]; then
rm -f $LIB/$i.1
fi
done
#if libGL.so.$GL_VERSION does not exist and libGL.so.$GL_VERSION-xorg does, move it to libGL.so.$GL_VERSION
# then remove the libGL.so.1 symlink and create a new one pointing to nvidia's libGL.so
if ! [ -e "$LIB/libGL.so.$GL_VERSION" ]; then
if [ -e "$LIB/libGL.so.$GL_VERSION-xorg" ]; then
cd $LIB
mv $LIB/libGL.so.$GL_VERSION-xorg $LIB/libGL.so.$GL_VERSION
ln -s $LIB/libGL.so.$GL_VERSION libGL.so.1
fi
fi
for i in libGLcore.so libGLcore.la libglx.la; do
#If libGLcore.so does not exist, and *-xorg does, then remove the -xorg
if ! [ -e "$XLIB/$i" ]; then
if [ -e "$XLIB/$i-xorg" ]; then
mv $XLIB/$i-xorg $XLIB/$i
fi
fi
done
#if this library exists, move it to *-nvidia
if [ -L "$XLIB/libglx.so.$NV_VERSION" ]; then
rm $XLIB/libglx.so.$NV_VERSION
elif [ -e "$XLIB/libglx.so.$NV_VERSION" ]; then
mv $XLIB/libglx.so.$NV_VERSION $XLIB/libglx.so.$NV_VERSION-nvidia
fi
# if libglx.so exists and is a link, remove it and create a new one
# If it does exists and is not a link, remove the old one, and create the new one.
# if it does not exist, create a symlink
if [ -L "$XLIB/libglx.so" ]; then
cd $XLIB
rm libglx.so
ln -s libglx.so-xorg libglx.so
elif [ -e "$XLIB/libglx.so" ]; then
cd $XLIB
mv libglx.so libglx.so-xorg
ln -s libglx.so-xorg libglx.so
else
cd $XLIB
ln -s libglx.so-xorg libglx.so
fi
# Not handled by removepkg/upgradepkg automatically.
if [ -L "$XMOD/libwfb.so" ]; then
rm -f $XMOD/libwfb.so
fi
/sbin/ldconfig
#Generate correct symink for that lib
/sbin/ldconfig -l /usr/lib/libGL.so.1.2
#Remove so-link, recreated by ldconfig
if [ -L $LIB/libGLcore.so.1 ]; then
rm -f $LIB/libGLcore.so.1
fi
else
echo "Usage:"
echo " --nvidia Switch to nvidia driver files"
echo " --xorg Switch to stock xorg files"
fi
|