Skip to content

Fix Google Chrome ARM64 Errors on Raspberry Pi

Google's official google-chrome-stable_current_arm64.deb is now available, but it requires a 64-bit ARM userspace and a valid Debian package. This guide diagnoses installation, startup, repository, profile, and Sync failures without substituting an AMD64 package or an untrusted mirror.

For the normal installation path, use the Google Chrome ARM64 install and Sync guide. Return here only when a specific step fails.

Error-to-fix table

Error or symptom Likely cause First check
HTTP 404 for ARM64 .deb Package endpoint temporarily unavailable or copied URL is wrong curl -I -L official URL
package architecture (arm64) does not match system (armhf) 32-bit Raspberry Pi OS userspace dpkg --print-architecture
package architecture (amd64) Wrong x86-64 package downloaded dpkg-deb -f ... Architecture
Unsupported file ... given on commandline Old APT syntax/version or corrupt file file and dpkg-deb --info
Unmet dependencies Package state or repositories not updated sudo apt --fix-broken install
Chrome opens then closes Profile, display backend, library, storage, or sandbox error Launch from terminal
“Profile in use” Stale lock or profile open elsewhere Check processes before touching locks
Gmail login works but Sync does not Website login confused with Chromium profile Sync Confirm browser/product name
Chrome does not update Repository/keyring configuration missing or disabled apt policy google-chrome-stable

Collect a safe diagnostic block

Run this before changing packages:

{
  date --iso-8601=seconds
  cat /proc/device-tree/model
  cat /etc/os-release
  uname -m
  dpkg --print-architecture
  getconf LONG_BIT
  apt policy google-chrome-stable chromium firefox
  df -h /
  free -h
  echo "session=${XDG_SESSION_TYPE:-unknown}"
} | tee "$HOME/chrome-arm64-diagnostics.txt"

Review the file before sharing it. Remove usernames, hostnames, repository credentials, or other identifiers that may appear in your environment.

Verify the official download before installing

Use Google's direct URL exactly:

chrome_url=https://dl.google.com/linux/direct/google-chrome-stable_current_arm64.deb
curl -I -L "$chrome_url"

Continue only when the final response is HTTP 200. Download with failure handling:

curl -fL "$chrome_url" -o google-chrome-stable_current_arm64.deb

Prove that the response is a Debian package rather than an HTML error page:

1
2
3
4
file google-chrome-stable_current_arm64.deb
dpkg-deb --info google-chrome-stable_current_arm64.deb | head -30
dpkg-deb -f google-chrome-stable_current_arm64.deb \
  Package Version Architecture Maintainer

Expected package and architecture are google-chrome-stable and arm64. Version changes with releases. Do not compare only the filename.

Fix HTTP 404 or download failures

1
2
3
curl -vI -L "$chrome_url"
date
getent hosts dl.google.com

Check:

  1. The URL uses https://dl.google.com/linux/direct/.
  2. System time is correct enough for TLS validation.
  3. DNS and HTTPS work without an intercepting captive portal.
  4. The final response after redirects is inspected.
  5. The official Chrome download page offers the expected architecture.

If the official endpoint returns 404, wait or use Raspberry Pi OS Chromium/Firefox. Do not change arm64 to amd64, remove curl -f, or download a browser package from an unknown mirror.

Fix ARMHF architecture mismatch

Check all three layers:

1
2
3
uname -m
dpkg --print-architecture
getconf LONG_BIT

For Chrome ARM64, the expected results are typically:

1
2
3
aarch64
arm64
64

uname -m can show a 64-bit-capable kernel/CPU while Debian userspace remains armhf. The package manager's architecture is decisive. Do not force installation with --force-architecture; install a supported 64-bit Raspberry Pi OS image after backing up and planning migration.

Reject an AMD64 package

Google's long-standing x86-64 filename contains amd64. It does not run natively on Raspberry Pi ARM64:

dpkg-deb -f google-chrome-stable_current_amd64.deb Architecture

If output is amd64, do not install it. Emulation adds complexity and is inappropriate for a daily browser holding session tokens and passwords.

Repair interrupted package installation

First inspect, then repair Debian package state:

1
2
3
4
sudo dpkg --audit
sudo apt update
sudo apt --fix-broken install
sudo apt install ./google-chrome-stable_current_arm64.deb

Use apt install ./file.deb, not only dpkg -i, so APT can resolve dependencies. If a dependency is unavailable, confirm that Raspberry Pi OS release repositories are enabled and that the system is not mixing Debian releases.

Inspect sources without publishing private repository credentials:

grep -RhsE '^[[:space:]]*deb ' /etc/apt/sources.list /etc/apt/sources.list.d/
apt-cache policy

Do not add random Ubuntu or another Debian release's repository to satisfy one library.

Chrome installs but will not start

Launch from a terminal and capture stderr:

google-chrome-stable 2>&1 | tee "$HOME/chrome-startup.log"

Also inspect user-session logs:

journalctl --user -b --no-pager | tail -200

Check the executable and library resolution:

1
2
3
command -v google-chrome-stable
readlink -f "$(command -v google-chrome-stable)"
ldd /opt/google/chrome/chrome | grep 'not found' || true

If a library is missing, repair packages through APT. Do not copy shared libraries manually into /usr/lib.

Distinguish Wayland and X11 problems

1
2
3
echo "$XDG_SESSION_TYPE"
echo "$WAYLAND_DISPLAY"
echo "$DISPLAY"

Test one backend for diagnosis, not as a permanent blind workaround:

google-chrome-stable --ozone-platform=wayland
google-chrome-stable --ozone-platform=x11

If one works, record Raspberry Pi OS, desktop compositor, Chrome version, GPU state, and log. Remove copied flags after the underlying issue is fixed; backend options can change across Chrome releases.

Do not use --no-sandbox as a fix

The Chrome sandbox is a security boundary. If an error mentions sandbox permissions, verify package ownership and mode:

dpkg -V google-chrome-stable
stat /opt/google/chrome/chrome-sandbox

Reinstall the official package if files differ unexpectedly:

sudo apt install --reinstall google-chrome-stable

Do not create a desktop launcher with --no-sandbox, especially for normal web browsing.

Fix a locked or damaged profile safely

First stop Chrome and confirm no process remains:

pkill -TERM -x chrome 2>/dev/null || true
pgrep -a -f '/opt/google/chrome|google-chrome'

Do not remove lock files while another Chrome process uses the profile. Test with a temporary empty profile that does not overwrite the existing one:

temporary_profile=$(mktemp -d)
google-chrome-stable --user-data-dir="$temporary_profile"

If the temporary profile works, export bookmarks and confirm Sync/recovery before changing the original profile. Browser profiles contain cookies, tokens, history, extensions, and possibly locally stored passwords; back them up securely.

Fix Google Sync confusion

Confirm which browser is running:

google-chrome-stable --version
chromium --version 2>/dev/null || true
  • Signing into Gmail is a website login.
  • Signing into the Chrome browser profile enables Chrome Sync when supported.
  • Raspberry Pi OS Chromium does not gain private Chrome Sync APIs from a Google website login.

Google documents current profile behaviour in How sign-in with your Google Account works in Chrome. Do not inject copied OAuth keys into Chromium; Google restricted private Chrome APIs for third-party Chromium builds in 2021.

Fix Chrome update problems

Inspect the installed version, candidate, and repository files:

1
2
3
4
google-chrome-stable --version
apt policy google-chrome-stable
grep -RhsE 'dl\.google\.com.*chrome' /etc/apt/sources.list.d/
ls -l /etc/apt/keyrings /usr/share/keyrings 2>/dev/null | grep -i google

Then update through APT:

sudo apt update
sudo apt install --only-upgrade google-chrome-stable

Read the exact APT error. Do not bypass an expired/missing signing key with unauthenticated package options.

Video or GPU performance is poor

Confirm the browser and rendering report at chrome://gpu. Save the Chrome version, Raspberry Pi model, OS, display backend, monitor resolution, codec, and video resolution.

Measure instead of assuming hardware decode:

1
2
3
pidstat -p ALL 1
vcgencmd measure_temp
vcgencmd get_throttled

Use the Chrome/Chromium/Firefox benchmark guide for controlled startup, memory, page-load, and video tests. Do not enable undocumented flags from old guides without a rollback.

Diagnostic result template

Field Result
Raspberry Pi model/RAM
Raspberry Pi OS release
Kernel architecture
Debian architecture
Chrome package/version/architecture
HTTP final status
Wayland or X11
Free storage/RAM
Exact error
Temporary profile result
Backend comparison
Fix and verification

FAQ

Why does the ARM64 filename return 404 sometimes?

Availability, rollout, copied URLs, network interception, or transient endpoint state can differ. Check the official endpoint and download page. Never replace it with AMD64 on Raspberry Pi.

Can I convert 32-bit Raspberry Pi OS to 64-bit in place?

A clean 64-bit image is the safer supported migration. Back up data, applications, service configuration, and recovery access, then test on separate storage.

Is --no-sandbox safe on a private network?

No. Web content and extensions remain untrusted even on a private LAN. Repair the official package and sandbox permissions.

Should I delete the whole Chrome profile when it will not start?

No. Test with a temporary profile first. Preserve the existing profile until bookmarks, credentials, and Sync state are understood.

Why can I sign into Google but not see Chrome Sync in Chromium?

Website authentication and browser-profile Sync are separate. Use official Google Chrome ARM64 for Chrome Sync, or a supported Chromium alternative for each data type.