Problem with USB DAC playback

EDIT: on JollaPhone-2026 pactl set-sink-volume fix does not work as the DAC is not separate sink anymore but it is just port of default sink, anyway there is another way via alsamixer as described bellow.

On the Xperia10V or any other phone running SF up to 5.1.0.x:
create symlink if not exist (it does exist on 10ii by default so no need this step there):
with root perms (devel-su):
ln -s /etc/pulse/xpolicy.conf.d/usbaudio.conf.disabled /etc/pulse/xpolicy.conf.d/usbaudio.conf

as defaultuser: systemctl --user restart pulseaudio.service

You will need nano (pkcon install nano) or any other editor …

A) Automatic (not only) Apple DAC silent volume fix after plug

Only for Jolla Phone 2026 (or perhaps all since SF 5.2): install alsa-utils - skip this step on SF5.1!

zypper install alsa-utils

On all versions:

devel-su nano /usr/local/bin/set-usb-dac-volume.sh

on SF5.1.x.x paste following:

#!/bin/sh
# !!! update sink name to yours - it contains unique serial number !!! `pactl list sinks|grep Name`
# someone could improve this to autotdetec script
sleep 2
pactl set-sink-volume alsa_output.usb-Apple__Inc._USB-C_to_3.5mm_Headphone_Jack_Adapter_DWH504202DRL1MQAF-00.analog-stereo 100%

for Apple DAC on the Jolla Phone 2026 (or all SF5.2+ devices) paste following:

#!/bin/sh

sleep 2
amixer -c 1 sset Headphone 100%
# and or following line if you also using headset with microphone, you can have even more lines to match all your devices...
amixer -c 1 sset Headset 100%

for other DACs you need to get mixer control name: amixer -c 1 on the first line is name what you will type into your set-usb-dac-volume.sh script
for Axagon Hi-Res DAC on the Jolla Phone 2026 (or all SF5.2+ devices) paste following:

#!/bin/sh

sleep 2
amixer -c 1 sset Speaker 100%

devel-su chmod +x /usr/local/bin/set-usb-dac-volume.sh

rest of steps are same for SF 5.1 and SF5.2…

devel-su nano /usr/local/bin/udev-create-flag

#!/bin/sh
# called by udev (runs as root)
# write a flag in the user's runtime dir so the user service notices it
USER="defaultuser"
FLAG="/run/user/$(id -u "$USER")/usb-dac-connected.flag"
mkdir -p "$(dirname "$FLAG")"
touch "$FLAG"

devel-su chmod +x /usr/local/bin/udev-create-flag

devel-su nano /etc/udev/rules.d/99-usb-dac-volume.rules

ACTION=="add", SUBSYSTEM=="sound", RUN+="/usr/local/bin/udev-create-flag"
ACTION=="change", SUBSYSTEM=="sound", RUN+="/usr/local/bin/udev-create-flag"

nano /home/defaultuser/.config/systemd/user/usb-dac-volume.path

[Unit]
Description=Watch for USB DAC flag

[Path]
PathExists=/run/user/%U/usb-dac-connected.flag
Unit=usb-dac-volume.service

[Install]
WantedBy=default.target

nano /home/defaultuser/.config/systemd/user/usb-dac-volume.service

[Unit]
Description=Run USB DAC volume script when flag present
After=default.target

[Service]
Type=oneshot
Environment=XDG_RUNTIME_DIR=%t
ExecStart=/usr/local/bin/set-usb-dac-volume.sh
ExecStartPost=/bin/rm -f /run/user/%U/usb-dac-connected.flag
TimeoutStartSec=60

[Install]
WantedBy=default.target

as root:

devel-su udevadm control --reload

now run as the defaultuser,
Reload user units:

systemctl --user daemon-reload

Enable and start the path unit so it watches for the flag:

systemctl --user enable --now usb-dac-volume.path

now it works perfectly, i just plug Apple USB-C to 3.5"Jack (Part number: MW2Q3ZM/A)
music is instantly routed to headphones and in two seconds the volume is without limit and then could be adjusted in UI/buttons 0% <=> true 100% like it is expected.

B) Manual (not only) Apple DAC silent volume fix by app launcher

create file /usr/local/bin/set-usb-dac-volume.sh as described in (A) automatic method and make it executable

create desktop entry:

nano /home/defaultuser/.local/share/applications/usb-dac-fix.desktop

[Desktop Entry]
Type=Application
Name=Apple DAC fix
Exec=/usr/local/bin/set-usb-dac-volume.sh
Icon=icon-m-browser-sound
[X-Sailjail]
Sandboxing=Disabled
3 Likes