diff --git a/.github/workflows/rolling-release.yml b/.github/workflows/rolling-release.yml
index 100a74ed2..0c3ee594b 100644
--- a/.github/workflows/rolling-release.yml
+++ b/.github/workflows/rolling-release.yml
@@ -267,7 +267,7 @@ jobs:
         cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH=$HOME/deps -DCMAKE_TOOLCHAIN_FILE=../scripts/clang-toolchain.cmake ..
         cmake --build . --parallel
         cd ..
-        scripts/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps DuckStation-x64
+        scripts/appimage/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps DuckStation-x64
 
     - name: Upload Qt AppImage
       uses: actions/upload-artifact@v1
diff --git a/scripts/appimage/apprun-hooks/default-to-x11.sh b/scripts/appimage/apprun-hooks/default-to-x11.sh
new file mode 100644
index 000000000..fa0dafe90
--- /dev/null
+++ b/scripts/appimage/apprun-hooks/default-to-x11.sh
@@ -0,0 +1,9 @@
+if [[ -z "$I_WANT_A_BROKEN_WAYLAND_UI" ]]; then
+	echo "Forcing X11 instead of Wayland, due to various protocol limitations"
+        echo "and Qt issues. If you want to use Wayland, launch DuckStation with"
+	echo "I_WANT_A_BROKEN_WAYLAND_UI=YES set."
+	export QT_QPA_PLATFORM=xcb
+else
+	echo "Wayland is not being disabled. Do not complain when things break."
+fi
+
diff --git a/scripts/make-appimage.sh b/scripts/appimage/make-appimage.sh
similarity index 93%
rename from scripts/make-appimage.sh
rename to scripts/appimage/make-appimage.sh
index 23ff6bcca..c0cde7429 100755
--- a/scripts/make-appimage.sh
+++ b/scripts/appimage/make-appimage.sh
@@ -88,7 +88,6 @@ if [ ! -f "$APPIMAGETOOL" ]; then
 fi
 
 OUTDIR=$(realpath "./$APPDIRNAME")
-SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}")
 rm -fr "$OUTDIR"
 
 # Why the nastyness? linuxdeploy strips our main binary, and there's no option to turn it off.
@@ -159,7 +158,16 @@ cp -a "$BUILDDIR/bin/translations" "$OUTDIR/usr/bin"
 # Generate AppStream meta-info.
 echo "Generating AppStream metainfo..."
 mkdir -p "$OUTDIR/usr/share/metainfo"
-"$SCRIPTDIR/generate-metainfo.sh" "$OUTDIR/usr/share/metainfo"
+"$SCRIPTDIR/../generate-metainfo.sh" "$OUTDIR/usr/share/metainfo"
+
+# Copy in AppRun hooks.
+echo "Copying AppRun hooks..."
+mkdir -p "$OUTDIR/apprun-hooks"
+for hookpath in "$SCRIPTDIR/apprun-hooks"/*; do
+	hookname=$(basename "$hookpath")
+	cp -v "$hookpath" "$OUTDIR/apprun-hooks/$hookname"
+	sed -i -e 's/exec /source "$this_dir"\/apprun-hooks\/"'"$hookname"'"\nexec /' "$OUTDIR/AppRun"
+done
 
 echo "Generating AppImage..."
 rm -f "$NAME.AppImage"