尽管登录远程作为根用户, 我想要远程运行我的硒程序ROOT的显示(而不是我的远程显示器)。我是不是谈论做ssh -X
(有效),但是我有一个nodejs应用程序生成另一个使用selenium的nodejs应用程序,所有这些都是自动的,无需任何用户ssh'ing。但是 selenium 需要使用某种显示器来渲染我需要的一些 jpg 文件。
我一直在研究很多问题,但我仍在努力解决这个概念......我一直使用的主要信息来源是:
- 在远程 X 显示器上打开窗口(为什么“无法打开显示器”)?(这个信息最多)
- 我可以以 root 身份在另一个用户的桌面上启动图形程序吗?
- 所有答案均来自 @Gilles :)
这是我的理解:
- 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
)。
- 要使用的 Magic Cookie 是在
=====================
尝试
我已经尝试过所有这些事情:
设置
$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
- 设置,但我认为这仅适用
X11Forwarding yes
于/etc/ssh/sshd_config
ssh -X
这是我打开 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 的显示。