On Tue, 02 Jun 2020 at 17:07:18 +0100, Laurence Tratt wrote: > At some point recently our mozilla-firefox port stopped automatically opening > downloaded files for me. pkg/README says: > > Due to unveil(2) limiting filesystem access, only the default MIME > handler registered for a given type can be chosen when opening a > downloaded file. For example, to use the mupdf package to read > PDFs, it must be registered as the default with XDG: > > $ xdg-mime default mupdf.desktop application/pdf > > And, indeed, I have had that set for some while and it used to work fine. > However, when I click on a PDF link in Firefox, it now brings up the > (not-very-useful because of unveil!) "launch application" window. > > I'm sure I'm missing out on something obvious, but I'm not sure what it might > be (and I know someone else who's equally baffled). In case it's relevant, > I'm using XFCE (so DBUS is running) on -current as of a couple of days ago, > with the firefox-76.0p0 package on amd64. If anyone has any pointers, I know > at least two of us who will welcome them!
Firefox tries to execute xdg-open to parse the MIME stuff and run the appropriate handler for application/pdf. https://github.com/mozilla/gecko-dev/blob/c686b5d5614da653c20c689cea96a80ae598a1a1/toolkit/system/gnome/nsGIOService.cpp#L504-L514 Up until Glib 2.64.2, this was done by executing gio-launch-desktop with xdg-open as an argument. This worked out for us because xdg-open is a shell script and gio-launch-desktop was a binary, so we could just unveil /usr/local/bin/gio-launch-desktop in Firefox's unveil.main. This changed as of updating our Glib port to 2.64.2 a few weeks ago, and now Glib no longer ships with gio-launch-desktop, trying to run xdg-open via /bin/sh directly: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1362/diffs I'm not sure how best to handle this going forward, but unveiling /bin/sh is not a good idea. Perhaps we include a small compiled utility with Firefox that just hard-codes execve("/usr/local/bin/xdg-open", ...) and then unveil that binary instead of gio-launch-desktop? Firefox would still need modifying to exec that utility directly instead of using Glib's g_app_info_create_from_commandline. FWIW, the old .mailcap style handling still works, where you list each binary specifically in ~/.mailcap and add it to your own unveil.main.