Fyi ; I have posted some diagnostic info on this issue on forum.snapcraft.io
I cant post links on your forum, but if you search for snap-obsidian-doesnt-start-with-ubuntu-26-04/51167/4 you should find ( 4th post down)
I saw your post, thanks
Thanks a lot for posting this fix. I can confirm that it works on my system (Ubuntu 26 LTS, newly installed and with all patches).
For my convenience I created an executable script file with the following contents:
#!/usr/bin/bash
echo "nn_obsidian.sh"
echo "Starts obsidian snap from command line."
bash --noprofile --norc <<'EOF'
snap run --shell obsidian <<'SNAPEOF'
exec "$SNAP/obsidian" \
--no-sandbox \
--enable-logging
SNAPEOF
EOF
When I execute this script file, the Obsidian GUI comes up every single time! Thanks a lot for posting this workaround.
Do you run the appimage with --no-sandbox
I am also unable to get the obsidian 1.12.7 UI to come up, but I am running Ubuntu 24.04 LTS . I tried .appimage first, then snap then fouind a .deb and installed that. Same problem with each. This is what finally worked for me (mostly/sort-of):
Uninstall previous attempts, get rid of config.
rm -r ~/.config/yourpath to obsidian
Get Obsidian image
Download the .appimage for obsidian- obsidian.md / downloads
Rename obsidian and move to root of your ~home ; make it executable.
mv ~/Downloads/Obsidian-.AppImage ~/Obsidian.AppImage
chmod u+x Obsidian.AppImage
Run obsidian. This was the secret sauce:
./Obsidian.AppImage --no-sandbox --disable-gpu
It runs with UI now but there are errors in the terminal:
./Obsidian.AppImage --no-sandbox --disable-gpu
Ignored: Error: ENOENT: no such file or directory, open ‘/home/hermes/.config/obsidian/obsidian.json’
2026-05-04 18:03:05 Loaded main app package /tmp/.mount_ObsidiWYRURb/resources/obsidian.asar
2026-05-04 18:03:06 Checking for update using Github
2026-05-04 18:03:06 Success.
2026-05-04 18:03:06 Latest version is 1.12.7
2026-05-04 18:03:06 App is up to date.
Ignored: Error: ENOENT: no such file or directory, open ‘/home/hermes/.config/obsidian/50b4aad2f8148cfa.json’
[19976:0504/140457.239107:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1091] [GroupMarkerNotSet(crbug 242999)!:A05023000C240000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content.
[19976:0504/140457.284428:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1091] [GroupMarkerNotSet(crbug 242999)!:A05023000C240000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content.
[19976:0504/140457.298007:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1091] [GroupMarkerNotSet()!:A02023000C240000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content.
[19976:0504/140457.663932:ERROR:gpu/command_buffer/service/gl_utils.cc:389] [.WebGL-0x334404289800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[19976:0504/140457.818682:ERROR:gpu/command_buffer/service/gl_utils.cc:389] [.WebGL-0x334404289800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[19976:0504/140457.956019:ERROR:gpu/command_buffer/service/gl_utils.cc:389] [.WebGL-0x334404289800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
[19976:0504/140458.071003:ERROR:gpu/command_buffer/service/gl_utils.cc:389] [.WebGL-0x334404289800]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)
This thread is specifically about 26.04 and snap.
If you need --disable-gpu, in snap or other packages, there’s likely GPU driver problem . So open a separate thread.
Heyo!
One of my colleagues at Canonical dug into this, and I think they’ve found the issue (quoting them below)
/snap/obsidian/current/desktop-common.sh is doing:
function can_open_file() {
head -c0 "$1" &> /dev/null
}
...
if can_open_file "$REALHOME/.config/user-dirs.dirs" && can_open_file "$REALHOME/.config/user-dirs.locale"; then
...
# Create links for user-dirs.dirs
if [ $needs_xdg_links = true ]; then
for ((i = 0; i < ${#XDG_SPECIAL_DIRS_PATHS[@]}; i++)); do
b="$(realpath "${XDG_SPECIAL_DIRS_PATHS[$i]}" --relative-to="$HOME")"
if [ -e "$REALHOME/$b" ]; then
if [ -d "$HOME/$b" ]; then
rmdir "$HOME/$b" 2> /dev/null
fi
...
Basically trying to replace XDG directories for the snap by symlink to the real dir. In that case it’s a classic snap so it shouldn’t try to do that but
$ gnuhead -c0 ~/Documents; echo $?
0
$ head -c0 ~/Documents; echo $?
head: error reading '/home/ubuntu/Documents': Is a directory
1
The head behavior is different in rust-coreutils which makes the check it does to decide if it needs to do the symlink dance or not fail and try to rmdir ~/Documents and errors out
That launcher script appears to be included as part of electron builder, and hasn’t been updated for some time.
Happy to try and work with any of the maintainers to solve this. The view here is that this was probably a bug in the check, but just sort of happened to work until now!
Cheers (amd thanks to Seb for diving in…!)
Jon
@jnsgruk Thanks very much to you and to your colleague Seb for looking into this.
I assume that head in rust-coreutils might get patched to match gnu coreutils at some point.
However
I also thought that this was part of the problem. This is also causing us another BR.
We do not generate those scripts, they come from electron-builder. We would appreciate if you could upstream your findings/changes to electron-builder.
Hey
Not obvious to me where the code actually is for that script - I can’t find it in Electron Builder’s source, so I’ve opened an issue on Github at electron-builder #9704
Cheers, Jon
I respectfully disagree. This is a rust-coreutils bug. Using head -c0 should not perform any reads.
Note that rust-coreutils does not perform any reads in this case, but stats the input file:
```
$ strace ./target/release/head -c0 .
[…]
statx(AT_FDCWD, “.”, AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=810, …}) = 0
write(2, “head”, 4head) = 4
write(2, ": ", 2: ) = 2
write(2, “error reading ‘.’: Is a director”…, 33error reading ‘.’: Is a directory) = 33
write(2, “\n”, 1
) = 1
[…]
```
Therefore, throwing a read error like this is misleading. Note that GNU coreutils does not stat the input file. It determines errors from read:
```
$ strace head -c1 .
[…]
openat(AT_FDCWD, “.”, O_RDONLY) = 3
read(3, 0x7fff4873e970, 1) = -1 EISDIR (Is a directory)
fcntl(1, F_GETFL) = 0x80002 (flags O_RDWR|O_CLOEXEC)
write(2, "head: ", 6head: ) = 6
write(2, “error reading ‘.’”, 17error reading ‘.’) = 17
[…]
write(2, “: Is a directory”, 16: Is a directory) = 16
write(2, “\n”, 1
) = 1
[…]
```
Generally stat should be avoided when possible, since it introduces TOCTOU races. This one is less security sensitive, but is unfortunate regardless. I’ll add a test for it in GNU coreutils.
I am sorry I didn’t wanna muddy up the waters. There are two problems here:
- A script that is likely wrong for setting up the snap in classic confinement
- Within this wrong script, a change in the way
headacts due to the switch from gnu coreutls to rust-coreutuls
We don’t make this script, we get it from electron-builder, who I just learned gets it from another project. I don’t know if rust-coreutils people wanna match what gnu coreutils does in this case.
If you are confident this is a bug, please upstream a bug report to coreutils
Ah, sorry, that was my misunderstanding. I thought the script was part of Obsidian.
Follow this and work for me too.
just using .deb installer
I’ve mentioned this to the project lead for the rust coreutils port, and will see what his opinion is. Thanks for looking into it @collinfunk ![]()
Some good conversation happening with the electron-builder folks on Github about both fixing this, and making electron builder have better support for newer snap features.