Answers:
在Firefox将运行和显示的机器上(机器A),您需要:
例如,在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方法更容易保护。
你的问题不是很清楚。如果您的意思是,您正坐在本地计算机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'
向她展示这个有趣的答案。