如何通过SSH启动有界面(headfull)的Android模拟器(与无头headless相对应)

17

通过远程查看器 VNC,我可以在远程机器上启动 Android 模拟器。

emulator -avd emu1 
但是通过远程机器上的SSH,我遇到了错误。
emulator: INFO: QtLogger.cpp:68: Warning: could not connect to display  ((null):0, (null))


emulator: INFO: QtLogger.cpp:68: Info: Could not load the Qt platform plugin "xcb" in "/opt/androidtest/android-sdk/emulator/lib64/qt/plugins" even though it was found. ((null):0, (null))


Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.
 ((null):0, (null))
emulator: INFO: QtLogger.cpp:68: Fatal: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.
 ((null):0, (null))

但是,如果我通过SSH无头方式启动模拟器,则模拟器会启动

emulator -avd emu1 -no-window

你是如何进行 ssh 的连接的?你使用了 -X 还是 -Y 选项? - Philippe
2个回答

0

当您通过SSH连接时,您处于命令行会话中,与UI分离。因此,没有与显示器的链接,这就是此处显示的错误:

emulator: INFO: QtLogger.cpp:68: Warning: could not connect to display  ((null):0, (null))

当您在VNC中时,模拟器可以轻松连接到本地显示。

您可以尝试X窗口显示远程-

导出DISPLAY = 0:0

并假设您已经允许了显示重定向(xhost +)在Window会话上,那么模拟器窗口将在那里弹出。iptables / netfilter可能会阻止此操作,请尝试使用/不使用,然后添加特定规则(如果记忆无误,则为TCP 6000)

请注意,虽然这样可以工作,但“xhost +”被认为是不良实践(因为它允许GUI会话劫持)。另外,如果您正在SSH,则实际上无法看到GUI(除非您在另一个Linux上,在这种情况下,DISPLAY = IP_youre_SSH_ing_from:0和主机上的xhost +您从ssh'ing将实际为您提供远程显示)。


0

准确来说,会话的起始位置并不重要,而是 DISPLAY 环境变量所包含的值,它指示模拟器将使用哪个 XWindows 显示器来显示窗口并接收鼠标和键盘事件。

然后,您可以从 SSH 或 VNC 开始会话,并将 DISPLAY 环境变量设置为指向您可以访问的 X 服务器。

客户端程序(在本例中为模拟器)通过检查 DISPLAY 环境变量来知道连接到哪个显示器。

此外,正如一些评论中提到的那样,可以使用 ssh -Xssh -Y 来启用 X11 转发。在这种情况下,您可以验证 DISPLAY 环境变量如何自动设置以转发显示器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接