50

Just updated to Ubuntu 16.04 & trying snap packages for first time.

So I needed meshlab to view some stl files. Ran in to issue with p-i-t-n log in. Found that command line install of snap packages does not need the log in. Did:

sudo snap install meshlab

and hey presto meshlap installed, no pitn log in. Works fine from command line. However program does not show up in the launcher. Why is this? Do snap packages not show up in launcher? How can I fix this?

12 Answers 12

52

If you are using zsh, the snap binary and desktop directories will not automatically be added to your environment variables. In order to solve this, I added the following line to /etc/zsh/zprofile (taken from Arch):

emulate sh -c 'source /etc/profile'

This will process your /etc/profile file with bash emulation, which in turn sources /etc/profile.d/* and sets the proper PATHs, etc.

To add only the snap directories to your path, without including all the rest of the default bash profile:

emulate sh -c 'source /etc/profile.d/apps-bin-path.sh'
| improve this answer | |
  • 2
    Thanks! Works well on 17.10 too. Switching to zsh brought up this problem for me aswell. – danwit Feb 11 '18 at 12:07
  • 2
    They should fix this in the install process or add a FAQ/Troubleshooting steps for snap. – BradErzwh Mar 10 '18 at 22:55
  • 1
    Thanks, worked for me on 18.10. Hope this will be fixed somehow in future. – Pavel Davydov Nov 2 '18 at 10:23
  • 2
    Brilliant, unfortunately its still a problem on 19.04 – jhole89 Apr 18 '19 at 19:16
  • 2
    maybe obvious to some but login / logout after change – Dominic Xigen Jan 24 at 9:12
15

It's built into the snap system, but you have to add the link to your dash. To start the program type

snap run meshlab

once it's up and running, right click on the icon and click on "add to dash".

| improve this answer | |
12

For me, it also seems to be related to the combination of Wayland/ZSH under Ubuntu 18.04 - even though /var/lib/snapd/desktop is listed in the XDG_DATA_DIRS variable (this is done by /etc/profile.d/apps-bin-path.sh), the launcher doesn't recognize apps from that folder.

A quick workaround is to sym-link the desired desktop files, for example:

ln -s /var/lib/snapd/desktop/applications/rubymine_rubymine.desktop .local/share/applications
| improve this answer | |
9

Running Kubuntu 18.04 the solution for me as adding

export XDG_DATA_DIRS="$XDG_DATA_DIRS:/var/lib/snapd/desktop/"

to a custom file like snap-apps.sh in ~/.config/plasma-workspace/env. But that applies only to Plasma 5 and might be fixed in Ubuntu 18.10 already.

As dsager already mentioned in his answer the usual /etc/profile.d/apps-bin-path.sh does not seem to work.

| improve this answer | |
  • 2
    This worked perfectly - fellow Kubuntu user. – john Apr 23 '19 at 19:07
  • Thanks! Solved the problem for me on Kubuntu. – Дмитрий Полянин May 15 '19 at 14:17
7

Copy applications shortcut from /var/lib/snapd/desktop/applications/ to /usr/share/applications/

Example: sudo cp /var/lib/snapd/desktop/applications/brave_brave.desktop /usr/share/applications/

I had to do this on GalliumOS 3.0 (Xubuntu-based)

| improve this answer | |
6

Do snap packages not show up in launcher?

They do as long as the snap ships proper .desktop files. Only Meshlab's meshlabserver has a proper desktop file (and indeed, it shows up in my launcher). The meshlab .desktop file, however, is attempting to exec meshlab.meshlab, when it should just be using meshlab. As a result, it doesn't show up.

How can I fix this?

If you run snap info meshlab you'll see contact info for the publisher. I suggest you report a bug to them. Until then, you can always run meshlab from the CLI, or create your own .desktop file for it.

| improve this answer | |
5

I couldn't comment on someone else's post. However, this is to add to dsager's answer which helped me on Fedora 28 (which as far as I can tell, uses Wayland)

I added the following snip to my ~/.bash_profile to link on login each file in /var/lib/snapd/desktop/applications. Similarly this could be modified to remove the links for apps which do not exist anymore by switching the paths in the for line and the if line then replacing ln with an rm.

for i in /var/lib/snapd/desktop/applications/*.desktop; do
    if [ ! -f ~/.local/share/applications/${i##*/} ];then
            ln -s /var/lib/snapd/desktop/applications/${i##*/} ~/.local/share/applications/${i##*/};
    fi;
done

There's probably a handful of different ways to accomplish this, but it works.

| improve this answer | |
  • 1
    Useless use of ls. Use for in /var/lib/snapd/desktop/applications/*.desktop; do i="${i##*/}"; ... instead. A shorter way to achieve this would be ln -st ~/.local/share/applications /var/lib/snapd/desktop/applications/*.desktop 2>/dev/null. – David Foerster Jul 27 '18 at 16:44
  • I knew there was a way to execute your first example, however I couldn't remember the ${i##*/} portion when I was initially writing this. I'll edit my post to include that variant. However, your latter suggestion does not check if the link already exists, thus uselessly re-executing the ln command. In fact, I wanted to find a way to avoid grep as well to reduce the number of processes spun up while executing. Thank's for your comment. – Eric Niconovich Jul 29 '18 at 17:06
  • My second suggestion does check if the target file exists already and, if that's the case, prints an error message (redirect to /dev/null and thus suppressed). It doesn't do anything “useless”: it forks & exec’s a single time and makes one system call to symlink(2) or symlinkat(2) for each matching file. If you use a loop to check for file type (stat(2)) and then (conditionally) fork & exec ln(1) which invokes symlink*(2) that’s a lot more “useless” work. – David Foerster Jul 29 '18 at 17:36
3

You have to run snap run meshlab from terminal and stop it, then you will see Meshlab in your application list

| improve this answer | |
1

Same thing with blender.

snap run blender

does work, however did not fix the problem.

I had to copy blender.desktop from /snap/blender/current/blender.desktop to /usr/share/applications (with sudo) and then all was fixed: blender shows in the gnome menus and nautilus associates it with .blend files.

Looks like some sort of crack between snaps and gnomes to me. Perhaps what we need is a snappy gnome (or is it a gnomey snap ;^).

| improve this answer | |
  • 1
    Hi, I did what you told but I've now two icons for every program I've did this... see i.imgur.com/aamlQJZ.png Is this happened to you too? – Cirelli94 Dec 29 '17 at 14:24
1

Snap binaries are stored in /snap/bin, at least in Debian 10 (buster). Add the directory to $PATH and reload bash profile, ~/.bashrc.

echo -n "export PATH=/snap/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc
| improve this answer | |
0

I ran in to the same issue on Ubuntu 18.04. It seems to be a problem with Wayland. The solution for me was to switch back from Wayland to Xorg.

| improve this answer | |
0

On my machine all snaps that are installed only show in the launcher after I log off and back on. I just installed Krita and Standard Notes. Logged off and back on and it was in the launcher. Same thing with Spotify.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.