Add alsa-utils to all package formats with appropriate handling

AUR (Arch Linux):
- Added to optdepends: 'alsa-utils: Better ALSA device names and descriptions'
- Users get notification to install, but not required

Flatpak:
- Included alsa-utils module in bundle (builds from source)
- Version 1.2.12 from alsa-project.org
- Sandboxed environment can now execute aplay -L internally
- Disabled alsamixer and xmlto (not needed, reduces size)
- Users get real device descriptions automatically

Snap (future - not yet implemented):
- Created snapcraft.yaml template
- stage-packages includes alsa-utils
- Will be bundled when Snap support is implemented

AppImage (future - not yet implemented):
- Created README.md documenting dependencies
- AppImage uses host system commands (aplay from host)
- Users need to install alsa-utils on their system
- Fallback to CPAL works if not installed

Summary by format:
- .deb/.rpm: Recommends alsa-utils (auto-installed, can be removed)
- AUR: optdepends (user notified, optional)
- Flatpak: Bundled (always available)
- Snap: Will be bundled (future)
- AppImage: Host dependency (user installs)
This commit is contained in:
vicrodh committed 2026-01-17 20:04:29 -06:00
1 parent 037b8569d6
commit 7091c64d56
4 files changed
+197

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
# QBZ AppImage
## About AppImage
AppImage is a portable format that bundles the application and its dependencies.
However, it still uses system libraries and commands from the host system.
## Dependencies
### Required (Hard Dependencies)
The following must be installed on the host system for QBZ to work:
- **ALSA library** (`libasound2` on Debian/Ubuntu, `alsa-lib` on Arch)
- **GTK3** and **WebKit2GTK**
- **OpenSSL**
These are typically already installed on most Linux distributions.
### Optional (Recommended)
For the best experience, install these optional packages:
#### alsa-utils
**Package names:**
- Debian/Ubuntu: `alsa-utils`
- Fedora/RHEL: `alsa-utils`
- Arch: `alsa-utils`
**Why it's needed:**
- Provides the `aplay` command used by QBZ to enumerate ALSA devices
- Without it, you'll see raw device names like `front:CARD=CS201,DEV=0`
- With it, you'll see friendly names like "Cambridge Audio USB Front Output"
**What happens without it:**
- ALSA Direct backend falls back to CPAL enumeration (still works)
- Device names won't be as descriptive
- All functionality works, just with less friendly UI
#### PipeWire/PulseAudio
**For PipeWire:**
- `pipewire-alsa` - ALSA compatibility
- `pipewire-pulse` - PulseAudio compatibility
**For PulseAudio:**
- `pulseaudio`
- `pulseaudio-alsa`
**Why it's needed:**
- Required for PipeWire/PulseAudio audio backends
- Required for DAC Passthrough feature (uses `pw-metadata`)
## Building AppImage
TODO: Add build instructions using appimagetool or similar
## Installation
1. Download the AppImage from releases
2. Make it executable: `chmod +x QBZ-*.AppImage`
3. Run: `./QBZ-*.AppImage`
## System Integration
To integrate with your desktop environment:
```bash
# Install optional tool for desktop integration
sudo apt install appimaged # Debian/Ubuntu
# or
yay -S appimagelauncher # Arch
# AppImage will automatically appear in your application menu
```
## Troubleshooting
### "No ALSA devices found"
Install `alsa-utils`:
```bash
sudo apt install alsa-utils # Debian/Ubuntu
sudo dnf install alsa-utils # Fedora
sudo pacman -S alsa-utils # Arch
```
### "DAC Passthrough not working"
Ensure PipeWire is running:
```bash
systemctl --user status pipewire
```
Install pw-metadata:
```bash
sudo apt install pipewire-bin # Debian/Ubuntu (includes pw-metadata)
```
+1
View File
@@ -8,6 +8,7 @@ url="https://github.com/vicrodh/qbz"
license=('MIT') license=('MIT')
depends=('webkit2gtk-4.1' 'gtk3' 'alsa-lib' 'libappindicator-gtk3' 'libxkbcommon' 'openssl') depends=('webkit2gtk-4.1' 'gtk3' 'alsa-lib' 'libappindicator-gtk3' 'libxkbcommon' 'openssl')
optdepends=( optdepends=(
'alsa-utils: Better ALSA device names and descriptions'
'pipewire-alsa: PipeWire audio support' 'pipewire-alsa: PipeWire audio support'
'pipewire-pulse: PulseAudio compatibility' 'pipewire-pulse: PulseAudio compatibility'
) )
@@ -30,6 +30,21 @@ finish-args:
- --talk-name=org.freedesktop.portal.OpenURI - --talk-name=org.freedesktop.portal.OpenURI
modules: modules:
# alsa-utils for better ALSA device names (aplay -L)
- name: alsa-utils
buildsystem: autotools
config-opts:
- --disable-alsamixer
- --disable-xmlto
- --with-udev-rules-dir=/app/lib/udev/rules.d
cleanup:
- /share/man
- /share/sounds
sources:
- type: archive
url: https://www.alsa-project.org/files/pub/utils/alsa-utils-1.2.12.tar.bz2
sha256: 5f0faf83775ce9a7ad6ddcca7b19b54917e7c1a3d10e96a9e0cda29a288c49e3
# intltool required for libdbusmenu # intltool required for libdbusmenu
- name: intltool - name: intltool
buildsystem: autotools buildsystem: autotools
+82
View File
@@ -0,0 +1,82 @@
# QBZ Snap package configuration
# NOTE: Not yet implemented - this is a template for future use
name: qbz
version: '1.1.5'
summary: Native Qobuz client for Linux with bit-perfect audio
description: |
QBZ is a native Qobuz streaming client for Linux, designed for audiophiles
who need bit-perfect playback without browser sample rate limitations.
Features:
- Bit-perfect hi-res audio playback (up to 192kHz/24-bit)
- DAC Passthrough for automatic sample rate switching
- ALSA Direct backend for exclusive hardware access
- PipeWire and PulseAudio support
- Last.fm scrobbling
- Chromecast and DLNA casting
- Offline mode with local library support
grade: stable
confinement: strict
base: core22
architectures:
- build-on: amd64
apps:
qbz:
command: bin/qbz
extensions: [gnome]
plugs:
- network
- audio-playback
- home
- removable-media
- desktop
- desktop-legacy
- wayland
- x11
- unity7
- gsettings
- pulseaudio
- alsa
parts:
qbz:
plugin: rust
source: ../..
build-packages:
- libwebkit2gtk-4.1-dev
- libgtk-3-dev
- libayatana-appindicator3-dev
- librsvg2-dev
- patchelf
- libssl-dev
- libasound2-dev
- pkg-config
# alsa-utils for aplay command (device enumeration)
- alsa-utils
stage-packages:
- libwebkit2gtk-4.1-0
- libgtk-3-0
- libayatana-appindicator3-1
- libasound2
- libssl3
# Include alsa-utils in the snap for aplay -L command
- alsa-utils
override-build: |
# Install Node.js for frontend build
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
# Build frontend
npm ci
npm run build
# Build Tauri backend
cargo build --release
# Install binary
mkdir -p $SNAPCRAFT_PART_INSTALL/bin
cp target/release/qbz-nix $SNAPCRAFT_PART_INSTALL/bin/qbz