Skip to content

desktop-common.sh deletes XDG dirs and creates self-referential symlinks on classic snap first launch #3316

@jardaKarlik

Description

@jardaKarlik

Description

On first launch of the WaveTerm snap (v0.14.5, Ubuntu 26.04), desktop-common.sh destroyed all standard XDG user directories (Desktop, Documents, Downloads, Music, Pictures, Public, Templates, Videos) and replaced them with broken self-referential symlinks, making them inaccessible from the file manager.

Root cause

WaveTerm uses confinement: classic, which means $HOME is not isolated — it stays as the user's real home (e.g. /home/leeCZ). The desktop-common.sh script was written for strict confinement where $HOME = $SNAP_USER_DATA ≠ $REALHOME. With classic confinement both variables are identical.

The broken code path (around line 204–213 of desktop-common.sh):

# can_open_file uses "head -c0" which always fails on directories → sets needs_xdg_links=true

b="$(realpath "${XDG_SPECIAL_DIRS_PATHS[$i]}" --relative-to="$HOME")"
if [ -e "$REALHOME/$b" ]; then
  if [ -d "$HOME/$b" ]; then
    rmdir "$HOME/$b"          # ← DELETES the real directory
  fi
  if [ ! -e "$HOME/$b" ]; then
    ln -s "$REALHOME/$b" "$HOME/$b"   # ← ln -s /home/user/Desktop /home/user/Desktop
  fi                                  #   (points to itself — both vars are /home/user)
fi

Steps to reproduce

  1. Fresh Ubuntu install, user has standard XDG directories (Desktop, Documents, etc.)
  2. Install WaveTerm snap: snap install waveterm
  3. Launch WaveTerm for the first time
  4. Open the file manager — standard home folders are now inaccessible broken symlinks

Expected

Snap home ($SNAP_USER_DATA) gets symlinks pointing to real XDG dirs — leaving the real home untouched.

Actual

Real XDG directories are deleted and replaced with self-referential symlinks in the real home:

lrwxrwxrwx Desktop -> /home/user/Desktop
lrwxrwxrwx Documents -> /home/user/Documents
...

Suggested fix

Guard the symlink creation block so it only runs when $HOME != $REALHOME (i.e. strict confinement):

if [ $needs_xdg_links = true ] && [ "$HOME" != "$REALHOME" ]; then

Notes

The bug also re-triggers on every snap version update (when SNAP_DESKTOP_COMPONENTS_NEED_UPDATE=true), so affected users will keep hitting it after each WaveTerm upgrade until fixed.

Environment

  • WaveTerm: 0.14.5 (snap revision 204, classic confinement)
  • OS: Ubuntu 26.04
  • Shell: bash

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions