Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bug#1055765: chromium: Error: Can't open display (armhf) while other platforms (amd64, arm64, i386) are OK

1,053 views
Skip to first unread message

Julien Neuhart

unread,
Nov 10, 2023, 4:00:05 PM11/10/23
to
Package: chromium
Version: 119.0.6045.105-1~deb12u1

Dear maintainers,

While building with QEMU a Docker image based on Debian bookworm using the chromium package, I found out that the « armhf » variant seems broken, which is not the case for others platforms.

Indeed, after having installed chromium with:
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends chromium

Running « chromium —version » failed on armhf (Error: Can't open display) while working as expected in others platform (amd64, arm64, i386).

Please note it is working fine in Debian 11 & package version 116.0.5845.180.

Full installation logs may be found here: https://github.com/gulien/chromium/actions/runs/6829257786

armhf:

Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
Kernel: Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct 6 13:20:44 UTC 2023 armv7l GNU/Linux
Architecture: armhf

chromium —version:
Error: Can't open display:

i386:

Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
Kernel: Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct 6 13:20:44 UTC 2023 x86_64 GNU/Linux
Architecture: i386

chromium —version:
find: '/root/.config/chromium/Crash Reports/pending/': No such file or directory
Chromium 119.0.6045.123 built on Debian 12.2, running on Debian 12.2

arm64:

Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
Kernel: Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct 6 13:20:44 UTC 2023 aarch64 GNU/Linux
Architecture: arm64

chromium --version:
find: '/root/.config/chromium/Crash Reports/pending/': No such file or directory
Chromium 119.0.6045.105 built on Debian 12.2, running on Debian 12.2

amd64:

Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
Kernel: Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct 6 13:20:44 UTC 2023 x86_64 GNU/Linux
Architecture: amd64

chromium --version:
find: '/root/.config/chromium/Crash Reports/pending/': No such file or directory
Chromium 119.0.6045.123 built on Debian 12.2, running on Debian 12.2

Thanks,

Julien

Andres Salomon

unread,
Nov 10, 2023, 4:10:06 PM11/10/23
to
Hi,

Can you please try other versions if possible?
119.0.6045.123-1~deb12u1 is currently in bookworm-security.
116.0.5845.180-1~deb12u1 is still in bookworm. It would be helpful to
know if this is a bookworm-specific regression, since it worked on
bullseye's 116, or something broken in general with chromium 119.

It looks like a version of 117 and 118 also successfully built for
armhf, as other option to try:
https://snapshot.debian.org/package/chromium/118.0.5993.70-1~deb12u1/
https://snapshot.debian.org/package/chromium/117.0.5938.149-1~deb12u1/

Julien Neuhart

unread,
Nov 11, 2023, 6:20:05 AM11/11/23
to
Hello Andres,

Thanks for the quick follow up.

So I’ve tested with Chromium 116.0.5845.180-1~deb12u1 and it works as expected on Debian 12.

Note that I also had to explicitly install the chromium-common package:
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends chromium-common="116.0.5845.180-1~deb12u1" chromium="116.0.5845.180-1~deb12u1"

Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
Kernel: Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct 6 13:20:44 UTC 2023 armv7l GNU/Linux
Architecture: armhf

chromium —version:
ind: '/root/.config/chromium/Crash Reports/pending/': No such file or directory
Chromium 116.0.5845.180 built on Debian 12.1, running on Debian 12.2

Andres Salomon

unread,
Nov 11, 2023, 4:00:06 PM11/11/23
to
Okay, so not distribution-specific. Between 116 and 119 there were a
considerable number of changes in the debian packaging, including
switching from clang-14 to clang-16 for build (done in
118.0.5993.117-1~deb12u1) and enabling NEON for armhf (done in
117.0.5938.132-1~deb12u1). My immediate suspicion is the NEON change,
so it would helpful if you could try those versions as well and report
back. Also, if it turns out to be the NEON change, having the output of
`uname -a` and `cat /proc/cpuinfo` (inside of qemu's armhf emulation)
would be helpful.

On Sat, Nov 11 2023 at 12:08:42 PM +01:00:00, Julien Neuhart

Julien Neuhart

unread,
Nov 12, 2023, 2:30:05 AM11/12/23
to
Could you guide me on how ton install those versions? As far as I know, they are not available in bookworm directly. Thanks!

Andres Salomon

unread,
Nov 12, 2023, 3:20:05 AM11/12/23
to
Probably the easiest way is to manually download the chromium and
chromium-common deb packages, and then 'sudo apt install
/path/to/chromium_117.x.y.z-1~deb12u1_armhf.deb
/path/to/chromium-common_117.x.y.z-1~deb12u1_armhf.deb'.

If you go to
https://snapshot.debian.org/package/chromium/117.0.5938.149-1~deb12u1/
in your browser, scroll down to the "chromium 117.0.5938.149-1~deb12u1"
section, and then click on the link for
"chromium_117.0.5938.149-1~deb12u1_armhf.deb" (or right click and click
'save link as', or copy the link and supply it to wget/curl in the qemu
environment), it should download it. Do the same thing in the
"chromium-common 117.0.5938.149-1~deb12u1" section.

https://snapshot.debian.org/package/chromium/118.0.5993.70-1~deb12u1/
has more armhf deb packages, if the 117 packages aren't broken in your
test. Unfortunately it looks like 118.0.5993.117-1 never successfully
built for armhf on debian 12..



On Sun, Nov 12 2023 at 08:20:36 AM +01:00:00, Julien Neuhart

Julien Neuhart

unread,
Nov 13, 2023, 2:40:05 PM11/13/23
to
I’ve been able to reproduce the issue (e.g., Can’t open display) with versions 117.0.5938.149-1~deb12u1 and 118.0.5993.70-1~deb12u1.

uname -a:
Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct 6 13:20:44 UTC 2023 armv7l GNU/Linux

cat /proc/cpuinfo:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 106
model name : Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
stepping : 6
microcode : 0xffffffff
cpu MHz : 2793.437
cache size : 49152 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 21
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap clflushopt avx512cd avx512bw avx512vl xsaveopt xsavec xsaves md_clear
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit mmio_stale_data gds
bogomips : 5586.87
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 106
model name : Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
stepping : 6
microcode : 0xffffffff
cpu MHz : 2793.437
cache size : 49152 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 21
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgs
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit mmio_stale_data gds
bogomips : 5586.87
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:

Andres Salomon

unread,
Nov 13, 2023, 4:10:05 PM11/13/23
to
Control: found -1 117.0.5938.149-1~deb12u1

Thanks. More questions below:



On Mon, Nov 13 2023 at 08:28:41 PM +01:00:00, Julien Neuhart
<neuhart...@gmail.com> wrote:
> I’ve been able to reproduce the issue (e.g., Can’t open display)
> with versions 117.0.5938.149-1~deb12u1 and 118.0.5993.70-1~deb12u1.
>
> uname -a:
> Linux buildkitsandbox 6.2.0-1015-azure #15~22.04.1-Ubuntu SMP Fri Oct
> 6 13:20:44 UTC 2023 armv7l3 GNU/Linux


Okay, this looks fine. You're running qemu on an Ubuntu x86 host, so
inside the VM it sees the Ubuntu kernel but as an armv7l architecture.
Chromium's startup script should run `uname -m`, see 'armv7l', and do
its 32-bit ARM checks.


>
> cat /proc/cpuinfo:
> processor : 0
> vendor_id : GenuineIntel
> cpu family : 6
> model : 106
> model name : Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz


Wait, what? Qemu doesn't bother to change /proc/cpuinfo for the VM, so
it's going to think it's running an x86 CPU?



> stepping : 6
> microcode : 0xffffffff
> cpu MHz : 2793.437
> cache size : 49152 KB
> physical id : 0
> siblings : 2
> core id : 0
> cpu cores : 2
> apicid : 0
> initial apicid : 0
> fpu : yes
> fpu_exception : yes
> cpuid level : 21
> wp : yes
> flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
> cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb
> rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq
> ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c
> rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti
> fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq
> rdseed adx smap clflushopt avx512cd avx512bw avx512vl xsaveopt xsavec
> xsaves md_clear
> bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds
> swapgs taa itlb_multihit mmio_stale_data gds


Ugh, nor does it change cpu flags. The chromium script
(/usr/bin/chromium) should've errored out with a message about NEON
once it saw that the flags it needed in /proc/cpuinfo weren't present.
So there's two problems here.

Can you please run `bash -x /usr/bin/chromium --version` and provide
the output from that? Something's going wrong there. What *should* be
happening is that you should be seeing the message:

"The hardware on this system lacks support for NEON SIMD extensions.
We now require NEON or equivalent architecture extensions on ARM-based
machines. See
https://lists.debian.org/debian-devel/2023/09/msg00175.html
for more information."

Instead, it seems to be going ahead and launching chromium, which is
likely then getting confused for other reasons. Feel free to use the
latest available version of chromium for that test, you don't need to
stick with 117 or whatever.

Now, there's also the separate question of what qemu's armhf emulation
actually supports. It looks like, according to
https://www.qemu.org/docs/master/system/qemu-cpu-models.html , you're
running qemu in "Host passthrough" mode. That shouldn't work with
chromium unless you modify /usr/bin/chromium to not check for
NEON/ASIMD, and even then will probably have issues. I only see x86 and
mips documented on that page, but I would suggest running qemu with
something like "-cpu cortex-a15".
>

Julien Neuhart

unread,
Nov 14, 2023, 7:50:05 AM11/14/23
to
Please find below the output of ‘bash -x /usr/bin/chromium —version’ (latest chromium version on armhf):

bash -x /usr/bin/chromium --version:
+ APPNAME=chromium
+ GDB=/usr/bin/gdb
+ LIBDIR=/usr/lib/chromium
+ BUILD_DIST=12.2
+ nosse3='The hardware on this system lacks support for the sse3 instruction set.
The upstream chromium project no longer supports this configuration.
For more information, please read and possibly provide input to their
bug tracking system at http://crbug.com/1123353'
+ case `uname -m` in
++ uname -m
+ noneon='The hardware on this system lacks support for NEON SIMD extensions.
We now require NEON or equivalent architecture extensions on ARM-based
for more information.'
+ case `uname -m` in
++ uname -m
+ grep -q 'neon\|asimd' /proc/cpuinfo
+ xmessage 'The hardware on this system lacks support for NEON SIMD extensions.
We now require NEON or equivalent architecture extensions on ARM-based
for more information.'
Error: Can't open display: 


Regarding QEMU, I’m a bit out of my depth to be honest.
Most of it is abstract to me, as I’m using a Docker buildkit which itself is relying on QEMU (as far as I know).

More precisely, I’m relying on this https://github.com/docker/setup-qemu-action GitHub Action, which itself relies on https://github.com/tonistiigi/binfmt to do the magic.

This repository seems to configure a custom version of QEMU (for instance, by applying patches) and configure it using:

set -x
./configure \
  --prefix=/usr \
  --with-pkgversion=$QEMU_VERSION \
  --enable-linux-user \
  --disable-system \
  --static \
  --disable-brlapi \
  --disable-cap-ng \
  --disable-capstone \
  --disable-curl \
  --disable-curses \
  --disable-docs \
  --disable-gcrypt \
  --disable-gnutls \
  --disable-gtk \
  --disable-guest-agent \
  --disable-guest-agent-msi \
  --disable-libiscsi \
  --disable-libnfs \
  --disable-mpath \
  --disable-nettle \
  --disable-opengl \
  --disable-pie \
  --disable-sdl \
  --disable-spice \
  --disable-tools \
  --disable-vte \
  --disable-werror \
  --disable-debug-info \
  --disable-glusterfs \
  --cross-prefix=$(xx-info)- \
  --host-cc=$(xx-clang --print-target-triple)-clang \
  --host=$(xx-clang --print-target-triple) \
  --build=$(TARGETPLATFORM= TARGETPAIR= xx-clang --print-target-triple) \
  --cc=$(xx-clang --print-target-triple)-clang \
  --extra-ldflags=-latomic \
  --target-list="$QEMU_TARGETS »


Andres Salomon

unread,
Nov 14, 2023, 1:10:08 PM11/14/23
to
Ah, so the "Can't open display" error is coming from xmessage, *not*
chromium. I should fix that.

As far as qemu, I'd suggest filing a bug on that binfmt project to not
use passthrough mode; I'm not sure if it should be something
decided/set at build time, or if there's a way to get commandline
arguments to qemu when executing binaries using the kernel's binfmt
interface. Either way, that seems like something to discuss with the
project author.

And for your purposes, if you want to just get the chromium version,
you can skip the wrapper in /usr/bin and run
`/usr/lib/chromium/chromium --version` instead. It won't be exactly the
same output, but it will give you the version.
0 new messages