How do I launch a remote firefox window via SSH?

When I SSH to a remote box

$ ssh -X remotebox

then start firefox on the remote box

remotebox$ firefox

and I have firefox running on my local machine, a local firefox window will open. no firefox process is running on the remote box.

If firefox is not running on my local machine then a remote firefox window will open.

Why is it opening a local firefox window? How can i prevent that?


Here some more information of my local system.

Linux lesmana-laptop 2.6.32-24-generic #42-Ubuntu SMP Fri Aug 20 14:24:04 UTC 2010 i686 GNU/Linux

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.1 LTS
Release:    10.04
Codename:   lucid

DISPLAY=:0.0

Mozilla Firefox 3.6.8, Copyright (c) 1998 - 2010 mozilla.org

Information of remotebox.

Linux dxray 2.6.22.19-0.4-default #1 SMP 2009-08-14 02:09:16 +0200 x86_64 x86_64 x86_64 GNU/Linux

LSB Version:    core-2.0-noarch:core-3.0-noarch:core-2.0-x86_64:core-3.0-x86_64:desktop-3.1-amd64:desktop-3.1-noarch:graphics-2.0-amd64:graphics-2.0-noarch:graphics-3.1-amd64:graphics-3.1-noarch
Distributor ID: SUSE LINUX
Description:    openSUSE 10.3 (X86-64)
Release:    10.3
Codename:   n/a

DISPLAY=localhost:15.0

Mozilla Firefox 3.0.14, Copyright (c) 1998 - 2009 mozilla.org

The following command starts a remote firefox session with a remote firefox window.

remotebox$ firefox -no-remote

The following command produces a brief delay, then drops back to prompt and a local firefox window pops up. No firefox process running on the remotebox.

remotebox$ firefox

Information of remotebox2.

Linux marvin 2.6.31-22-generic #60-Ubuntu SMP Thu May 27 00:22:23 UTC 2010 i686 GNU/Linux

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 9.10
Release:    9.10
Codename:   karmic

DISPLAY=localhost:11.0

Mozilla Firefox 3.6.8, Copyright (c) 1998 - 2010 mozilla.org

The following command on remotebox2 starts a remote firefox session as expected.

remotebox2$ firefox

I do not know why firefox on remotebox2 starts a remote session instead of a local session.


besides firefox -no-remote another parameter is firefox -no-xshm which reveals the technique used to make it work.

X11 shared memory is an interprocess communication technique which can be used by all applications connected to a given x server session. It can be used to perform drag & drop, and other kind of desktop interaction.

It can be (and is) used also to implement "open once" applications, in order to reduce the footprint (or the number of windows).

Since the X11 protocol is network transparent the "shared memory" is extended also to remote X11 clients.


Try firefox -no-remote


Note, I did dome digging as this was bugging me and you can also just add:

MOZ_NO_REMOTE=1
export MOZ_NO_REMOTE

to your profile.


You can try this, when you connected to machine (ssh user@host; note: without -X option), first type the follow command

export DISPLAY=:0 

this would change the default display to that of the current desktop screen. And then just type

firefox

to have firefox spawned on the desktop window. Ensure that you have logged into the desktop, without which (no logins) you will get the following error;

firefox: cannot connect to X server :0

This method would work for locked desktops as well. Please ensure that you have logged in on the desktop and the ssh shell with the same username.

When there are multiple desktop sessions, each session is identified by a different number as :0, :1, :2, etc.


Simple remote browsing

If you'd like to browse the web locally as if you were sitting in front of a remote box:

$ ssh -X [email protected]

then run Firefox inside the remote terminal session:

$ firefox https://test-ipv6.com/

Notice the usage of -X flag in the ssh command. You can also do both steps in a single go, like shown below:

$ ssh -X [email protected] firefox http://test-ipv6.com/

Tunnelling a remote IP:port

If you have an application running remotely which exposes some sort of web frontend, you will be interested on exposing the remote IP:port as if it is a local IP:port. In this case, the -L option defines a correspondence between localhost:localport and remotehost:remoteport, as shown in the pseudo command below:

ssh -L localhost:localport:remotehost:remoteport remoteuser@remotehost

For example:

$ ssh -L 127.0.0.1:18080:internal.example.com:8080 [email protected]

then run Firefox locally:

$ firefox http://127.0.0.1:18080

In the example above, you are connecting via SSH onto [email protected], and you are interested on a web frontend exposed at internal.example.com:8080. This remote IP:port will be exposed locally at 127.0.0.1:18080.