I suspect the key lies in the content of
.desktop files most commonly found in
/usr/share/applications. (A user may also have some
.desktop files placed in
$HOME/.local/share/applications automatically or manually.)
The format of
.desktop files is usually based on specifications laid down by freedesktop.org.
Of interest here, are two entries:
means "this application exists, but don't display it in the menus". This can be useful to e.g. associate this application with MIME types, so that it gets launched from a file manager (or other apps), without having a menu entry for it (there are tons of good reasons for this, including e.g. the netscape -remote, or kfmclient openURL kind of stuff).
A list of strings identifying the desktop environments that should display/not display a given desktop entry.
By default, a desktop file should be shown, unless an OnlyShowIn key is present, in which case, the default is for the file not to be shown.
On my system which is just "KDE", I see:
$ grep -E "NoDisplay" /usr/share/applications/*.desktop
(plus many more entries)
$ grep -E "OnlyShowIn" /usr/share/applications/*.desktop
$ grep -E "NotShowIn" /usr/share/applications/*.desktop
As you'll gather for yourself if you run the commands given above on your system, there may be good reason for some applications not being included in menus, either of the original desktop environment or in any other. In some cases, there may not be a reason that you feel is valid.
If you do want to change the status of display for certain applications, I suggest you copy the corresponding
.desktop file over to
~/.local/share/applications and make your changes there. Changes made there will
- not need sudo
- be only for you and not for other users
- be unchanged if/when the application is updated whereas the
.desktop file in
/usr/share/applications will be overwritten.