diff --git a/build/filters.js b/build/filters.js index c1152e8eb9142..376a77ac64a8b 100644 --- a/build/filters.js +++ b/build/filters.js @@ -44,7 +44,6 @@ module.exports.indentationFilter = [ '!src/vs/base/node/cpuUsage.sh', '!test/unit/assert.js', '!resources/linux/snap/electron-launch', - '!resources/linux/snap/hooks/configure', '!build/ext.js', // except specific folders diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js index d16ee9351bf48..3423e86e8f3e5 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -241,10 +241,7 @@ function prepareSnapPackage(arch) { const electronLaunch = gulp.src('resources/linux/snap/electron-launch', { base: '.' }) .pipe(rename('electron-launch')); - const hooks = gulp.src('resources/linux/snap/hooks/configure', { base: '.' }) - .pipe(rename('snap/hooks/configure')); - - const all = es.merge(desktops, icon, code, snapcraft, electronLaunch, hooks); + const all = es.merge(desktops, icon, code, snapcraft, electronLaunch); return all.pipe(vfs.dest(destination)); }; diff --git a/resources/linux/snap/electron-launch b/resources/linux/snap/electron-launch index 6e00bb1fc4a90..f4f88725de387 100755 --- a/resources/linux/snap/electron-launch +++ b/resources/linux/snap/electron-launch @@ -45,39 +45,12 @@ else ARCH="$SNAP_ARCH-linux-gnu" fi -source "$SNAP_USER_DATA/.last_revision" 2>/dev/null || true -if [ "$SNAP_DESKTOP_LAST_REVISION" = "$SNAP_REVISION" ]; then - needs_update=false -else - needs_update=true - echo "SNAP_DESKTOP_LAST_REVISION=$SNAP_REVISION" > "$SNAP_USER_DATA/.last_revision" -fi - -# Set $REALHOME to the users real home directory -REALHOME=$(getent passwd $UID | cut -d ':' -f 6) - -# Set config folder to local path -export XDG_CONFIG_HOME="$SNAP_USER_DATA/.config" -ensure_dir_exists "$XDG_CONFIG_HOME" -chmod 700 "$XDG_CONFIG_HOME" - append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/lib/$ARCH" append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH" append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib" append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/lib" append_dir PATH "$SNAP_DESKTOP_RUNTIME/usr/bin" -# XKB config -export XKB_CONFIG_ROOT="$SNAP_DESKTOP_RUNTIME/usr/share/X11/xkb" - -# Give XOpenIM a chance to locate locale data. -# This is required for text input to work in SDL2 games. -export XLOCALEDIR="$SNAP_DESKTOP_RUNTIME/usr/share/X11/locale" - -# Set XCursors path -export XCURSOR_PATH="$SNAP_DESKTOP_RUNTIME/usr/share/icons" -prepend_dir XCURSOR_PATH "$SNAP/data-dir/icons" - # Mesa Libs for OpenGL support append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/mesa" append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/mesa-egl" @@ -123,166 +96,22 @@ prepend_dir XDG_DATA_DIRS "$SNAP/share" prepend_dir XDG_DATA_DIRS "$SNAP/data-dir" prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA" -# Set XDG_DATA_HOME to local path -export XDG_DATA_HOME="$SNAP_USER_DATA/.local/share" -ensure_dir_exists "$XDG_DATA_HOME" - -# Workaround for GLib < 2.53.2 not searching for schemas in $XDG_DATA_HOME: -# https://bugzilla.gnome.org/show_bug.cgi?id=741335 -prepend_dir XDG_DATA_DIRS "$XDG_DATA_HOME" - # Set cache folder to local path -export XDG_CACHE_HOME="$SNAP_USER_COMMON/.cache" -if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$XDG_CACHE_HOME" ]]; then +GDK_CACHE_DIR="$SNAP_USER_COMMON/.cache" +if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$GDK_CACHE_DIR" ]]; then # the .cache directory used to be stored under $SNAP_USER_DATA, migrate it mv "$SNAP_USER_DATA/.cache" "$SNAP_USER_COMMON/" fi -ensure_dir_exists "$XDG_CACHE_HOME" - -# Ensure the app finds locale definitions (requires locales-all to be installed) -append_dir LOCPATH "$SNAP_DESKTOP_RUNTIME/usr/lib/locale" - -# Keep an array of data dirs, for looping through them -IFS=':' read -r -a data_dirs_array <<< "$XDG_DATA_DIRS" - -# Setup compiled gsettings schema -GS_SCHEMA_DIR="$XDG_DATA_HOME/glib-2.0/schemas" -function compile_schemas { - if [ -f "$1" ]; then - rm -rf "$GS_SCHEMA_DIR" - ensure_dir_exists "$GS_SCHEMA_DIR" - for ((i = 0; i < ${#data_dirs_array[@]}; i++)); do - schema_dir="${data_dirs_array[$i]}/glib-2.0/schemas" - if [ -f "$schema_dir/gschemas.compiled" ]; then - # This directory already has compiled schemas - continue - fi - if [ -n "$(ls -A "$schema_dir"/*.xml 2>/dev/null)" ]; then - ln -s "$schema_dir"/*.xml "$GS_SCHEMA_DIR" - fi - if [ -n "$(ls -A "$schema_dir"/*.override 2>/dev/null)" ]; then - ln -s "$schema_dir"/*.override "$GS_SCHEMA_DIR" - fi - done - # Only compile schemas if we copied anything - if [ -n "$(ls -A "$GS_SCHEMA_DIR"/*.xml "$GS_SCHEMA_DIR"/*.override 2>/dev/null)" ]; then - "$1" "$GS_SCHEMA_DIR" - fi - fi -} -if [ "$needs_update" = true ]; then - compile_schemas "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/glib-2.0/glib-compile-schemas" -fi +ensure_dir_exists "$GDK_CACHE_DIR" # Gdk-pixbuf loaders -export GDK_PIXBUF_MODULE_FILE="$XDG_CACHE_HOME/gdk-pixbuf-loaders.cache" +export GDK_PIXBUF_MODULE_FILE="$GDK_CACHE_DIR/gdk-pixbuf-loaders.cache" export GDK_PIXBUF_MODULEDIR="$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/gdk-pixbuf-2.0/2.10.0/loaders" if [ -f "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" ]; then "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders" > "$GDK_PIXBUF_MODULE_FILE" fi -# Font Config and themes -export FONTCONFIG_PATH="$SNAP_DESKTOP_RUNTIME/etc/fonts" -export FONTCONFIG_FILE="$SNAP_DESKTOP_RUNTIME/etc/fonts/fonts.conf" - -function make_user_fontconfig { - echo "" - if [ -d "$REALHOME/.local/share/fonts" ]; then - echo " $REALHOME/.local/share/fonts" - fi - if [ -d "$REALHOME/.fonts" ]; then - echo " $REALHOME/.fonts" - fi - for ((i = 0; i < ${#data_dirs_array[@]}; i++)); do - if [ -d "${data_dirs_array[$i]}/fonts" ]; then - echo " ${data_dirs_array[$i]}/fonts" - fi - done - # We need to include a user-writable cachedir first to support - # caching of per-user fonts. - echo ' fontconfig' - echo " $SNAP_COMMON/fontconfig" - echo "" -} - -if [ "$needs_update" = true ]; then - rm -rf "$XDG_DATA_HOME"/{fontconfig,fonts,fonts-*,themes,.themes} - - # This fontconfig fragment is installed in a location that is - # included by the system fontconfig configuration: namely the - # etc/fonts/conf.d/50-user.conf file. - ensure_dir_exists "$XDG_CONFIG_HOME/fontconfig" - make_user_fontconfig > "$XDG_CONFIG_HOME/fontconfig/fonts.conf" - - # the themes symlink are needed for GTK 3.18 when the prefix isn't changed - # GTK 3.20 looks into XDG_DATA_DIRS which has connected themes. - if [ -d "$SNAP/data-dir/themes" ]; then - ln -sf "$SNAP/data-dir/themes" "$XDG_DATA_HOME" - ln -sfn "$SNAP/data-dir/themes" "$SNAP_USER_DATA/.themes" - elif [ -d "$SNAP_DESKTOP_RUNTIME/usr/share/themes" ]; then - ln -sf "$SNAP_DESKTOP_RUNTIME/usr/share/themes" "$XDG_DATA_HOME" - ln -sfn "$SNAP_DESKTOP_RUNTIME/usr/share/themes" "$SNAP_USER_DATA/.themes" - fi -fi - -# Build mime.cache -# needed for gtk and qt icon -if [ "$needs_update" = true ]; then - rm -rf "$XDG_DATA_HOME/mime" - if [ ! -f "$SNAP_DESKTOP_RUNTIME/usr/share/mime/mime.cache" ]; then - if command -v update-mime-database >/dev/null; then - cp --preserve=timestamps -dR "$SNAP_DESKTOP_RUNTIME/usr/share/mime" "$XDG_DATA_HOME" - update-mime-database "$XDG_DATA_HOME/mime" - fi - fi -fi - -# Gio modules and cache (including gsettings module) -export GIO_MODULE_DIR="$XDG_CACHE_HOME/gio-modules" -function compile_giomodules { - if [ -f "$1/glib-2.0/gio-querymodules" ]; then - rm -rf "$GIO_MODULE_DIR" - ensure_dir_exists "$GIO_MODULE_DIR" - ln -s "$1"/gio/modules/*.so "$GIO_MODULE_DIR" - "$1/glib-2.0/gio-querymodules" "$GIO_MODULE_DIR" - fi -} -if [ "$needs_update" = true ]; then - compile_giomodules "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH" -fi - - # Create $XDG_RUNTIME_DIR if not exists (to be removed when https://pad.lv/1656340 is fixed) [ -n "$XDG_RUNTIME_DIR" ] && mkdir -p "$XDG_RUNTIME_DIR" -m 700 -# create symbolic link to ibus socket path for ibus to look up its socket files -# (see comments #3 and #6 on https://launchpad.net/bugs/1580463) -IBUS_CONFIG_PATH="$XDG_CONFIG_HOME/ibus" -ensure_dir_exists "$IBUS_CONFIG_PATH" -[ -d "$IBUS_CONFIG_PATH/bus" ] && rm -rf "$IBUS_CONFIG_PATH/bus" -ln -sfn "$REALHOME/.config/ibus/bus" "$IBUS_CONFIG_PATH" - -# ibus and fcitx integration -GTK_IM_MODULE_DIR="$XDG_CACHE_HOME/immodules" -export GTK_IM_MODULE_FILE="$GTK_IM_MODULE_DIR/immodules.cache" -if [ "$needs_update" = true ]; then - rm -rf "$GTK_IM_MODULE_DIR" - ensure_dir_exists "$GTK_IM_MODULE_DIR" - ln -s "$SNAP_DESKTOP_RUNTIME"/usr/lib/"$ARCH"/gtk-3.0/3.0.0/immodules/*.so "$GTK_IM_MODULE_DIR" - "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/libgtk-3-0/gtk-query-immodules-3.0" > "$GTK_IM_MODULE_FILE" -fi - -# GTK theme and behavior modifier -# Those can impact the theme engine used by Qt as well -gtk_configs=(gtk-3.0/settings.ini gtk-3.0/bookmarks gtk-2.0/gtkfilechooser.ini) -for f in "${gtk_configs[@]}"; do - dest="$XDG_CONFIG_HOME/$f" - if [ ! -L "$dest" ]; then - ensure_dir_exists "$(dirname "$dest")" - ln -s "$REALHOME/.config/$f" "$dest" - fi -done - -append_dir GTK_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH/gtk-3.0" - exec "$@" diff --git a/resources/linux/snap/hooks/configure b/resources/linux/snap/hooks/configure deleted file mode 100755 index e410e8d128f31..0000000000000 --- a/resources/linux/snap/hooks/configure +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -set -e - -[ ! -d "${SNAP_COMMON}/fontconfig" ] && mkdir -p "${SNAP_COMMON}/fontconfig" - -function append_dir() { - local -n var="$1" - local dir="$2" - # We can't check if the dir exists when the dir contains variables - if [[ "$dir" == *"\$"* || -d "$dir" ]]; then - export "${!var}=${var:+$var:}${dir}" - fi -} - -if [ "$SNAP_ARCH" = "amd64" ]; then - ARCH="x86_64-linux-gnu" -elif [ "$SNAP_ARCH" = "armhf" ]; then - ARCH="arm-linux-gnueabihf" -elif [ "$SNAP_ARCH" = "arm64" ]; then - ARCH="aarch64-linux-gnu" -else - ARCH="$SNAP_ARCH-linux-gnu" -fi - -append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/lib/$ARCH" -append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib/$ARCH" -append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/usr/lib" -append_dir LD_LIBRARY_PATH "$SNAP_DESKTOP_RUNTIME/lib" -append_dir PATH "$SNAP_DESKTOP_RUNTIME/usr/bin" - -cat > "${SNAP_COMMON}/fontconfig/fonts.conf" < - ${SNAP_COMMON}/fontconfig - /etc/fonts/fonts.conf - -EOF - -export FONTCONFIG_FILE="${SNAP_COMMON}/fontconfig/fonts.conf" - -"${SNAP_DESKTOP_RUNTIME}/usr/bin/fc-cache" --force --system-only --verbose || echo "configure hook: font generation failed" - -exec "$@" diff --git a/resources/linux/snap/snapcraft.yaml b/resources/linux/snap/snapcraft.yaml index 3e43a493cb977..d001e85fc308a 100644 --- a/resources/linux/snap/snapcraft.yaml +++ b/resources/linux/snap/snapcraft.yaml @@ -67,6 +67,7 @@ apps: GTK_USE_PORTAL: 1 DISABLE_WAYLAND: 1 SNAP_DESKTOP_RUNTIME: $SNAP/gnome-platform + GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas url-handler: command: electron-launch $SNAP/usr/share/@@NAME@@/bin/@@NAME@@ --open-url --no-sandbox @@ -74,6 +75,7 @@ apps: GTK_USE_PORTAL: 1 DISABLE_WAYLAND: 1 SNAP_DESKTOP_RUNTIME: $SNAP/gnome-platform + GSETTINGS_SCHEMA_DIR: $SNAP/usr/share/glib-2.0/schemas layout: /usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0: