我正在运行 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'
向她展示这个有趣的答案。