Running Zed Editor on ARM Chromebooks (Mali G925 / Crostini) - Fragments & ReflectionsI recently a bought a Lenovo Chromebook 14, and wanted to run Zed on it.<br>This took me a little while, but I finally figured it out. So I decided to write a complete guide to getting Zed running on ARM-based Chromebooks with Mali GPUs inside Crostini (the ChromeOS Linux container) to help you out internet stranger.<br>Important note : This was tested on a Lenovo Chromebook 14 with an ARM Immortalis-G925 GPU running ChromeOS with Crostini (Debian Bookworm). Some of these tricks may work even better on non-ARM Chromebooks, some may not, your mileage may vary, so if you end up testing this out on your device and can confirm the steps you took to make it work, I’ll be happy to add your feedback into this blogpost.<br>You kinda can’t break / mess things up badly, but if you do, Claude for help and give this page as reference, it should be able to help you fix things.<br>TL;DR<br>If you just want the fix and already have an up-to-date Chrome OS system, and understand what these commands would do, in a nutshell this is all you have to run:<br># 1. Upgrade Mesa to get the Venus Vulkan driver<br>sudo apt install -t bookworm-backports mesa-vulkan-drivers mesa-utils libgl1-mesa-dri libegl-mesa0 libglx-mesa0 mesa-libgallium
# 2. Set your chromebook's display settings to 75% from system settings, then use the following display scaling (add to ~/.Xresources for persistence)<br>echo "Xft.dpi: 192" > ~/.Xresources<br>xrdb -merge ~/.Xresources
# 3. Launch Zed using the following command :<br>MESA_VK_WSI_DEBUG=sw WAYLAND_DISPLAY='' zed<br>But I’d recommend reading on for the full explanation and a more permanent setup with a bunch of quality of life improvements.<br>The Problem<br>When you install Zed on an ARM Chromebook running Crostini, you will hit one or more of these symptoms:<br>Zed does not launch at all , or crashes immediately<br>Zed launches but the window is tiny and stuck in a startup loop with icons flashing on/off<br>Zed launches with a blank/white window = the GPU is detected but nothing renders<br>Zed runs but is extremely slow = it fell back to full software rendering (llvmpipe)<br>The root cause is a chain of three issues:<br>Outdated Mesa drivers Debian Bookworm ships Mesa 22.3.6, which does not include the Venus driver needed for hardware-accelerated Vulkan inside Crostini’s virtio-gpu VM
Venus WSI bug Even with updated Mesa and the Venus driver working, its Vulkan Window System Integration (frame presentation) does not work correctly over X11/XWayland in Crostini
Display scaling mismatch ChromeOS scales the display before passing it to Crostini, causing DPI/resolution confusion
Step-by-Step Fix<br>Step 1: Enable GPU Support in Crostini<br>Open Chrome and navigate to:<br>chrome://flags/#crostini-gpu-support<br>Set it to Enabled , then restart ChromeOS.<br>Step 2: Upgrade Mesa via Backports<br>The default Mesa in Debian Bookworm (22.3.6) is too old. You need Mesa 25.x+ which includes the Venus virtual Vulkan driver for virtio-gpu:<br># Enable bookworm-backports<br>echo "deb http://deb.debian.org/debian bookworm-backports main" | sudo tee /etc/apt/sources.list.d/backports.list<br>sudo apt update
# Install updated Mesa<br>sudo apt install -t bookworm-backports \<br>mesa-vulkan-drivers \<br>mesa-utils \<br>libgl1-mesa-dri \<br>libegl-mesa0 \<br>libglx-mesa0 \<br>mesa-libgallium<br>Fully restart the Crostini VM after this, and not just the terminal.<br>Right-click the Terminal icon in the ChromeOS shelf and select “Shut down Linux”, then reopen it.<br>Step 3: Verify the GPU Is Detected<br>vulkaninfo --summary 2>&1 | grep -A5 "GPU0"<br>You should see:<br>GPU0:<br>deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU<br>deviceName = Virtio-GPU Venus (Mali-G925-Immortalis)<br>driverName = venus<br>If you still see only llvmpipe with PHYSICAL_DEVICE_TYPE_CPU, the Mesa upgrade did not take effect. Check your installed version:<br>dpkg -l mesa-vulkan-drivers | grep mesa<br>It should show 25.x.<br>Also verify OpenGL:<br>glxinfo | grep -i "opengl renderer"<br>Note: this may still show llvmpipe for OpenGL even though Vulkan works via Venus. That is apparently normal on ARM Chromebooks, and ChromeOS exposes only the Vulkan path through virtio-gpu on these devices, not virgl (the OpenGL path).<br>Step 4: Set ChromeOS Display Scaling to 75%<br>This is critical for sharp text rendering. Most ARM Chromebooks with premium displays have native panels of 2560x1600. By default, ChromeOS scales this down to 1920x1200 for Crostini, then upscales it back to the physical resolution causing blur.<br>Go to ChromeOS Settings > Device > Displays and set the display size slider to 75% (smallest / “Looks like 2560x1600”). This gives Crostini the full native pixel grid with zero upscaling.<br>Step 5: Set X11 DPI<br>At 2560x1600 on a 14” screen, the physical DPI is approximately 216 = 2 x 96. Set integer 2x scaling:<br>echo "Xft.dpi: 192" > ~/.Xresources<br>xrdb -merge ~/.Xresources<br>This persists across sessions automatically since Crostini sources ~/.Xresources at X11 startup.<br>Step 6: Launch Zed<br>MESA_VK_WSI_DEBUG=sw...