Bug 9822

Summary: xdg-open myfile.dvi (over ssh -Y) starts up firefox
Product: Portland Reporter: Martin Vermeer <martin.vermeer>
Component: xdg-utilsAssignee: Portland Bugs <portland-bugs>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: kevin.krammer
Version: unspecified   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Martin Vermeer 2007-01-30 23:25:22 UTC
It works fine locally, starting up xdvi as it should. Over ssh (with X tunneling) it tries to open the file in the preferred web browser.

I see similar problems for pdf, and probably others.

Looking at the xdg-open script, I suspect this is due to not finding the desktop environment DE when logging in over ssh. "Generic" seems to assume you always want to view a real URL.
Comment 1 Martin Vermeer 2007-01-31 03:49:46 UTC
Why not, instead of looking for $GNOME_DESKTOP_SESSION_ID, directly test for the existence of gnome-open?

I tested and gnome-open myfile.dvi works correctly even over ssh.
Comment 2 Christian - Manny Calavera - Neumair 2007-01-31 10:38:48 UTC
> Why not, instead of looking for $GNOME_DESKTOP_SESSION_ID, directly test for
the existence of gnome-open?

Because xdg-open then wouldn't work correctly when both KDE and GNOME are installed and you use KDE.

You are describing an interesting edge case, though - where one doesn't use a particular DE but wants to force xdg-open to pretend that this DE is used (it should have worked using X directly, i.e. XDMCP).
Comment 3 Martin Vermeer 2007-01-31 12:25:49 UTC
> Because xdg-open then wouldn't work correctly when both KDE and GNOME are
> installed and you use KDE.

Ah, drats.

> You are describing an interesting edge case, though - where one doesn't use a
> particular DE but wants to force xdg-open to pretend that this DE is used 

Not really. I don't want to "pretend" anything -- just want to use some 
mime mechanism that works, like gnome-open if available.

> (it should have worked using X directly, i.e. XDMCP).

You mean with Xnest? Complicated.

What about testing _inside_ open_generic() for the presence of gnome-open? 
(and after that for kfmclient?) Would be an improvement wrt the 
current situation. 

Is there any mime opener not dependent upon a DE?  mailcap-based? 
Comment 4 Christian - Manny Calavera - Neumair 2007-01-31 13:01:15 UTC
> What about testing _inside_ open_generic() for the presence of gnome-open? 
> (and after that for kfmclient?) Would be an improvement wrt the 
> current situation. 

Using a DE-specific preferences when the DE is not used may be considered a bug. We use mailcap in that case for local files, and I don't know why it doesn't work for you.

Maybe you should update /etc/mailcap on the host machine and include a line like

application/x-dvi; evince '%s'; test=test -n "$DISPLAY" ; nametemplate=%s.dvi

This is what Ubuntu uses, at least.
Comment 5 Martin Vermeer 2007-01-31 22:45:36 UTC
> Maybe you should update /etc/mailcap on the host machine and include a line
> like
>
> application/x-dvi; evince '%s'; test=test -n "$DISPLAY" ; nametemplate=%s.dvi

Tried that; doesn't make any difference.

(Before you ask: my /etc/mime.types contains a line
application/x-dvi               dvi 
)

Where does xdg-open call the mailcap mechanism? I don't see it. Perhaps it 
should.

I have fc4, but debian (and ubuntu?) has a program (perl script) 
called run-mailcap.
Comment 6 Martin Vermeer 2007-02-01 05:07:10 UTC
> Where does xdg-open call the mailcap mechanism? I don't see it. Perhaps it 
> should.

To answer my own question, it uses mimeopen, another perl script. Which I don't have installed, and which apparently is not a dependency for the xdg-utils rpm (Fedora Extras packaging bug?) The package name is perl-File-MimeInfo and it is first available for fc5. I have fc4.

Still, I would suggest to (inside open_generic()) look in sequence for mimeopen, run-mailcap, gnome-open, kfmclient and exo-open... surely one of those will bite. Note that this problem only comes up when logging in outside a DE session, which may be intentional (unlikely if xdg-utils is installed) or accidental (ssh basic X-forwarding login). The first case implies a knowledgable user. The second case -- the only way a dummy would run X remotely -- should be handled robustly and with grace.
Comment 7 Kevin Krammer 2007-02-19 12:15:48 UTC
Does GNOME set a property (X11 property) on the root window which could be used to identify it?

In this case we could probaly extend the detectDE() check to first check for the environment variable and, if this fails, for the property.

This would allow to "force" a certain behavior by setting the environment variable, e.g. your local machine is running KDE but you want your remote machine to use the GNOME lookup.
Comment 8 Martin Vermeer 2007-02-19 12:59:50 UTC
> Does GNOME set a property (X11 property) on the root window which could be used to identify it?

Hmmm. Do you mean to test for the property on the local machine (running the X server) from the remote, so as to use the same DE as locally? 
Comment 9 Kevin Krammer 2007-02-19 13:06:05 UTC
Yes. The check for XFCE is already based on such a property and I think D-Bus uses a similar fallback when the envirnoment variable for the session bus address is missing.
Comment 10 Martin Vermeer 2007-02-19 13:51:42 UTC
Ah. How does it work? One idea that came to me was to look at _NET_CLIENT_LIST for DE-specific entries. Laborious. And how do you do this from the shell?

If this can be made to work it is the Obviously Correct(TM) solution...
Comment 11 Kevin Krammer 2007-02-19 13:58:52 UTC
detectDE() is one of the functions shared by all xdg-utils scripts, look for it in
http://webcvs.freedesktop.org/portland/portland/xdg-utils/scripts/xdg-utils-common.in?revision=HEAD&view=markup

I think KDE sets a root window property as well (in recent versions), so I thought GNOME might as well do something in this direction.
Comment 12 Martin Vermeer 2007-02-19 20:33:17 UTC
Well, it sets

NAUTILUS_DESKTOP_WINDOW_ID

and I think all non-ancient GNOMES do that. Is this useable? What does KDE set?
Comment 13 Kevin Krammer 2007-02-20 12:43:09 UTC
Well, hmm, this depends on Nautlius handling the desktop, right?

But if this is the most common situation on GNOME desktops, it could be acceptable (but I think someone from GNOME should decide this)

As for KDE, I think it basically sets the same thing (i.e. KDE_FULL_SESSION=true) in both environment and root window property.

In any case, the remaining problem is to check if this additional "desktop detection" will likely work.
The remote machine might not have the tools installed the respective script code path would then execute.

A possible solution, but quite hacky, would be to set the environment variable and then call the script again from within itself.
If this second invocation returns the error code for "delegate not found", one could still proceed with the original decision (no DE detected)
Comment 14 Martin Vermeer 2007-03-03 00:19:51 UTC
GNOME sets the environment variable

GNOME_DESKTOP_SESSION_ID=Default

It would be good if it set this also as an X property -- which cannot be
very hard to implement.

If you start an X application in a remote machine, you want it to conform to
the desktop standard on your _local_ machine, where the window will appear. If
at all possible. This is something every DE should try to do, and apparently
the way to do it is by using an X property. 

Don't you think that is a reasonable demand and should be part of a free
desktop standard?

- Martin
Comment 15 Christian - Manny Calavera - Neumair 2007-03-08 03:33:22 UTC
Here's a quick workaround for your SSH needs:

* For your server, add a

AcceptEnv DESKTOP_SESSION

directive to sshd_config (usually /etc/ssh/sshd_config)

* For your client, add a

Host *
    SendEnv DESKTOP_SESSION

directive to ssh_config (/etc/ssh/ssh_config or ~/.ssh/config)

Now the DESKTOP_SESSION should be propagated to the host machine after you restarted the host sshd.
Comment 16 Yevgen Muntyan 2007-09-07 23:59:27 UTC
On Windows or Mac there are no environment variables to propagate; running applications on new clients and old servers (run a program on home machine using X server on an ancient university system) is not something exotic either. So while it's good to get environment from the server machine, it is not enough at all. Bunch of fallbacks as proposed in comment #6 would be good.

Debian's xdg-open tries run-mailcap by the way.
Comment 17 Per Olofsson 2015-10-06 01:32:48 UTC
Generic mode should take care of this nowadays. Please reopen otherwise.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.