- Shell 100%
|
|
||
|---|---|---|
| 0.11.0-vendor.tar.gz | ||
| audiod-wiremix.toml | ||
| cargo-config.toml | ||
| doinst.sh | ||
| README.md | ||
| slack-desc | ||
| vendor.json | ||
| wiremix-0.11.0.tar.gz | ||
| wiremix.jpg | ||
| wiremix.SlackBuild | ||
wiremix + audiod - a console PipeWire mixer and Bluetooth audio hub
This package builds wiremix, a fast terminal (TUI) mixer for PipeWire, packaged to pair with audiod. Together they give you a complete, keyboard-driven audio and Bluetooth control surface that runs entirely in a virtual terminal - no X, no Wayland, no desktop required.
Boot to a console, log in on tty2, and you have: PipeWire running, Bluetooth
speakers and phones connected, several sources mixed together and sent to every
output at once, and a live mixer with volume sliders and peak meters - all from
text.
Table of contents
- What the combination gives you
- How wiremix and audiod fit together
- What wiremix is
- Requirements
- Building the package
- Installing
- First-time setup: the config file
- Using it on a tty - step by step
- Worked example: a party box on tty2
- Keybindings
- Command-line options
- Credits & license
What the combination gives you
audiod and wiremix have separate, complementary jobs. audiod runs and
manages the per-user PipeWire stack (and adds a Bluetooth "hub" layer);
wiremix is the mixer you drive it with. Put together on a console, you get:
-
A working PipeWire session in a bare tty. audiod brings up
pipewire,wireplumber, andpipewire-pulsein the right order for your console login, so audio is ready the moment you have a shell - no desktop needed. wiremix connects straight to it. -
One-command Bluetooth, from the terminal. With audiod's hub layer you scan a numbered list and connect a speaker or phone by number (
audioctl hub scan), pair a phone with a PIN in a bounded window (audioctl hub pair), and drive a connected phone's playback over AVRCP (audioctl hub play|pause|next|prev) - no MAC-typing, no GUI. -
Sound everywhere at once. audiod's combine sink (
audioctl hub combine) sums any number of sources and mirrors the result to every output - internal speakers, every HDMI port, and multiple Bluetooth speakers simultaneously. -
A live mixer for all of it. wiremix shows every sink, source, and stream with a volume slider, mute, default-device marker, and a peak meter, so you can balance the whole room - push a far Bluetooth speaker past 100%, trim an HDMI, mute what you want silent - and see audio flowing to each output.
The net effect is a console-native PipeWire + Bluetooth audio manager: speakers, phones, a multi-output mix, and a full mixer, all controlled with the keyboard from a text login.
How wiremix and audiod fit together
┌──────────────────────────────────────────────┐
│ audiod (elogind-driven session manager) │
│ • starts & supervises pipewire / wireplumber │
│ / pipewire-pulse for your login │
│ • hub layer via audioctl: │
│ - Bluetooth: scan, pair, connect, media │
│ - combine sink: sound to every output │
│ - network audio │
└───────────────────────┬──────────────────────┘
│ a running PipeWire instance,
│ present even on a bare tty
▼
┌──────────────────────────────────────────────┐
│ wiremix (your TUI mixer) │
│ • connects to that PipeWire instance │
│ • sinks / sources / streams, with sliders │
│ • set volume, mute, default, route; peaks │
└──────────────────────────────────────────────┘
audiod provides and manages the audio stack; wiremix is how you see and adjust it. audiod also creates the things wiremix then displays - the combine sink appears in wiremix as a selectable default output, each connected Bluetooth speaker as its own output with its own slider, and each phone or app streaming in as a playback stream.
What wiremix is
wiremix is a small, fast TUI mixer for PipeWire, written in Rust and
inspired by ncpamixer. It speaks to PipeWire directly through libpipewire, so
it needs no graphical session. Its tabs are:
- Playback - apps currently producing sound (browser,
mpv, a phone over Bluetooth). - Recording - apps capturing audio.
- Output - sinks: speakers, HDMI, Bluetooth speakers, and virtual sinks such
as audiod's
hub_combined. - Input - sources: microphones, line-in, Bluetooth mic.
- Configuration - device profiles.
Each row has a volume slider, mute toggle, a default marker, and an optional peak meter.
Requirements
- Slackware-current (built and tested on Slackware64-current, x86_64).
- audiod - https://forge.slackware.nl/rizitis/audiod. Recommended
companion: it manages the PipeWire stack for your session and provides the
audioctl hubBluetooth/combine commands used throughout this guide. - PipeWire -
pipewire,wireplumber,pipewire-pulse. - bluez with
bluetoothdrunning and a powered adapter, for the Bluetooth features (driven viaaudioctl hub). - Build-time:
rustandcargo(withcargo auditable),pkg-config, and the PipeWire headers. The SlackBuild builds fully offline from a vendored crate tarball.
Building the package
The SlackBuild expects, in its own directory:
wiremix-$VERSION.tar.gz- the wiremix source tarball.$VERSION-vendor.tar.gz- the pre-vendored crates (for an offline build).cargo-config.toml- points cargo at the vendored sources.wiremix.SlackBuild,slack-desc,doinst.sh,audiod-wiremix.toml.
Then build:
git clone https://forge.slackware.nl/rizitis/wiremix.git
cd wiremix
bash wiremix.SlackBuild
This runs cargo build --offline --release and produces a package in
/tmp:
/tmp/wiremix-0.11.0-x86_64-2_FRG.txz
The package installs:
/usr/bin/wiremix- the mixer binary./usr/share/wiremix/wiremix.toml- the stock config (not tuned for audiod)./usr/doc/wiremix-0.11.0/- upstream README, licenses, this SlackBuild, andwiremix.toml(tuned for audiod).
Installing
installpkg /tmp/wiremix-0.11.0-x86_64-2_FRG.txz
On install you'll see a reminder to copy the config into your home directory (next section).
First-time setup: the config file
wiremix reads its config from ~/.config/wiremix/wiremix.toml. The package ships
a ready-made one - copy it into place for your user:
mkdir -p ~/.config/wiremix
cp /usr/doc/wiremix-0.11.0/wiremix.toml ~/.config/wiremix/wiremix.toml
That config is tuned for the audiod hub and a console:
- starts on the output tab (you balance speakers, not per-app streams);
- enables peak meters so you can see audio reach every output;
- raises the volume ceiling and turns the guard off, so a distant Bluetooth speaker can be pushed past 100% to fill a room;
- uses a lighter 30 fps and keyboard-only input, ideal for a bare tty.
You can edit it freely; anything you don't set uses wiremix's built-in defaults.
Using it on a tty - step by step
Everything here is done as your normal user on a console (for example
tty2, with no X running). Switch to a free VT with Ctrl+Alt+F2 and log in.
1. Confirm the audio stack is up (audiod manages this):
audioctl status
# pipewire : running
# wireplumber : running
# pipewire-pulse : running
2. Confirm you hold the hub (needed for Bluetooth and combine):
audioctl hub status
# HUB_MODE : yes
# you : member (allowed); OWNER (holds card+BT)
3. Connect a Bluetooth speaker or phone - from the terminal:
audioctl hub scan
# Scanning for 8s...
# Found devices:
# 1) HONOR 400 Pro [CC:62:...] (paired)
# 2) BT Speaker [41:42:...] (paired)
# 3) AKAI ABTS-21H [F5:E2:...] (new)
# Connect which number (Enter to cancel)? 3
Pick a number to connect. Choosing an already-connected device offers to disconnect it. For a brand-new speaker, put it in pairing mode (blinking) first. To pair a phone with a PIN, open a pairing window instead:
audioctl hub pair # box is discoverable for ~120s; confirm on the phone
4. Mirror sound to every output:
audioctl hub combine # creates hub_combined and makes it the default sink
5. Open the mixer:
wiremix
You land on the output tab. You'll see hub_combined (marked default)
together with the internal speaker, the HDMI outputs, and any Bluetooth speakers
- each with its own slider and a live peak meter. Play something (a browser, or a phone streaming over Bluetooth) and watch every output's meter move together.
6. Balance the room: move between outputs with the arrow keys, adjust each
one's volume independently, mute what you want, and press d on hub_combined
if you ever need to re-assert it as the default. Press q to quit.
7. Control a connected phone without touching it:
audioctl hub play # or: pause | next | prev (AVRCP to the phone)
That's the whole loop - stack, Bluetooth, combine, mixer - done from a text login.
Worked example: a party box on tty2
A real session on an HP OMEN 16 running Slackware64-current, logged in on a bare
tty2 with no graphical environment at all:
- audiod started the full PipeWire stack at console-login time.
audioctl hub combinecreated hub_combined, set as the default sink.- A phone over Bluetooth and a local browser both played into it; the combine sink summed the two.
- The mix went to the internal Speaker, three HDMI outputs, and a Bluetooth speaker at the same time.
wiremixshowed it all live:hub_combined (party mix → all speakers)marked default, each output with its own slider (Speaker 77%, BT Speaker 71%, HDMI 100%…), every peak meter moving in unison.
A text login on a second virtual terminal, running a multi-source, multi-room audio session with a live mixer - driven entirely from the keyboard.
Keybindings
Inside wiremix (keyboard-first, ideal for a tty):
↑ / k move up ← / h volume down
↓ / j move down → / l volume up
Tab next tab m mute / unmute
Shift+Tab previous tab d set as default device
= set exact volume c route a stream to another sink
0–9 quick volume (5 = 50%) q / Esc quit
On the output tab with the audiod hub, the two you'll use most are d (make
hub_combined the default) and the arrow keys (balance each speaker
independently).
Command-line options
Override the config per run:
wiremix -v output # start on a specific tab
wiremix -T output playback # which tabs are shown, and their order
wiremix -p auto # peak meters: off | mono | auto
wiremix -m 200 # max volume percent
wiremix --no-mouse # keyboard-only (good on a tty)
wiremix -r pipewire-0 # choose the PipeWire remote (default socket)
wiremix -h # full help
Please read wiremix for complete configs and commands.
Credits & license
- wiremix is by Thomas Sowell - https://github.com/tsowell/wiremix.
Upstream copyright and its dual MIT / Apache-2.0 license apply to the program
itself (see
LICENSE-MITandLICENSE-APACHEin the docs directory).
Built for Slackware-current. Audio, Bluetooth, and a full mixer - in a bare terminal.
