在另一台计算机上运行的Firefox实例中打开URL?


4

我有Firefox运行,从命令行我可以打开一个新的选项卡,只需输入:

firefox http://stackoverflow.com

我想要完成的是类似的,但远程。我在机器B上运行Firefox。从机器AI希望能够运行(在设置任何ssh隧道或类似的东西之后),例如:

firefox http://stackoverflow.com

但是,选项卡不应该在机器A上打开,而是在机器B上打开。我不希望X11转发,我只是希望能够指示远程机器上的Firefox打开给定的URL。

有任何想法吗?

Answers:


1

在Firefox将运行和显示的机器上(机器A),您需要:

  • 指定要连接的X服务器,例如设置DISPLAY =:0.0。
  • 以某种方式对X服务器进行身份验证。一种简单的方法是在X会话中读取$ XAUTHORITY的值并使用相同的值。

例如,在X会话中的终端中执行:

$ echo $XAUTHORITY 
/var/run/gdm/auth-for-ambro-j3bu8Q/database

然后从SSH终端做,作为与X会话相同的用户(否则使用su):

DISPLAY=:0.0 XAUTHORITY=/var/run/gdm/auth-for-ambro-j3bu8Q/database firefox http://stackoverflow.com

登录时,您可以在某处自动写入$ XAUTHORITY的值。例如,创建以下脚本〜/ write-xauth(不要忘记chmod + x):

#!/bin/bash
touch "$HOME"/.saved-xauthority
chmod u=rw,g=,o= "$HOME"/.saved-xauthority
echo "$XAUTHORITY" > "$HOME"/.saved-xauthority

然后创建一个将运行上述脚本的自动启动文件〜/ .config / autostart / save-xauthority.desktop:

[Desktop Entry]
Type=Application
Name=Save XAUTHORITY to .saved-xauthority
Exec=/home/<type_user>/write-xauth
Terminal=false
X-KDE-StartupNotify=false
StartupNotify=false

一旦你在机器B(firefox不会显示的机器)上有一个shell,你只需要SSH到机器A(firefox将运行并将显示)并运行我发布的firefox命令。可以将其自动化为机器B上的脚本。您将使用密钥(而不是密码)进行机器A的SSH身份验证。例如,请参阅https://wiki.archlinux.org/index.php/SSH_Keys。这将允许您在不输入密码的情况下以非交互方式进行ssh。现在,您可以通过键入以下命令从机器B在机器A上运行命令:

ssh machineA command argument ...

在您的情况下,您可能希望在machineA上创建一个用于打开Firefox窗口的脚本:

ssh machineA ./open_local_firefox http://whatever

这个脚本看起来像:

#!/bin/bash
export DISPLAY=:0.0
export XAUTHORITY=$(cat "$HOME"/.saved-xauthority)
firefox "$1" &>/dev/null 2>&1 &

值得注意的是,这个设置将允许机器B作为您正在进行SSH连接的用户在机器A上运行任何内容。可以限制这一点,但这并不容易。如果你想用SSH做这件事,sshd的ForceCommand选项可能会有所帮助。

当然还有其他方法可以做到这一点,但这一切都归结为在机器A上使用正确的环境变量(如上所示)作为正确的用户运行'firefox'命令。例如,您可以在计算机A上设置HTTP服务器和脚本,以便某个POST请求将打开该Firefox窗口。这可能比SSH方法更容易保护。


嗨,谢谢你的回复,但正如我在我的问题中所说,我不是在寻找X11转发,在我的使用案例中,它太慢了。我正试图找到一种方法来指示在远程计算机上运行的firefox打开给定的URL。
Angel de Vicente

这不是X11转发; 它是关于远程启动Firefox(通过SSH会话)在远程系统上显示自己(而不是客户端运行的那个)。
Ambroz Bizjak 2011年

啊,好吧,我误解了它,但无论如何我不确定这是否会奏效。让我澄清一下:我在机器A,我在运行Firefox。我通过ssh连接到机器B.从机器BI想要(通过scirpt)告诉机器A中的Firefox打开另一个带有另一个URL的选项卡。我会再试一次,然后我会报告。
Angel de Vicente

它会工作,你只需要SSH回到机器A并按照我告诉你的方式启动firefox。我已经添加了更多信息,因为您已经更完整地解释了您的问题。
Ambroz Bizjak 2011年

好,谢谢。我会尝试(希望今天)它。过去当我试图远程运行时,Firefox一直很顽固...
Angel de Vicente

0

你的问题不是很清楚。如果您的意思是,您正坐在本地计算机L的前面并希望在远程计算机Rfirefox运行的X会话上运行,则可以执行以下操作:

从您的机器L使用ssh 登录到远程机器R

ssh wife@remotemachine

搜索远程计算机上正在运行的X显示(显示对应于/tmp/.X11-unix中的套接字):

ls -l /tmp/.X11-unix/

以下是我案例中的结果:

srwxrwxrwx. 1 erik         erik         0 13. Jun 14:44 X0
srwxrwxrwx. 1 concubine    concubine    0 13. Jun 11:40 X1
srwxr-xr-x. 1 gdm          gdm          0 13. Jun 11:13 X1024
srwxrwxrwx. 1 gdm          gdm          0 13. Jun 16:17 X2
srwxrwxrwx. 1 wife         wife         0 13. Jun 16:25 X3

我想在她的展示上向我的妻子展示一些东西,因此我这样做:

export DISPLAY=:3

这对应于套接字X3

之后我跑了:

firefox 'http://superuser.com/a/1088747/180675'

向她展示这个有趣的答案。

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.