How To Get Linux On Chromebook

How To Get Linux On Chromebook

Reading time1 min
#Linux#Chromebook#Development#Crostini#Crouton#LinuxInstallation

Get Linux Running on Your Chromebook: Practical Guide for Engineers

Chromebooks aren’t just for web browsing and basic tasks—they're compact, reliable hardware, often with decent CPUs and SSDs. With the right configuration, they handle full Linux stacks for development, CI/CD pipelines, and lightweight self-hosted services.

Below: direct, tested methods to deploy Linux on a typical Chromebook without compromising security—plus one fallback (Crouton) for legacy devices.


Assess Hardware and Compatibility

Not every Chromebook shipped before ~2019 supports Crostini (the Chrome OS Linux container). Don’t waste time without checking:

  • Open Settings > Advanced > Developers (naming sometimes varies with OS version).
  • Look for “Linux development environment” or “Linux (Beta)”.
    • If Turn On is present, Crostini is supported out-of-the-box.
  • If not present: See Crouton section.

Note: Devices with ARM chips may run aarch64/armhf only. Not all software will be available as binaries.


Enabling Linux with Crostini

Linux via Crostini is a containerized Debian 11 environment running under Chrome OS’s security sandbox (no root access to host). Ideal for dev tooling and most GUI apps. Critically, no firmware or kernel changes required.

Steps:

  1. In Chrome OS settings, click Linux development environment > Turn On.
  2. Choose disk allocation (at least 8GB recommended for dev work).
  3. Complete setup. A Terminal window launches.

Immediately update and upgrade base packages:

sudo apt update && sudo apt upgrade -y

Gotcha: Default image is usually Debian 11. Other distros (Fedora, Ubuntu) aren’t officially supported in this container.


Essential Development Tooling

Performance is better when working in Crostini than using only web-based code. Install required tools as you would on any Debian box.

Example: Install Git, Node.js (LTS), VS Code

sudo apt install -y git curl
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
wget -O code.deb "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64"
sudo apt install -y ./code.deb
rm code.deb

Verify:

git --version
node --version
code --version

Known issue: Some GUI apps may have rendering quirks or menu glitches in Crostini due to the nested X server. Occasionally, Electron-based editors perform better than native ones.


File System Interop

Linux container mounts appear as Linux files in the Chrome OS Files app. Need to access a specific directory in Chrome OS?

  • Right-click the folder in Chrome OS Files > Share with Linux.
  • It appears under /mnt/chromeos/MyFiles inside the container.

Symlinks sometimes fail between Chrome OS and Crostini due to permissions; prefer using direct directory paths.


GUI Application Support

Crostini’s newer versions support X11 forwarding for Linux GUI apps. GIMP, VS Code, and even some IDEs (PyCharm, Android Studio) work acceptably.

Example, install GIMP:

sudo apt install -y gimp
gimp &

GIMP should appear in the OS launcher; some window focus issues occur with overlapping pop-up dialogs.


Docker in Crostini: Caveats & Quickstart

Docker works inside Crostini, but there are caveats:

  • No support for privileged containers or nested VMs. KVM is not exposed.
  • Systemd isn’t active; some services require manual start.

Install and test (container runs as your user):

sudo apt install -y docker.io
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

If you see:

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

Restart the terminal or launch a new one for group changes to apply.


Alternative: Crouton for Legacy Chromebooks

Crouton is deprecated, but remains necessary for unsupported hardware or anyone needing complete Linux desktop access (for example, kernel modules or access to /dev).

Risks:

  • Requires Developer Mode (switch at boot, wipes device).
  • Disables Verified Boot; weakens system security.
  • Chrome OS updates can break chroots.

Installation Quick Steps:

  1. Reboot to Developer Mode: Hold Esc + Refresh while pressing Power, then press Ctrl+D.

  2. Download Crouton script:

    wget https://goo.gl/fd3zc -O ~/Downloads/crouton
    
  3. Launch Chrome OS shell (Ctrl+Alt+T > shell):

    sudo sh ~/Downloads/crouton -r focal -t xfce
    

Switch between environments via keyboard shortcuts (Ctrl+Alt+Shift+Back and Ctrl+Alt+Shift+Forward on most models).

Tip: Backup /usr/local and your home directory before major Chrome OS version updates.


Comparison Table

MethodSecurity ModelPrivilegeNon-obvious LimitationsSuited For
CrostiniSandboxed containerUser/Root (in container)No direct hardware access; systemd limited; kernel lockedMainstream dev workflows, GUI apps, Docker (non-nested)
CroutonChroot (full root)Full root on chrootHost kernel disables some modules; reduced OS securityPower users, legacy devices, custom drivers
Full InstallBare metalFull rootFirmware risks; fragile updates; complex rollbackExperimental, advanced only

Non-Obvious Tips

  • Use Debian backports or nix to access more current packages (Debian stable is conservative).
  • Cron jobs require workarounds—no systemd timers by default in Crostini.
  • For cross-compiling (e.g., Rust, Go), mount external storage and explicitly set $GOPATH/$CARGO_HOME to avoid running out of container disk space.

Chromebooks with Crostini now support the majority of day-to-day engineering and development tasks. With some trade-offs (no custom kernel modules, systemd oddities), the platform offers a secure, reproducible Linux dev environment—without dual-booting or major risk.

For edge cases—kernel development, hardware access, unsupported models—crouton or full Linux install are fallback options. In most scenarios, Crostini is the pragmatic choice.

Questions about a particular toolchain, GPU acceleration, or CI/CD setup on Chromebooks? Comment with hardware details and target workload; real-world constraints are often the deciding factor.