Skip to content

Mask console-getty.service to prevent multi-distro failures (#13595)#14490

Open
benhillis wants to merge 3 commits intomasterfrom
copilot/fix-mask-getty-services
Open

Mask console-getty.service to prevent multi-distro failures (#13595)#14490
benhillis wants to merge 3 commits intomasterfrom
copilot/fix-mask-getty-services

Conversation

@benhillis
Copy link
Member

When multiple WSL distros run concurrently, /dev/tty devices are shared at the VM level. The second distro's console-getty.service fails because the tty is already held by the first, causing systemd to report failed units and triggering user@UID.service failures.

Mask console-getty.service during WSL systemd unit generation, similar to the existing masking of networkd-wait-online. This service provides no value in WSL since users don't connect to the underlying tty.

Fixes #13595

When multiple WSL distros run concurrently, /dev/tty devices are shared
at the VM level. The second distro's console-getty.service fails because
the tty is already held by the first, causing systemd to report failed
units and triggering user@UID.service failures.

Mask console-getty.service during WSL systemd unit generation, similar
to the existing masking of networkd-wait-online. This service provides
no value in WSL since users don't connect to the underlying tty.

Fixes #13595
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Masks console-getty.service during WSL systemd unit generation to prevent failures when multiple WSL distros run concurrently and share VM-level /dev/tty devices.

Changes:

  • Mask console-getty.service by generating a /dev/null symlink unit, similar to existing masking behavior.
  • Add a Windows unit test asserting console-getty.service is masked via systemctl status.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
src/linux/init/init.cpp Adds masking for console-getty.service during systemd unit generation.
test/windows/UnitTests.cpp Adds a unit test check that console-getty.service reports as masked.

Comment on lines +228 to +232
// Validate that console-getty.service is masked (tty devices are shared at VM level across distros).
auto [outGetty, ___] =
LxsstuLaunchWslAndCaptureOutput(L"systemctl status console-getty.service | grep -iF Loaded:");

VERIFY_ARE_EQUAL(outGetty, L" Loaded: masked (Reason: Unit console-getty.service is masked.)\n");
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

systemctl status | grep Loaded: output is relatively brittle across systemd versions/distros (spacing/punctuation and the exact “Reason” text can vary). To make the test more stable, consider querying machine-readable properties instead (e.g., systemctl show -p LoadState -p UnitFileState console-getty.service) and asserting on masked/LoadState=masked rather than an exact formatted status line.

Copilot uses AI. Check for mistakes.
Comment on lines +229 to +231
auto [outGetty, ___] =
LxsstuLaunchWslAndCaptureOutput(L"systemctl status console-getty.service | grep -iF Loaded:");

Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The placeholder name ___ is unclear. Prefer a conventional unused name like ignored, or avoid introducing a named variable by using an approach that explicitly discards the second return value (e.g., assign to a named ignored variable and mark it intentionally unused if needed).

Suggested change
auto [outGetty, ___] =
LxsstuLaunchWslAndCaptureOutput(L"systemctl status console-getty.service | grep -iF Loaded:");
auto [outGetty, ignored] =
LxsstuLaunchWslAndCaptureOutput(L"systemctl status console-getty.service | grep -iF Loaded:");
(void)ignored;

Copilot uses AI. Check for mistakes.
@dhtzs
Copy link
Contributor

dhtzs commented Mar 20, 2026

Should console-getty.service be added to the discouraged units list in validate-modern.py as well? (Similar to what was done in #14272)

@benhillis
Copy link
Member Author

Should console-getty.service be added to the discouraged units list in validate-modern.py as well? (Similar to what was done in #14272)

That's a really good call.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

WSL fails to load certain services when multiple WSL instances are running, and one of them is running as root

3 participants