在尝试在Centos(Rhel 7.5)上运行Google Chrome时,出现无法打开X显示的问题。

47

我需要使用SSH在虚拟机上远程运行Google Chrome。我不想使用xforwarding - 我想利用虚拟机上可用的GPU。当我尝试运行google-chrome时,出现以下错误:

[19615:19615:0219/152933.751028:ERROR:browser_main_loop.cc(1512)] Unable to open X display.

我尝试将DISPLAY环境变量设置为不同的值:

export DISPLAY=localhost:0.0
export DISPLAY=127.0.0.1:0.0
export DISPLAY=:0.0

我也尝试将上面示例中的0.0替换为不同的值。

在/etc/ssh/sshd_config中,我有ForwardX11 no,我尝试像这样设置目标:

systemctl isolate multi-user.target

当我尝试运行sudo lshw -C display时,我得到以下输出:
   *-display
       description: VGA compatible controller
       product: Hyper-V virtual VGA
       vendor: Microsoft Corporation
       physical id: 8
       bus info: pci@0000:00:08.0
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: vga_controller bus_master rom
       configuration: driver=hyperv_fb latency=0
       resources: irq:11 memory:f8000000-fbffffff
  *-display UNCLAIMED
       description: VGA compatible controller
       product: GM204GL [Tesla M60]
       vendor: NVIDIA Corporation
       physical id: 1
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list
       configuration: latency=0
       resources: iomemory:f0-ef iomemory:f0-ef memory:41000000-41ffffff memory:fe0000000-fefffffff memory:ff0000000-ff1ffffff

我试图通过以下方式更新我的GPU驱动程序:

wget https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/tesla/375.66/nvidia-diag-driver-local-repo-rhel7-375.66-1.x86_64.rpm
yum -y install nvidia-diag-driver-local-repo-rhel7-375.66-1.x86_64.rpm

但是之后我仍然在我的NVIDIA GPU旁边看到UNCLIMED,有什么想法吗?


你正在尝试从另一台计算机启动谷歌浏览器,对吗? - Erwan Daniel
检查您是否有正在运行的 Xorg,它的端口为 6000+n(其中 n 是显示器编号)。 - Erwan Daniel
我正在尝试从我的计算机上的虚拟机启动Chrome。并且要明确的是,我不想使用X forwarding - 我想使用vm上可用的NVIDIA Tesla GPU。 - Liplattaa
基本问题,但很必要:你的虚拟机上跑着 Xorg 吗? - Erwan Daniel
4个回答

77

您可以尝试使用Xvfb。它不需要额外的硬件。

如果您尚未安装Xvfb,请先安装Xvfb并执行以下步骤。

sudo apt-get install -y xvfb

使“无界面”Chrome/Selenium工作所需的依赖:

sudo apt-get -y install xorg xvfb gtk2-engines-pixbuf
sudo apt-get -y install dbus-x11 xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic xfonts-scalable

可选但很方便:用于捕获Xvfb显示屏截图的方法:

sudo apt-get -y install imagemagick x11-apps

确保每次启动计算机/虚拟机时,Xvfb都能启动:

Xvfb -ac :99 -screen 0 1280x1024x16 &
export DISPLAY=:99

运行谷歌浏览器

google-chrome

太棒了 - 这在我使用的 Windows 和 WSL 2.0 以及 Ubuntu 上运行良好!你真是太棒了! - Ryan Wheale
解决了我在WSL 2 Ubuntu中无法使用Karma运行测试的问题。非常感谢。 - JoannaFalkowska
这个答案绝对需要被写入文档或其他地方。在所有其他答案都失败的情况下,安装虚拟屏幕解决了问题。 - Bigbob556677
拯救了代码...正在GCP计算引擎Debian11上工作 - Md. Parvez Alam
你需要 xorg 吗?这是第一篇文档,它说你需要它来运行无头的 Chromium。 - AlxVallejo

4

好的,小伙子们。我疯了两个小时后找到了我的问题。我的计算机配置正确。你不能从一个计算机通过ssh连接到另一个计算机,再连接到这台计算机,并期望X11转发正常工作。而不用拆开整个网络,我发现如果我从主计算机向该计算机进行shell操作(没有双重或三重ssh'ing),chrome可以像普通用户一样在CLI中启动。所以这是多个来自多个计算机的shell造成的显示器显示为设置为"NOTHING"的问题!手动设置显示器只会使问题更加复杂。一旦我直接从外部主机向这台计算机进行shell操作,我的显示就被设置为10:0,这是我配置中的第一个实例。不要犯这个错误,否则你将浪费宝贵的时间。


2

顺便提一下,我在使用SSH登录Docker组合堆栈中的Selenium Chrome节点时遇到了这个问题。如果我使用sudo -u seluser google-chromeroot身份调用它,Chrome会启动,但如果我以seluser身份登录,则不会启动。窍门是rootDISPLAY设置为:99:0,而seluser则没有设置。如果我明确设置它(无论是从seluser shell还是从docker compose exec命令行),它就可以工作。

$ docker-compose exec -u seluser \
  selenium-chrome \                 # or whatever your service is called
  /bin/bash
seluser@c02cda62b751:/$ export DISPLAY=:99:0
seluser@c02cda62b751:/$ google-chrome http://app.test:3000/home

或者

$ docker-compose exec -u seluser -e DISPLAY=:99:0 \
  selenium-chrome \
    google-chrome http://app.test:3000/home

不过,:99.0 是未记录的,如果这个方法不起作用,您可以尝试使用以下代码检查 rootDISPLAY 值:

docker-compose exec -u root selenium-chrome bash -c 'echo "${DISPLAY}"'

0

我在使用WSL和Ubuntu时遇到了同样的问题。我已经卸载/重置了Ubuntu。之后,我执行了以下命令:

wsl --set-default-version 2

然后我重新安装了Ubuntu,没有出现--no-sandbox或任何问题。

希望这对某些人有用。


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