如何通过 SSH 启动有头(与无头)android 模拟器

How to boot headfull (vs headless) android emulator via SSH

提问人:the_prole 提问时间:12/25/2019 更新时间:6/22/2022 访问量:2109

问:

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

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
Linux Android模拟器 adb

评论

0赞 Philippe 6/18/2022
你是怎么做到的?你用过还是选项?ssh-X-Y

答:

0赞 Technologeeks 6/18/2022 #1

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

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

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

您可以尝试 X-window 显示远程处理 -

导出显示=0:0

并假设您在 Window 会话上允许显示远程处理 (xhost +),则模拟器窗口将在那里弹出。顺便说一句,iptables/netfilter 可能会阻止它,因此请尝试使用/不使用,然后添加特定规则(如果内存可用,则为 TCP 6000)

请注意,虽然这有效,但“xhost +”被认为是不好的做法(因为它允许 GUI 会话劫持)。此外,如果你是 SSHing,那么你将无法真正看到 GUI(除非你在另一个 Linux 上,在这种情况下,你 sshing 的主机上的 DISPLAY=IP_youre_SSH_ing_from:0 和 xhost + 实际上会让你得到一个远程显示)。

0赞 Diego Torres Milano 6/20/2022 #2

确切地说,从何处开始会话并不重要,重要的是环境变量包含的值,该值指示仿真器将用于显示窗口以及接收鼠标和键盘事件的 XWindows 显示。DISPLAY

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

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

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