"Error: write EINVAL" from every WebdriverIO worker on Ubuntu 26.04
ubuntu-latest is moving from Ubuntu 24.04 to 26.04 between October 19 and November 19, 2026 (what else changes). The xvfb package goes from 2:21.1.12 to 2:21.1.22 (Ubuntu's package list, November 4). WebdriverIO v9 starts each worker as xvfb-run ... node with its IPC channel on file descriptor 3, and the 26.04 xvfb-run does not keep that descriptor open for the command it runs. The worker's first message to the launcher fails, and no spec starts (webdriverio #15685).
What it looks like
[0-0] Error: write EINVAL [0-0] at target._send (node:internal/child_process:878:20) [0-0] at target.send (node:internal/child_process:751:19) [0-0] at file:///home/runner/work/app/app/node_modules/@wdio/local-runner/build/run.js:18:11 Spec Files: 0 passed, 3 failed, 3 total (100% completed) in 00:00:05
Every worker fails the same way within seconds, so the run reports every spec file as failed without a single test result. WebdriverIO's own Jasmine boilerplate hit it on its first runs on 26.04 (jasmine-boilerplate #1566).
Who gets it
v9's local runner wraps workers in xvfb-run on Linux when there is no DISPLAY, and also when it sees a headless browser flag such as --headless (@wdio/xvfb). On a GitHub-hosted runner there is no DISPLAY, so the wrap happens for headless Chrome and Firefox, and for Appium and cloud capabilities that never use a local display at all.
Fix: update every @wdio package to 9.33.1
9.33.1 (November 3) keeps the IPC channel off the descriptor xvfb-run closes (webdriverio #16180). @wdio/local-runner pins @wdio/xvfb to its own version, so updating the runner brings the fix; keep all @wdio/* packages on the same version.
npm install --save-dev @wdio/cli@9.33.1 @wdio/local-runner@9.33.1
Add the framework, reporter and service packages you use to the same command. Two catches:
- npm's
latesttag still points to 9.32.0, which has the bug. 9.33.x is published under thev9tag, sonpm install @wdio/local-runner@latestand the "Latest" column ofnpm outdatedgive you 9.32.0. Name the version, or use@v9. - 9.33.1 also narrows the Node.js versions it supports to releases with the October 2026 CA store fix: 18.20.8, 20.20.2, 22.23.4 or later 22.x, 24.22.1 or later 24.x, and 26.12.1 or later (webdriverio #16218).
actions/setup-nodewithnode-version: 24gets a recent 24.x; a pinned older patch release does not satisfy it, and package managers that enforceenginesstop the install.
Workarounds without updating
- Headless suites: set
autoXvfb: falseinwdio.conf. Headless browsers need no X server, and the runner then starts workers with a plainfork. - Suites that need a display: start one before the runner, so
DISPLAYis set and workers are not wrapped. For example run the whole command underxvfb-run --auto-servernum npx wdio run wdio.conf.js, or startXvfb :99 -screen 0 1280x1024x24 &and setDISPLAY=:99. runs-on: ubuntu-24.04for the test job, until GitHub retires that image.
v10, in alpha on November 4, replaces @wdio/xvfb with @wdio/display-server, which fixes this according to the comments on webdriverio #15685.
Telling it apart
- The stack trace ends in
@wdio/local-runner/build/run.jsandSpec Files: 0 passedcomes within seconds: it is this. A spec that fails after the browser started is something else. - Your own scripts can hit the same thing: any Node.js program that spawns
xvfb-run node child.jswith an'ipc'entry instdiogetswrite EINVALon the child's firstprocess.sendon 26.04. The issue has a two-file reproduction;forkwithoutxvfb-runworks on both images. - Look at "Set up job": the Runner Image group shows the image. Until November 19 a re-run can land on 24.04 and pass, so a green re-run proves nothing.
Other 26.04 failures
- pg_dump 18 on Ubuntu 26.04: PostgreSQL on the image and from apt is 18, so dumps start with
SET transaction_timeout = 0and a PostgreSQL 16 service rejects them with "unrecognized configuration parameter". - Postgres never starts in Docker on Ubuntu 26.04: newer kernels such as 7.0.0-42 run container processes as
docker-default//&unconfined, so they cannot signal each other andgosuhangs at 100% CPU; reported on self-hosted runners so far. - "version `GLIBC_2.43' not found" after building on Ubuntu 26.04: glibc is 2.43, so binaries built there can need
GLIBC_2.42orGLIBC_2.43and fail to start on Ubuntu 24.04, Debian 13 and older; build releases on an older image and check the floor in CI. - Playwright on Ubuntu 26.04: Playwright 1.50 to 1.60 says it "does not support chromium on ubuntu26.04-x64".
- apt on Ubuntu 26.04: renamed and removed packages.
- "coreutils: unknown program": most core tools are uutils.
See failed jobs from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
Get it on JetBrains Marketplace
GitHub and GitHub Actions are trademarks of GitHub, Inc.; Ubuntu is a trademark of Canonical Ltd.; Node.js is a trademark of the OpenJS Foundation; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with, sponsored or endorsed by GitHub, Inc., Canonical, the OpenJS Foundation, the WebdriverIO project or JetBrains.
More: "The ubuntu-latest label will migrate to Ubuntu 26" · Playwright on Ubuntu 26.04 · GitHub Actions plugins for IntelliJ IDEA compared · 日本語