Mask console-getty.service to prevent multi-distro failures (#13595)#14490
Mask console-getty.service to prevent multi-distro failures (#13595)#14490
Conversation
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
There was a problem hiding this comment.
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.serviceby generating a/dev/nullsymlink unit, similar to existing masking behavior. - Add a Windows unit test asserting
console-getty.serviceis masked viasystemctl 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. |
|
Should |
That's a really good call. |
| // Mask console-getty.service since /dev/tty devices are shared at the VM level across all distros. | ||
| // When multiple distros are running, the second distro's getty fails because the tty is already held. | ||
| THROW_LAST_ERROR_IF(symlink("/dev/null", std::format("{}/console-getty.service", installPath).c_str()) < 0); |
There was a problem hiding this comment.
Did you consider masking the systemd-getty-generator instead? The console-getty.service is a dynamic unit created at startup time by that process. By masking the generator we save a few extra CPU cycles.
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