Skip to content

Commit 0fef54c

Browse files
Add a script to run executables outside AppImage
Some programs crash due to environment variables override Fix #11
1 parent e166060 commit 0fef54c

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

linuxdeploy-plugin-gtk.sh

+52
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ APPIMAGE_GTK_THEME="${APPIMAGE_GTK_THEME:-"Adwaita:$GTK_THEME_VARIANT"}" # Allow
117117
CACHEDIR="$(mktemp --tmpdir --directory .AppRun.XXXXXXXX)"
118118
119119
export APPDIR="${APPDIR:-"$(dirname "$(realpath "$0")")"}" # Workaround to run extracted AppImage
120+
export OLDPATH="$PATH"
121+
export PATH="$APPDIR/usr/bin:$PATH"
122+
120123
export GTK_DATA_PREFIX="$APPDIR"
121124
export GTK_THEME="$APPIMAGE_GTK_THEME" # Custom themes are broken
122125
export GDK_BACKEND=x11 # Crash with Wayland backend on Wayland
@@ -212,3 +215,52 @@ for directory in "${PATCH_ARRAY[@]}"; do
212215
patchelf --set-rpath '$ORIGIN/../../../..' "$APPDIR/$file"
213216
done < <(find "$directory" -name '*.so' -print0)
214217
done
218+
219+
echo "Add a wrapper for some binaries"
220+
# Note: some files on system must not be started with overrides above
221+
# See https://github.com/linuxdeploy/linuxdeploy-plugin-gtk/issues/11#issuecomment-761788064
222+
BINDIR="$APPDIR/usr/bin"
223+
EOAFILE="$BINDIR/exec-outside-appimage"
224+
mkdir -p "$BINDIR"
225+
cat > "$EOAFILE" <<\EOF
226+
#! /bin/bash
227+
228+
export PATH="$OLDPATH"
229+
230+
unset OLDPATH
231+
unset GTK_DATA_PREFIX
232+
unset GTK_THEME
233+
unset GDK_BACKEND
234+
unset XDG_DATA_DIRS
235+
unset GSETTINGS_SCHEMA_DIR
236+
unset GTK_EXE_PREFIX
237+
unset GTK_PATH
238+
unset GTK_IM_MODULE_DIR
239+
unset GTK_IM_MODULE_FILE
240+
unset GDK_PIXBUF_MODULEDIR
241+
unset GDK_PIXBUF_MODULE_FILE
242+
243+
# Enter 'if' when '$0' is 'exec-outside-appimage' script itself
244+
# Symbolic links to 'exec-outside-appimage' should not enter in 'if'
245+
app="$(basename "$0")"
246+
if ! command -v "$app" &> /dev/null; then
247+
app="$1"
248+
shift
249+
if [ -z "$app" ]; then
250+
echo "$0: this script requires a command as argument"
251+
exit 1
252+
elif ! command -v "$app" &> /dev/null; then
253+
echo "'$app' not found in PATH ($PATH)"
254+
exit 1
255+
fi
256+
fi
257+
"$app" "$@"
258+
EOF
259+
chmod $verbose 755 "$EOAFILE"
260+
EOA_ARRAY=(
261+
"xdg-open"
262+
"eog"
263+
)
264+
for file in "${EOA_ARRAY[@]}"; do
265+
ln $verbose -s "$(basename "$EOAFILE")" "$BINDIR/$file"
266+
done

0 commit comments

Comments
 (0)