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

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

我正在运行 Firefox,在命令行中我只需输入以下内容就可以打开一个新选项卡:

firefox http://stackoverflow.com

我试图实现的功能类似,但是是远程的。我在机器 B 上运行 Firefox。从机器 AI 希望能够运行(在设置所需的 ssh 隧道或类似功能后)类似以下操作:

firefox http://stackoverflow.com

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

有任何想法吗?

答案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 方法更容易保证安全。

答案2

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

从你的机器大号登录到远程机器R使用 ssh:

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'

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

相关内容