diff --git a/indra/newview/linux_tools/refresh_desktop_app_entry.sh b/indra/newview/linux_tools/refresh_desktop_app_entry.sh
index c65b58d4c9e7d4ba3297040889935eb677f6ba50..b1a56055bf1ce6f08f8733ef4685b0d6803b49a0 100755
--- a/indra/newview/linux_tools/refresh_desktop_app_entry.sh
+++ b/indra/newview/linux_tools/refresh_desktop_app_entry.sh
@@ -1,5 +1,7 @@
 #!/bin/bash
 
+VIEWERNAME="Alchemy" #Store the viewer's name as a variable, for portability. This should be correctly capitalized.
+
 SCRIPTSRC="$(readlink -f "$0" || echo "$0")"
 RUN_PATH="$(dirname "${SCRIPTSRC}" || echo .)"
 
@@ -8,24 +10,45 @@ install_prefix="${RUN_PATH}"/..
 function install_desktop_entry()
 {
 	local installation_prefix="${1}"
-	local desktop_entries_dir="${2}"
-
-	local desktop_entry="\
-[Desktop Entry]\n\
-Name=Alchemy\n\
-Comment=Client for the On-line Virtual World, Second Life\n\
-Exec=${installation_prefix}/alchemy\n\
-Icon=${installation_prefix}/alchemy_icon.png\n\
-Terminal=false\n\
-Type=Application\n\
-Categories=Game;Simulation;\n\
-StartupNotify=true\n\
-StartupWMClass=Alchemy\n\
-X-Desktop-File-Install-Version=3.0"
-
-	echo " - Installing menu entries in ${desktop_entries_dir}"
-	mkdir -vp "${desktop_entries_dir}"
-	echo -e "${desktop_entry}" > "${desktop_entries_dir}/alchemy-viewer.desktop" || "Failed to install application menu!"
+
+	desktoppath="${installation_prefix}/${VIEWERNAME,,}-viewer.desktop"
+	cat >"${desktoppath}" <<desktopfile || print "Warning: Could not write $desktoppath"s
+[Desktop Entry]
+Version=1.4
+Name=${VIEWERNAME}
+GenericName=Second Life Viewer
+Comment=Client for the Online Virtual World, Second Life
+Exec=${installation_prefix}/${VIEWERNAME,,}
+Icon=${VIEWERNAME}-Viewer
+Terminal=false
+Type=Application
+Categories=Game;Simulation;
+StartupNotify=true
+StartupWMClass=${VIEWERNAME}
+PrefersNonDefaultGPU=true
+Actions=DefaultGPU;AssociateMIME;
+
+[Desktop Action DefaultGPU]
+Exec=${installation_prefix}/${VIEWERNAME}
+Name=Launch on default GPU
+Comment=Launch the viewer using the system's integrated GPU, instead of the dedicated one. (if available)
+PrefersNonDefaultGPU=false
+
+[Desktop Action AssociateMIME]
+Exec=${installation_prefix}/etc/register_secondlifeprotocol.sh
+Name=Associate SLURLs
+Comment=Set this viewer as the default handler for secondlife:// links.
+Terminal=true
+desktopfile
+
+#The "PrefersNonDefaultGPU" line should automatically run the viewer on the most powerful GPU in the system, if it is not default. If it is, this is ignored.
+
+# NOTE: DO NOT CHANGE THE "GenericName" FIELD - ONLY CHANGE THE "Name" FIELD. (This is to ensure that searching "Second Life" will show all the viewers installed in a user's system, regardless of their canonical name.)
+
+	echo " - Installing menu entries via XDG..."
+	xdg-icon-resource install --novendor "${install_prefix}/${VIEWERNAME,,}_icon.png" ${VIEWERNAME}-Viewer
+	#NOTE: Above command takes the path to the icon to install && The name of the icon to be used by XDG. This should always be in the format of "x-Viewer" to avoid potential naming conflicts, as per XDG spec.
+	xdg-desktop-menu install --novendor ./alchemy-viewer.desktop
 }
 
 if [ "$UID" == "0" ]; then