如何通过SSH启动远程firefox窗口?


56

当我SSH到远程机器时

$ ssh -X remotebox

然后在遥控器上启动Firefox

remotebox$ firefox

并且我的本地计算机上运行着Firefox,则本地Firefox窗口将打开。远程机器上没有正在运行的Firefox进程。

如果我的本地计算机上没有运行firefox,则将打开一个远程firefox窗口。

为什么要打开本地Firefox窗口?我该如何预防呢?


这里是我本地系统的更多信息。

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

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

以下命令使用远程firefox窗口启动远程firefox会话。

remotebox$ firefox -no-remote

以下命令会产生短暂的延迟,然后回退到提示符,然后弹出本地Firefox窗口。remotebox上没有运行Firefox进程。

remotebox$ firefox

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

remotebox2上的以下命令将按预期启动远程firefox会话。

remotebox2$ firefox

我不知道为什么remotebox2上的firefox启动远程会话而不是本地会话。


我们可以$DISPLAY同时在本地和远程计算机上获取变量的内容吗?
aperson

@aperson,更新的问题。
lesmana 2010年

谢谢,这$DISPLAY似乎不是问题,ssh似乎可以正确地进行设置。
人,2010年

Answers:


46

除了firefox -no-remote 另一个参数之外firefox -no-xshm,它还揭示了使其工作的技术。

X11共享内存是一种进程间通信技术,可以由连接到给定x服务器会话的所有应用程序使用。它可以用于执行拖放和其他类型的桌面交互。

它也可以(并且已经)用于实现“一次打开”应用程序,以减少占用空间(或窗口数量)。

由于X11协议是网络透明的,因此“共享内存”也扩展到了远程X11客户端。


有什么办法可以让x不这样做吗?我希望将视频游戏/葡萄酒设置容器化以便于分发,但这使我头疼,因为这将导致不确定的行为,具体取决于容器用户已安装和运行的内容。我正在使用以下解决方案进行x转发:stackoverflow.com/a/25168483,并想简单地确保容器永远不会与主机共享内存。
物质先生爵士

它对我不起作用
Bob Ebert

尝试较低的建议:export MOZ_NO_REMOTE = 1
Kieveli

15

尝试 firefox -no-remote


这在打开远程firefox窗口时起作用。但是我仍然不明白为什么远程命令可以触发本地firefox窗口打开。
lesmana'9

@lesmana,这可能是由于x11转发-如果在其中设置了该代码,则sshd_config您可能会遇到这种情况,它正在被执行并通过隧道返回。
Marco Ceppi

10

注意,我做了圆顶挖掘,因为这很困扰我,您也可以添加:

MOZ_NO_REMOTE=1
export MOZ_NO_REMOTE

到您的个人资料。


4

您可以尝试此操作,当您连接到计算机(ssh user@host;注意:不带-X选项)时,请首先键入以下命令

export DISPLAY=:0 

这会将默认显示更改为当前桌面屏幕的显示。然后输入

firefox

在桌面窗口上生成Firefox。确保您已经登录桌面,如果没有登录(没有登录),您将收到以下错误;

firefox: cannot connect to X server :0

此方法也适用于锁定的桌面。请确保您使用相同的用户名登录了台式机和ssh shell 。

当有多个桌面会话,每个会话由不同数量的确定:0:1:2,等。


那是对我有用的唯一答案。
答案寻求者

2

没有其他解决方案对我有用,因此这是在其他站点上进行了一些搜索之后。

您需要以与在本地计算机上全部执行相同的方式在单独的进程中运行firefox。使用配置文件管理器创建新的配置文件,如下所示。

export MOZ_NO_REMOTE=1
firefox -ProfileManager

为了保持一致,我决定将外部计算机上的每个新配置文件命名为主机名。


1

简单的远程浏览

如果您想像坐在远程盒子前面一样在本地浏览网络:

$ ssh -X username@remote.example.com

然后在远程终端会话中运行Firefox :

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

注意命令中-X标志的用法ssh。您也可以一次完成两个步骤,如下所示:

$ ssh -X username@remote.example.com firefox http://test-ipv6.com/

隧道建立远程IP:端口

如果您有一个远程运行的应用程序,它公开了某种Web前端,那么您将有兴趣公开远程IP:port,就好像它是本地IP:port。在这种情况下,该-L选项定义localhost:localport和之间的对应关系remotehost:remoteport,如下面的伪命令所示:

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

例如:

$ ssh -L 127.0.0.1:18080:internal.example.com:8080 username@router.example.com

然后在本地运行Firefox :

$ firefox http://127.0.0.1:18080

在上面的示例中,您将通过SSH连接到username@router.example.com,并且对公开的Web前端感兴趣internal.example.com:8080。此远程IP:端口将在本地公开127.0.0.1:18080


0

我只添加对我有用的内容。简单使用firefox -no-remote失败并出现常见错误

Error: GDK_BACKEND does not match available displays

但是,以下工作:

ssh -Y user@host
firefox -no-remote

-Y选项启用受信任的X11转发。受信任的X11转发不受X11 SECURITY扩展控件的约束。您可以考虑-Cssh命令中添加选项以启用压缩。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.