Default audio device (built-in audio) keeps changing to HDMI after screen sleep

Annoying persisting problem. Whenever I toggle my display’s input source, or my display goes to sleep and wakes up, the default audio is switched to HDMI/analog. I don’t want this. My preferred audio output is optical audio. I tried setting a HDMI audio blacklist in my modprobe.d folder, but it stopped working after a while. Might have been because of optimus-manager. I remember it working before that.

I’ve also tried editing my pulse config file, but that doesn’t seem to be working either.

I find your user name offensive :hugs:

1 Like

That’s on you I guess. Why though?

@His_Turdness
Try comment out this line in /etc/pulse/default.pa

load-module module-switch-on-connect

I don’t have that line. Here’s my pulse default.pa

#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started per-user
# (i.e. not in system mode)

.fail

### Automatically restore the volume of streams and devices
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore

### Automatically augment property information from .desktop files
### stored in /usr/share/application
load-module module-augment-properties

### Should be after module-*-restore but before module-*-detect
#load-module module-switch-on-port-available

### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available
#.ifexists module-udev-detect.so
#load-module module-udev-detect
#.else
### Use the static hardware detection module (for systems that lack udev support)
#load-module module-detect
#.endif

### Automatically connect sink and source if JACK server is present
.ifexists module-jackdbus-detect.so
.nofail
load-module module-jackdbus-detect channels=2
.fail
.endif

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

### Load several protocols
load-module module-dbus-protocol
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp
#load-module module-native-protocol-tcp
#load-module module-zeroconf-publish

### Load the RTP receiver module (also configured via paprefs, see above)
#load-module module-rtp-recv

### Load the RTP sender module (also configured via paprefs, see above)
#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
#load-module module-rtp-send source=rtp.monitor

### Load additional modules from GSettings. This can be configured with the paprefs tool.
### Please keep in mind that the modules configured by paprefs might conflict with manually
### loaded modules.
.ifexists module-gsettings.so
.nofail
load-module module-gsettings
.fail
.endif


### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

### Honour intended role device property
load-module module-intended-roles

### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle

### If autoexit on idle is enabled we want to make sure we only quit
### when no local session needs us anymore.
.ifexists module-console-kit.so
load-module module-console-kit
.endif
.ifexists module-systemd-login.so
load-module module-systemd-login
.endif

### Enable positioned event sounds
load-module module-position-event-sounds

### Cork music/video streams when a phone stream is active
load-module module-role-cork

### Modules to allow autoloading of filters (such as echo cancellation)
### on demand. module-filter-heuristics tries to determine what filters
### make sense, and module-filter-apply does the heavy-lifting of
### loading modules and rerouting streams.
load-module module-filter-heuristics
load-module module-filter-apply

### Make some devices default
set-default-sink alsa_output.pci-0000_00_1f.3.iec958-stereo
#set-default-source input

Deleted pulse audio folders from /etc and ~/.config, reinstalled pulseaudio and rebooted. Now audio seems to be working as it should. No idea what changed, but at least it’s working. There must have been some setting somewhere that was messed up.

Testing a bit more before checking this as solved.

Hopefully it stay’s working and is fixed. :crossed_fingers:

Doesn’t work. It still switches off to analog whenever the display goes to sleep and wakes up. :poop: Changes profile to Digital Stereo (HDMI), but changes the device to analog. It only does it after display sleep now, so that’s progress.

Stop the display from going into sleep mode and instead have it just shut down? Does that make any difference?

Hmm, cool idea! Is that possible? How do I do that?

In power management. You want to set display settings.

It is set to switch off after 10 minutes. No sleep mentioned here.

What’s under the other settings?

Nothing related to display behaviour. Just special workspace behaviour settings, if you choose to set them and advanced settings give option to show batter level notification and other notification settings related to battery status.

I just ran pactl info on konsole and it gave me some info about default sample, channel map, default sink and default source.

Server String: /run/user/1000/pulse/native
Library Protocol Version: 33
Server Protocol Version: 33
Is Local: yes
Client Index: 19
Tile Size: 65472
User Name: miikka
Host Name: Arch-Node
Server Name: pulseaudio
Server Version: 13.0
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.pci-0000_00_1f.3.iec958-stereo
Default Source: alsa_input.usb-SteelSeries_SteelSeries_Siberia_800-00.mono-fallback
Cookie: 3233:3ce7

Maybe that’s te reason it keeps resetting to the analog output? I’m going to try to set the default source in the default.pa file. I’ve already set the default sink to what I presume is the correct one.

Edit: tested, does not work. :confused:

1 Like

I created two custom files:
/usr/share/pulseaudio/alsa-mixer/profile-sets/custom-profile.conf
/usr/lib/udev/rules.d/91-pulseaudio-custom.rules

I set those according to arch wiki’s " Independent analog and digital outputs on the same card" instrucitons.

I set a custom keyboard command for display sleep and tested the result. Display sleeps for half a second with it (weird), but the sound remains, so IT WORKS! I’m going to test a little bit, with a reboot etc. I’m hopeful…

Edit: works fine after reboot! Marking this as the solution. Holy crap this was hard. There needs to be a way to set this with a GUI instead.

1 Like