Sound
FAQ › EUZOS Desktop › Sound · Nederlands
What is it?
EUZOS has its own driver for Intel High Definition Audio (PCI class 04:03), written from the HDA 1.0a specification. It plays the boot and login sounds, test tones, the volume tick and the key click of the on-screen keyboard, and gives Linux apps (Chromium) sound and microphone through its own ALSA kernel interface (/dev/snd). The volume is set with the speaker icon in the top bar, the volume keys or the sound console command.
Sound is x86-64 only and EUZOS Desktop only (on ARM64 sound says "only on x86-64"; EUZOS Server refuses the command, see Server console).
How do I…?
How do I change the volume?
Click the speaker icon in the top bar and drag the slider, use the volume keys of the keyboard, or type sound volume <0-100> in the console. All three set the same value. A new volume also cancels muting. sound volume without a number shows the current value (for example volume 80 % or volume 80 % (muted)).
How do I mute the sound?
sound mute toggles muting (it prints muted or no longer muted). The mute key on the keyboard does the same.
Which volume keys work?
- PS/2 (scancode set 1):
E0 30volume up,E0 2Evolume down,E0 20mute; many laptops send their Fn keys this way. - USB keyboards in the boot protocol: HID codes
0x80(Volume Up),0x81(Volume Down) and0x7F(Mute). - Not yet: the USB consumer page (
0xE9/0xEA/0xE2, used by most USB media keys) and Fn keys that go through ACPI (see docs/SOUND.md).
On a graphical screen a volume key shows the volume panel briefly (1.5 s); on the console only the volume changes.
How do I test whether the speakers work?
sound tone [hz] [ms] plays a sine tone (default 440 Hz for 1000 ms; range 20–20000 Hz and 1–60000 ms). sound stop stops playback. sound alone shows the controller, codec, widgets and the chosen output path.
How do I turn the boot sound off or choose another one?
sound boot off turns it off, sound boot on turns it on again, sound boot <variant> chooses one of sunrise, chord (the default) or bell (legacy Dutch names zonsopgang, akkoord, klok are still accepted). sound boot play [variant] plays it now. The choice is written to \EOS\FW\SOUND.TXT (legacy name GELUID.TXT, still read). boot off in that file turns off both the boot sound (at the login screen) and the login sound (sunrise, when the desktop appears).
How do I test the microphone?
sound capture [ms] records for the given time (default 2000 ms, range 10–30000 ms) and shows the level (peak and rms in dBFS) and frames per second. In the desktop: Settings › Camera and microphone › Test microphone (see Camera). While the microphone records, the red microphone label is shown in the bar.
Why does the key click or the volume tick not sound?
The tick (1 kHz, 30 ms, on releasing the slider and on every volume key) does not sound when muted or at 0 %. sound tick off turns it off until the next reboot. The key click of the on-screen keyboard is a profile setting (Settings › Keyboard › Key sound, see Input).
Why is there no speaker icon?
There is no sound card the driver can use (QEMU without intel-hda, ARM64, or only the HDMI/DP audio of the processor, which is skipped), or setting up the controller failed. sound shows why.
How do I start the sound driver again?
sound reset stops playback and capture, forgets the controller and sets it up again (it shows the info afterwards). Known limitation: the old DMA memory is left behind.
Details
- Lazy setup: like AHCI, the controller is set up on first use (
sound, a tone, the boot sound), not during boot. The boot sound runs on its own thread; booting does not wait for it. - Controller choice: the HDMI/DP audio of the processor (for example Haswell
8086:0a0c) is skipped and reported. PCI power state D0 via the PM capability, on Intel TCSEL = 0 and no-snoop off, interrupts off (the driver polls). - Commands to the codec: CORB/RIRB ring buffers; if the CORB does not answer, the immediate command interface.
- Playback: first output stream, 48 kHz 16-bit stereo, a 32 KiB ring in 8 BDL entries; the
soundthread fills the ring up to 64 ms ahead from the mixer and stops the stream after 3 s of silence. Jack detection only happens when playback starts (plugging in headphones while playing does not switch over;sound stopand playing again does). - Capture: input stream SD0, tag 2, 64 KiB ring; a plugged-in microphone jack takes precedence over the internal microphone. The first 250 ms after each start are silenced (the pop of digital microphones).
- The boot sounds are computed in
libs/hda/src/sound.rswith integers (no recorded audio):sunrise(G3-D4-G4-B4, 2.3 s),chord(Fmaj9, 2.2 s, default),bell(A4 and E5 on A3, 2.0 s). Peak at -6.3 dBFS. The variant names are English since 27-10-2026, inSOUND.TXTand on the console; the legacy Dutch names (zonsopgang,akkoord,klok) are still read. - Volume state lives apart from the controller (
VOLUME,MUTEDinkernel/src/hda.rs), default 80 %, linear in dB (0.4 dB per percent), until the reboot (planned: a profile setting). - ALSA for Linux apps:
/dev/snd/controlC0,/dev/snd/pcmC0D0p(playback, permissionPERM_SOUND) and/dev/snd/pcmC0D0c(capture, only with a microphone, permissionPERM_MICROPHONE: Chromium andrun +mic). FormatsS16_LE,S24_LE,S32_LE,FLOAT_LE; 1–2 channels; 8000 to 96000 Hz; the kernel converts and resamples to 48 kHz. Without a sound card there is no/dev/sndand Chromium has no sound. - A capture stream holds a privacy indicator handle (
privacy::begin(Kind::Microphone, …)), see Camera.
Reference
Console commands
| Command | Arguments | What it does |
|---|---|---|
sound | — | controller, codec(s), streams, widgets, outputs and paths, inputs (the chosen one marked [on]) |
sound tone | [hz] [ms] (20–20000, 1–60000; default 440 1000) | play a test tone; legacy alias toon |
sound volume | [0-100] (a trailing % is allowed) | show or set the volume; a new value cancels muting |
sound mute | — | toggle muting; legacy alias demp |
sound tick | on | off | the tick on a volume change, until the reboot; hidden aliases click (an older help text) and legacy tikje, aan, uit |
sound boot | — | show the boot sound setting and the variants |
sound boot | on | off | sunrise | chord | bell | write the setting to SOUND.TXT; legacy aliases opstart, aan, uit, zonsopgang, akkoord, klok |
sound boot play | [variant] | play a variant now; legacy alias speel |
sound capture | [ms] (10–30000, default 2000) | record and show the level (peak/rms dBFS, frames/s); legacy alias opname |
sound alsa | — | the open ALSA streams and whether the microphone is capturing |
sound stop | — | stop playback |
sound reset | — | stop everything and set up the controller again; hidden aliases again (an older help text) and legacy opnieuw |
run +mic <name> | start a test program with microphone permission (see Diagnostics) |
Legacy command name: geluid → sound. help shows the same wording as this table (tick on|off, reset).
Functions and modules
| Function / module | Role |
|---|---|
kernel::hda::command | the sound console command |
kernel::hda::boot_sound | play the boot sound once per boot (own thread) |
kernel::hda::login_sound | play sunrise when the desktop appears (called from desktop::start) |
kernel::hda::state / set_state / apply_volume | volume and mute state; apply to the amplifier |
kernel::hda::present | is there a usable sound card (no icon without) |
kernel::hda::tick / key_click | the volume tick; the on-screen keyboard click (8 ms, 2 kHz) |
kernel::hda::write_pcm / alsa_start / queued_frames / underruns | the link with ALSA playback |
kernel::hda::capture_start / capturing / meter_on / meter_take / meter_off | capture and the level meter (Test microphone) |
kernel::hda::microphones / has_microphone / input_name / codec_name | what Settings › Camera and microphone shows |
kernel::volume_button | the speaker icon, the slider panel, the volume keys (set, request_click, work) |
kernel::linux::snd | /dev/snd for Linux programs |
euzos_hda::codec, path, input, pcm (Mixer, Ring, Tone), verb | codec reading, output/input path choice, mixing, verbs (no hardware; tested on the Mac with make sound-test) |
euzos_hda::sound (Variant, Boot, parse_setting, setting_text) | the boot sounds and the SOUND.TXT format |
euzos_alsa (abi, params, stream, convert, ctl) | the ALSA ioctl ABI, hardware parameters, streams, conversion, mixer elements |
Config files
| File | Key | Values | Meaning |
|---|---|---|---|
\EOS\FW\SOUND.TXT (legacy name GELUID.TXT, still read) | boot (also boot=; legacy opstart) | off | on | sunrise | chord | bell (legacy uit, aan, zonsopgang, akkoord, klok) | boot and login sound off, on (default chord) or a variant; # is a comment; case does not matter; no line = on with the default |
Since 27-10-2026 EUZOS writes English config file names, keys, values and confirmation words (for example
WIPE-…,environment=inPROFILE.TXT); the old Dutch names (marked legacy here) are still read and accepted (docs/ENGLISH.md).
Protocol messages and formats
| Format | Description |
|---|---|
SOUND.TXT as written by sound boot | # EUZOS: the boot sound (boot off | boot sunrise|chord|bell) followed by boot <value>, CRLF line ends |
| ALSA PCM ioctls | PVERSION (2.0.14), INFO, HW_REFINE, HW_PARAMS, SW_PARAMS, PREPARE, START, DROP, DRAIN, PAUSE, RESET, XRUN, REWIND, FORWARD, HWSYNC, DELAY, STATUS, STATUS_EXT, WRITEI_FRAMES, READI_FRAMES, SYNC_PTR, mmap; access RW_INTERLEAVED/MMAP_INTERLEAVED |
/proc/asound/{cards,devices,pcm,version} | present for programs that look there |
EUZOS