desktop icons with relative path to .desktop file
Duncan
1i5t5.duncan at cox.net
Sat Jun 3 07:25:43 BST 2023
Alexander Puchmayr posted on Fri, 02 Jun 2023 13:04:46 +0200 as excerpted:
> Hi there,
>
> I'd like to use a shared nextcloud folder to deploy clickable shortcuts
> to certain programs with some pre-defined arguments (e.g. urls to some
> web-sites,
> programs which need some extra arguments such as a session specifier or
> the like).
>
> Using .desktop files seems to be the perfect solution for this, but I'd
> also like to have individual icons for those desktop files, for example
> different icons for different web sites. So the idea is to create a
> .icons directory inside the shared folder from nextcloud and use
> ./.icons/<someicon> as relative path with the .desktop file as reference
> directory.
>
> https://unix.stackexchange.com/questions/428992/why-do-freedesktop-
desktop-files-not-allow-relative-paths
> explains some reasons why this is not possible, but I don't see another
> way of getting what I want. Absolute paths are not possible (the
> nextcloud shared folder is located in the user's home directory), and
> the target audience for my setup is not expected to be allowed or able
> to install anything on their computers. So for this problem, the only
> solution is to place the icons inside the shared folder.
Thanks for already doing some of the research. Looking at it, it should be
possible to do what you want (unless there's further site-policy
restrictions you didn't realize were apropos and thus didn't mention that
prevent it), but from this angle, it seems you're fighting the icon themes
spec (seeing what it prevents, the spec is linked repeatedly from that
stackexchange page) rather than trying to work with it (using the
flexibility it allows) to do what you need.
Quoting the spec (directory layout page)
https://specifications.freedesktop.org/icon-theme-spec/latest/ar01s03.html
>> By default, apps should look
>> in $HOME/.icons (for backwards compatibility),
>> in $XDG_DATA_DIRS/icons and
>> in /usr/share/pixmaps
>> (in that order).
That immediately suggests two different possibilities, plus a third simpler
one (described first below) I doubt will work but would have to try to know
for sure (it's not in the spec but could be in some implementations):
1) Simplest if it works so worth a try but probably won't:
Try the traditional Unix-y ~/ denotation for $HOME in the icon path. I
guess I'd call that half-way between absolute and relative. With the
nextcloud dir a subdir of $HOME, presumably a specific subdir always
located at the same spot relative to $HOME, if it works... but probably
not. While you're at it, might as well try $HOME as well, which would
imply that other environmental variable values should work too, tho I'd be
even more surprised if that works.
2) Should work by implementation, but could well be impractical for you:
You mention that users are not expected to be able to install anything, but
it's ambiguous whether that extends to ~/.icons/ (aka $HOME/.icons/ ) or
not. If it's read-only (you don't what users overriding icons that way),
what about making that a symlink (which /can/ be relative) to your desired
shared dir, presumably starting with /etc/skel/ (aka the template $HOME,
which you may handle differently) so it's setup automatically for all new
users? If possible, that should "just work".
3) Should work by implementation, and most likely to be practical, tho with
a bit more complexity:
Take advantage of that $XDG_DATA_DIRS/icons entry. In particular, note
that XDG_DATADIRS is plural... Here's the kde page with some detail and a
link to the freedesktop.org spec (see the freedesktop.org compliance
section):
https://userbase.kde.org/KDE_System_Administration/Environment_Variables
In particular, $XDG_DATA_DIRS is a colon-separated list with defaults if
unset/empty of /usr/local/share:/usr/share . Of course that means you can
extend the list by setting and exporting the variable (if it's already set,
your distro likely uses it so you'll likely want to add to the list, not
replace it).
FWIW I routinely use/extend the various $XDG_* variables here (tho in a
home I'm my own sysadmin, with myself as the primary user with three role-
based user accounts, user/admin/root, context, and I've never had to
actually try it with icons as you are) and can say with a certainty it's
quite a flexible setup, if you're willing to work with it.
Presumably after adding the desired dir to the $XDG_DATA_DIRS list in the
desired ordered location, you'd create the icons/hicolor/ subdir (hicolor
being the default fallback theme, or substitute whatever company theme or
the like) and place your desired icons within it so they'll be in the
search sequence, as appropriate and as described in the icon-theme-spec.
Then you can simply point to them by unpath-ed name in the *.desktop file
and it should "just work" (after a reboot or otherwise ensuring the new
envar setting is in the environment as kde/plasma sees it, of course =:^) .
The big caveat here is of course the assumption that you can set and export
XDG_DATA_DIRS deployment-wide as appropriate for your site/policy, but
given the scenario you've described and the privs that already requires, I
don't believe that's an unreasonable assumption.
--
Duncan - List replies preferred. No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master." Richard Stallman
More information about the kde-linux
mailing list