3
3
# purge-nvda.sh
4
4
# Author(s): Mayank Kumar (mayankk2308, github.com / mac_editor, egpu.io)
5
5
# License: Specified in LICENSE.md.
6
- # Version: 3.0.3
7
-
8
- # Re-written for scalability and better user interaction.
6
+ # Version: 3.0.4
9
7
10
8
# ----- COMMAND LINE ARGS
11
9
@@ -28,7 +26,7 @@ BIN_CALL=0
28
26
SCRIPT_FILE=" "
29
27
30
28
# Script version
31
- SCRIPT_MAJOR_VER=" 3" && SCRIPT_MINOR_VER=" 0" && SCRIPT_PATCH_VER=" 3 "
29
+ SCRIPT_MAJOR_VER=" 3" && SCRIPT_MINOR_VER=" 0" && SCRIPT_PATCH_VER=" 4 "
32
30
SCRIPT_VER=" ${SCRIPT_MAJOR_VER} .${SCRIPT_MINOR_VER} .${SCRIPT_PATCH_VER} "
33
31
34
32
# User input
@@ -58,11 +56,13 @@ NVDA_STARTUP_WEB_PLIST="${TP_EXT}NVDAStartupWeb.kext${PLIST_FILE}"
58
56
NV_GUID=" FA4CE28D-B62F-4C99-9CC3-6815686E30F9"
59
57
IG_POWER_PREF=" %01%00%00%00"
60
58
DG_POWER_PREF=" %00%00%00%00"
59
+ PN_STATE=" purge-nvda-last-gfx-config"
61
60
62
61
# Patch status
63
62
AMD_PATCH_STATUS=0
64
63
NVDA_OPT_PATCH_STATUS=0
65
64
NVDA_SUP_PATCH_STATUS=0
65
+ PN_LAST_GFX_CONFIG=1
66
66
PLIST_PATCHED=0
67
67
68
68
# PlistBuddy Configuration
@@ -151,18 +151,23 @@ check_macos_version() {
151
151
# Check patch status
152
152
check_patch () {
153
153
BOOT_ARGS_DATA=" $( nvram boot-args 2> /dev/null) "
154
+ PN_LAST_CONFIG_DATA=" $( nvram " ${PN_STATE} " 2> /dev/null) "
154
155
[[ " ${BOOT_ARGS_DATA} " =~ " nv_disable=1" ]] && AMD_PATCH_STATUS=1
155
156
[[ " ${BOOT_ARGS_DATA} " =~ " agc=-1" ]] && NVDA_SUP_PATCH_STATUS=1
156
157
[[ -f " ${NVDA_STARTUP_WEB_PLIST} " && " $( $PlistBuddy -c " Print ${NV_DRV_KEY} " " ${NVDA_STARTUP_WEB_PLIST} " 2> /dev/null) " == " ${MODERN_NV_GPU_DEVICE_IDS} " ]] && NVDA_OPT_PATCH_STATUS=1
158
+ [[ " ${PN_LAST_CONFIG_DATA} " =~ " ${IG_POWER_PREF} " ]] && PN_LAST_GFX_CONFIG=0
157
159
}
158
160
159
161
# Print patch status
160
162
check_system_status () {
161
163
FIX_STATES=(" Disabled" " Enabled" )
164
+ GFX_STATES=(" Integrated" " Discrete" )
162
165
echo -e " \n>> ${BOLD} System Status${NORMAL} \n"
163
- echo -e " ${BOLD} AMD Fix${NORMAL} : ${FIX_STATES[$AMD_PATCH_STATUS]} "
164
- echo -e " ${BOLD} NVDA eGPU Optimization${NORMAL} : ${FIX_STATES[$NVDA_OPT_PATCH_STATUS]} "
165
- echo -e " ${BOLD} NVDA Suppression${NORMAL} : ${FIX_STATES[$NVDA_SUP_PATCH_STATUS]} \n"
166
+ echo -e " ${BOLD} AMD Fix${NORMAL} ${FIX_STATES[${AMD_PATCH_STATUS}]} "
167
+ echo -e " ${BOLD} NVDA eGPU Optimization${NORMAL} ${FIX_STATES[${NVDA_OPT_PATCH_STATUS}]} "
168
+ echo -e " ${BOLD} NVDA Suppression${NORMAL} ${FIX_STATES[${NVDA_SUP_PATCH_STATUS}]} "
169
+ echo -e " ${BOLD} Mux Last Intent${NORMAL} ${GFX_STATES[${PN_LAST_GFX_CONFIG}]} \n"
170
+ echo -e " The ${BOLD} Mux Last Intent${NORMAL} state refers to what the script intended last\ntime, and not necessarily whether the script succeeded or not,\nas the actual mux value is \" consumed\" and cannot be tracked.\nBy default, the intent is ${BOLD} Discrete${NORMAL} .\n"
166
171
}
167
172
168
173
# Cumulative system check
@@ -185,6 +190,7 @@ sanitize_system() {
185
190
echo -e " System sanitized."
186
191
}
187
192
193
+ # Patch NVIDIA drivers
188
194
patch_nv_plists () {
189
195
echo -e " ${BOLD} Patching NVIDIA driver configuration...${NORMAL} "
190
196
[[ ! -f " ${NVDA_STARTUP_WEB_PLIST} " ]] && echo -e " ${BOLD} NVIDIA Web Drivers${NORMAL} must already be installed.\n" && return
@@ -205,13 +211,22 @@ update_nvram() {
205
211
[[ " ${BOOT_ARG} " != " -no-set" ]] && nvram boot-args=" ${BOOT_ARG} "
206
212
nvram " ${NV_GUID} :gpu-power-prefs" =" ${POWER_PREFS} "
207
213
nvram " ${NV_GUID} :gpu-active" =" ${POWER_PREFS} "
214
+ nvram " ${PN_STATE} " =" ${POWER_PREFS} "
208
215
nvram -s
209
- sleep 1
216
+ sleep 5
210
217
echo -e " NVRAM configured."
211
218
}
212
219
220
+ # Patch execution routine
221
+ execute_patch () {
222
+ update_nvram " ${1} " " ${2} "
223
+ echo -e " \n${BOLD} System ready.${NORMAL} Reboot to apply changes.\n"
224
+ prompt_reboot
225
+ }
226
+
213
227
# ----- RECOVERY SYSTEM
214
228
229
+ # Revert PLIST configuration
215
230
revert_nv_plists () {
216
231
echo -e " ${BOLD} Reverting NVIDIA driver configuration...${NORMAL} "
217
232
$PlistBuddy -c " Set ${NV_DRV_KEY} ${ORIGINAL_PCI_MATCH_VALUE} " " ${NVDA_STARTUP_OFFICIAL_PLIST} " 1> /dev/null 2>&1
@@ -221,6 +236,7 @@ revert_nv_plists() {
221
236
sanitize_system
222
237
}
223
238
239
+ # Uninstall NVRAM changes
224
240
uninstall () {
225
241
echo -e " \n${BOLD} >> Uninstall${NORMAL} \n"
226
242
echo -e " ${BOLD} Uninstalling...${NORMAL} "
@@ -257,6 +273,22 @@ first_time_setup() {
257
273
258
274
# ----- USER INTERFACE
259
275
276
+ # Prompt reboot
277
+ prompt_reboot () {
278
+ read -n1 -p " ${BOLD} Reboot now${NORMAL} ? [Y/N]: " INPUT
279
+ if [[ " ${INPUT} " == " Y" ]]
280
+ then
281
+ echo -e " \n\n${BOLD} Rebooting...${NORMAL} "
282
+ reboot 1> /dev/null 2>&1
283
+ elif [[ " ${INPUT} " == " N" ]]
284
+ then
285
+ echo -e " \n\nReboot aborted.\n"
286
+ else
287
+ echo -e " \n\nInvalid selection.\n"
288
+ prompt_reboot
289
+ fi
290
+ }
291
+
260
292
# Request donation
261
293
donate () {
262
294
open
" https://www.paypal.com/cgi-bin/webscr?cmd=_donations&[email protected] &lc=US&item_name=Development%20of%20PurgeNVDA&no_note=0¤cy_code=USD&bn=PP-DonationsBF:btn_donate_SM.gif:NonHostedGuest"
@@ -300,26 +332,23 @@ process_args() {
300
332
case " ${1} " in
301
333
-fa|--fix-amd|1)
302
334
echo -e " \n>> ${BOLD} AMD eGPUs${NORMAL} \n"
303
- update_nvram " nv_disable=1" " ${IG_POWER_PREF} "
304
- echo -e " \n${BOLD} System ready.${NORMAL} Reboot to apply changes.\n" ;;
335
+ execute_patch " nv_disable=1" " ${IG_POWER_PREF} " ;;
305
336
-on|--optimize-nv|2)
306
337
echo -e " \n>> ${BOLD} NVIDIA eGPUs${NORMAL} \n"
307
338
patch_nv_plists
308
339
[[ $PLIST_PATCHED == 0 ]] && ask_menu && return
309
- update_nvram " " " ${IG_POWER_PREF} "
310
- echo -e " \n${BOLD} System ready.${NORMAL} Reboot to apply changes.\n" ;;
340
+ execute_patch " " " ${IG_POWER_PREF} " ;;
311
341
-u|--uninstall|3)
312
- uninstall;;
342
+ uninstall
343
+ prompt_reboot;;
313
344
-s|--status|4)
314
345
check_system_status;;
315
346
-sn|--suppress-nv|5)
316
347
echo -e " \n>> ${BOLD} Suppress NVIDIA GPUs${NORMAL} \n"
317
- update_nvram " agc=-1" " ${IG_POWER_PREF} "
318
- echo -e " \n${BOLD} System ready.${NORMAL} Reboot to apply changes.\n" ;;
348
+ execute_patch " agc=-1" " ${IG_POWER_PREF} " ;;
319
349
-mi|--mux-igpu|6)
320
350
echo -e " \n>> ${BOLD} Set Mux to iGPU${NORMAL} \n"
321
- update_nvram " -no-set" " ${IG_POWER_PREF} "
322
- echo -e " \n${BOLD} System ready.${NORMAL} Reboot to apply changes.\n" ;;
351
+ execute_patch " -no-set" " ${IG_POWER_PREF} " ;;
323
352
-d|--donate|d|D)
324
353
donate;;
325
354
0)
0 commit comments