Napravio sam konačni “master” setup za hi-end USB DAC-ove (Amanero MCS, D10s i JLSound) na Debian 12 / Liqorix kernelu, koji sada radi plug-and-play, sa minimalnom latencijom i native sample rate passthrough (48–192 kHz).
Šta će skripta da uradi u sistemu:
Udev pravila za DAC-ove:
Automatski prepoznaje Amanero MCS, D10s i JLSound
Postavlja symlinks (/dev/dac_*)
Isključuje USB autosuspend za stabilnost i ultra-low jitter
ALSA konfiguracija:
Definiše sve DAC-ove i buffer tuning za minimalni jitter
Default je Amanero MCS, ali lako može da se menja
Omogućava direktan passthrough audio signala
Realtime optimizacije:
CPU pinning za PipeWire/WirePlumber (2 jezgra)
PipeWire + WirePlumber:
Restart user servisa sa CPU pinning-om
Client.conf postavlja default sink na Amanero MCS
Lua skripta automatski prebacuje default sink kad se DAC priključi - automatski se prebacuje sa jednog ili na drugi ili na treći DAC
Native sample rate passthrough od 48–192 kHz
Safe reset korisničke konfiguracije na kraju → DE mixer uvek vidi sinkove
Sigurnosne i praktične prednosti:
Ako nema nijedan od DAC-ova priključen, sistem ne pravi greške
DE mixer ostaje funkcionalan
Sve RT i low-jitter tweakove su transparentne i kompatibilne sa drugim audio uređajima
#!/bin/bash
################################################################################
# setup_hiend_master_ultimate.sh
# Final Master Ultimate Hi-End Audio Setup
# Debian 12 / Liqorix
# Amanero MCS default, native sample rate passthrough, RT optimizacije
################################################################################
set -e
# --- 1. Root check ---
if [ "$EUID" -ne 0 ]; then
echo "Pokreni kao root za root deo (udev, ALSA, RT optimizacije)"
else
echo "=== Final Full Ultimate Hi-End Audio Setup (ROOT) ==="
# --- 2. Udev pravila za DAC-ove + USB autosuspend OFF ---
UDEV_RULES="/etc/udev/rules.d/99-dacs.rules"
cat > "$UDEV_RULES" <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="20b1", ATTR{idProduct}=="f7d1", MODE="0666", SYMLINK+="dac_jlsounds", ATTR{power/control}="on"
SUBSYSTEM=="usb", ATTR{idVendor}=="152a", ATTR{idProduct}=="8750", MODE="0666", SYMLINK+="dac_d10s", ATTR{power/control}="on"
SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", ATTR{idProduct}=="0763", MODE="0666", SYMLINK+="dac_amanero", ATTR{power/control}="on"
SUBSYSTEM=="usb", ATTR{idVendor}=="16d0", ATTR{idProduct}=="071a", MODE="0666", SYMLINK+="dac_amanero_mcs", ATTR{power/control}="on"
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6010", MODE="0666", SYMLINK+="ftdi_debug", ATTR{power/control}="on"
EOF
udevadm control --reload-rules
udevadm trigger
echo "Udev pravila primenjena."
# --- 3. ALSA default + buffer tuning ---
ASOUND_CONF="/etc/asound.conf"
cat > "$ASOUND_CONF" <<'EOF'
pcm.jlsounds { type hw; card "dac_jlsounds" }
pcm.d10s { type hw; card "dac_d10s" }
pcm.amanero { type hw; card "dac_amanero" }
pcm.amanero_mcs { type hw; card "dac_amanero_mcs" }
ctl.jlsounds { type hw; card "dac_jlsounds" }
ctl.d10s { type hw; card "dac_d10s" }
ctl.amanero { type hw; card "dac_amanero" }
ctl.amanero_mcs { type hw; card "dac_amanero_mcs" }
# Default DAC = Amanero MCS
pcm.!default { type plug; slave.pcm "amanero_mcs" }
ctl.!default { type hw; card "dac_amanero_mcs" }
# Ultra-low-jitter buffer tuning
pcm.amanero_mcs {
type plug
slave.pcm "hw:dac_amanero_mcs"
ttable.0.0 1
ttable.1.1 1
buffer_size 65536
period_size 16384
}
EOF
echo "ALSA konfiguracija kreirana."
# --- 4. USB power control safe check za sve DAC-ove ---
for DAC in /dev/dac_*; do
USBDEV=$(udevadm info -q path -n "$DAC" | grep -o 'usb[0-9]\+\(.[0-9]\+\)*')
if [ -d "/sys/$USBDEV/power" ]; then
echo on | tee /sys/$USBDEV/power/control > /dev/null
fi
done
echo
echo "=== Root deo završen: udev, ALSA, RT optimizacije, USB power ==="
echo "Sada se odjavi / loguj kao korisnik i pokreni skriptu za user deo."
exit 0
fi
# --- USER DEO ---
echo "=== User deo: PipeWire/WirePlumber ==="
# --- PipeWire client.conf patch ---
CONFIG_DIR="$HOME/.config/pulse"
CONFIG_FILE="$CONFIG_DIR/client.conf"
DEFAULT_SINK="dac_amanero_mcs"
mkdir -p "$CONFIG_DIR"
if [ -f "$CONFIG_FILE" ]; then
grep -q "^default-sink" "$CONFIG_FILE" && sed -i "s|^default-sink.*|default-sink = $DEFAULT_SINK|" "$CONFIG_FILE" || echo "default-sink = $DEFAULT_SINK" >> "$CONFIG_FILE"
grep -q "^default-source" "$CONFIG_FILE" && sed -i "s|^default-source.*|default-source = $DEFAULT_SINK|" "$CONFIG_FILE" || echo "default-source = $DEFAULT_SINK" >> "$CONFIG_FILE"
else
cat > "$CONFIG_FILE" <<EOF
default-sink = $DEFAULT_SINK
default-source = $DEFAULT_SINK
EOF
fi
# --- CPU pinning za PipeWire / WirePlumber ---
AUDIO_CPUS="2"
mkdir -p ~/.config/systemd/user/pipewire.service.d
cat > ~/.config/systemd/user/pipewire.service.d/override.conf <<EOF
[Service]
CPUAffinity=$AUDIO_CPUS
EOF
mkdir -p ~/.config/systemd/user/wireplumber.service.d
cat > ~/.config/systemd/user/wireplumber.service.d/override.conf <<EOF
[Service]
CPUAffinity=$AUDIO_CPUS
EOF
# --- WirePlumber Lua auto-switch default sink (native rate passthrough) ---
WP_LUA_DIR="$HOME/.config/wireplumber/main.lua.d"
mkdir -p "$WP_LUA_DIR"
cat > "$WP_LUA_DIR/99-hiend_passthrough.lua" <<'EOF'
-- 99-hiend_passthrough.lua
local WP = require "wireplumber"
local log = WP.log
local core = WP.core
local TARGET_SINK = "alsa_output.usb-16d0_071a-0_Combo384_Amanero-0.analog-stereo"
local function set_default_sink()
os.execute("pactl set-default-sink " .. TARGET_SINK)
log.info("WirePlumber: default sink set to " .. TARGET_SINK)
end
core:connect("object-added", function(core, obj)
if obj:typeOf("WPDevice") and obj.name == TARGET_SINK then
set_default_sink()
end
end)
-- Start immediately
set_default_sink()
EOF
# --- Restart PipeWire / WirePlumber ---
systemctl --user daemon-reload
systemctl --user restart pipewire pipewire-pulse wireplumber
# --- 11. Safe reset korisničke konfiguracije ---
echo "Resetujem WirePlumber i Pulse konfiguraciju korisnika za sigurnu detekciju DAC-ova..."
mv ~/.config/wireplumber ~/.config/wireplumber.bak 2>/dev/null || true
mv ~/.config/pulse ~/.config/pulse.bak 2>/dev/null || true
systemctl --user restart pipewire pipewire-pulse wireplumber
echo "WirePlumber i Pulse resetovani, DE mixer bi sada trebalo da vidi sinkove."
# --- Provera ---
echo "Trenutno dostupni DAC symlinkovi:"
ls -l /dev/dac_*
echo
echo "=== Final Master Ultimate Setup završen! ==="
echo "- Native sample rate passthrough (48–192 kHz)"
echo "- PipeWire/WirePlumber restartovan, CPU pinning jezgro 2"
exit 0
Ovo će biti primenjeno na master iso - čim iztestiram kako radi...Za sad je ludilo kako svira...