尝试

尝试

尽管登录远程作为根用户, 我想要远程运行我的硒程序ROOT的显示(而不是我的远程显示器)。我是不是谈论做ssh -X(有效),但是我有一个nodejs应用程序生成另一个使用selenium的nodejs应用程序,所有这些都是自动的,无需任何用户ssh'ing。但是 selenium 需要使用某种显示器来渲染我需要的一些 jpg 文件。

我一直在研究很多问题,但我仍在努力解决这个概念......我一直使用的主要信息来源是:

这是我的理解:

  • X 程序需要两条信息才能连接到 X 显示。
    • $DISPLAY
      • 通常:0:1.
      • 当我实际转到笔记本电脑并查看 root 的显示(而不是远程 ssh'ing)时,将$DISPLAY设置为:0:1
    • $XAUTHORITY
      • 要使用的 Magic Cookie 是在~/.Xauthority环境变量中定义的$XAUTHORITY
      • 当我实际访问笔记本电脑(而不是远程 ssh'ing)时,设置$XAUTHORITY/tmp/xauth-0-_0(when $DISPLAY=:0) 或/tmp/xauth-0-_1(when $DISPLAY=:1)。

=====================

尝试

我已经尝试过所有这些事情:

  1. 设置$DISPLAY$XAUTHORITY通过脚本

    • 我有一个生成 Nodejs Selenium 应用程序的脚本。在运行 selenium 应用程序之前,我首先在脚本中导出这两个变量:

      if [ -e "/tmp/xauth-0-_0" ]
      then
        export DISPLAY=":0"
        export XAUTHORITY="/tmp/xauth-0-_0"
      elif [ -e "/tmp/xauth-0-_1" ]
      then
        export DISPLAY=":1"
        export XAUTHORITY="/tmp/xauth-0-_1"
      fi
      
      #Then run the nodejs selenium app
      node index.js
      
    • 当我使用此方法时出现的错误是Invalid MIT-MAGIC-COOKIE-1 key[10332:10332:0713/112221.602744:ERROR:browser_main_loop.cc(272)] Gtk: cannot open display: :0.0

  2. 设置,但我认为这仅适用X11Forwarding yes/etc/ssh/sshd_configssh -X
  3. 这是我打开 chrome 的其他尝试:

    [root@localhost test]# xauth list
    localhost:0  MIT-MAGIC-COOKIE-1  ....
    
    [root@localhost test]# export XAUTHORITY=/tmp/xauth-0-_0
    
    [root@localhost test]# export DISPLAY=localhost:0
    [root@localhost test]# google-chrome
    [10673:10673:0713/141603.418401:ERROR:browser_main_loop.cc(272)] Gtk: cannot open display: localhost:0
    
    [root@localhost test]# export DISPLAY=127.0.0.1:0
    [root@localhost test]# google-chrome
    [10859:10859:0713/141617.346302:ERROR:browser_main_loop.cc(272)] Gtk: cannot open display: 127.0.0.1:0
    

我使用的是 Fedora 23(服务器版)x86_64

答案1

如果您只需要 Selenium 的 X 显示,您还可以使用Xvfb(“虚拟帧缓冲区 X 服务器”)启动第二个独立的 X 服务器。该 X 服务器使用一块内存作为不可见的帧缓冲区,并且允许 selenium 假装它已连接到 X 服务器。

man Xvfb详细信息请参见,特别是。这例子部分。您可以在不启用授权的情况下启动它,因此任何人都可以连接到它。

请注意,这将不允许 3D 加速 (OpenGL),这是一个完全不同的蠕虫罐头。

一般来说,尝试接管另一个显示器,尤其是root已登录的显示器,是一种巨大的安全风险:连接到此显示器的任何人都可以捕获按键(和密码)、以 root 身份执行命令等。这就是为什么通常您不能这样做。

答案2

我得出的结论是这是不可能的:(

您必须在某个时间、某个地方有一个用户 ssh 才能使其工作。

没有用户,您就无法接管 root 的显示。

相关内容