You are not logged in.
Hi, I'm using Hyprland + SDDM. The volume would randomly resets to 40% when I restart or log out.
Edit: My device is a Legion 5 Pro 2021. This didnt happen before installing sddm.
Edit 2: This doesn't happen when I use pulseaudio instead of pipewire
Last edited by ech (2025-07-31 05:53:48)
Offline
This is the "default" volume setting wireplumber will set the volume to unless you actively change it via a "proper" mixer that handles pipewire/pulse volumes (e.g. pactl/wpctl or pavucontrol for example), if you are using a volume mixer that internally adjusts the ALSA control then this information won't get passed along.
if you want to rather stick to 100% instead, you can do a
wpctl settings --save device.routes.default-sink-volume 1.0and make sure you don't mix pulseaudio and pipewire and it's properly uninstalled and stopped after replacing it with pipewire-pulse
Offline
I use wpctl for adjusting volume.
After some testings, the volume would be the same if I reboot directly from Hyprland. If I exit Hyprland and go back to SDDM, log in again, it would be reset to 40%.
Is this the expected behaviour?
Offline
Hmm not sure if it's relevant but after logging out I have to remove the bluetooth headphones before connecting again.
Offline
I use wpctl for adjusting volume.I use wpctl for adjusting volume.
Did you also *save* the *default-sink-volume* as V1del suggested?
Offline
Sorry, I haven't tried that yet since it would mean the volume would be default to 100% right?
I wanted the volume to be saved whenever I log out/reboot etc... I did try disabling and masking wireplumber service for sddm and it worked.
Offline
Yes. Just save the default on logout, but don't hardcode the volume but query it from your current value from
wpctl get-volume @DEFAULT_AUDIO_SINK@Offline
Saving the volume once set should be the default. What kind of device are you storing volumes for? HDMI? That might sometimes get new identifiers depending on how your HDA implementation enumerates "new" displays.
FWIW some sanity checks
systemctl --user status pipewire{,-pulse} wireplumber pulseaudio
pactl list cards
pactl list sinks
aplay -lLare you perhaps manually running a wireplumber instance somewhere? If you "weren't using SDDM" chances are you never had a proper user session before and are manually invoking things multiple times. Are you perhaps running some other tools that might store an override for this like qpwgraph or similar?
Last edited by V1del (2025-07-27 14:50:18)
Offline
Afaiu the OP just doesn't want to store a static volume but "how I left things on logout".
Offline
yes, and this is the "normal" default assuming a vanilla and properly working wireplumber config and using tools like wpctl/pactl. Either the HW announces itself weirdly so wireplumber can't match the card identifiers it stores or the config was altered and this behaviour disabled, or there's some other tool implicitly overriding what wireplumber would do by default (or the cache/state dir removed). This works just fine here as the OP envisions. FWIW while we are at it
printenv
stat ~/.local/state/wireplumber ~/.local/state/wireplumber/restore-stream
cat ~/.local/state/wireplumber/restore-streamOffline
Saving the volume once set should be the default. What kind of device are you storing volumes for? HDMI? That might sometimes get new identifiers depending on how your HDA implementation enumerates "new" displays.
FWIW some sanity checks
systemctl --user status pipewire{,-pulse} wireplumber pulseaudio pactl list cards pactl list sinks aplay -lLare you perhaps manually running a wireplumber instance somewhere? If you "weren't using SDDM" chances are you never had a proper user session before and are manually invoking things multiple times. Are you perhaps running some other tools that might store an override for this like qpwgraph or similar?
Here's the output
https://0x0.st/85dj.txt
I'm storing volumes for my internal speakers and bluetooth headphones.
yes, and this is the "normal" default assuming a vanilla and properly working wireplumber config and using tools like wpctl/pactl. Either the HW announces itself weirdly so wireplumber can't match the card identifiers it stores or the config was altered and this behaviour disabled, or there's some other tool implicitly overriding what wireplumber would do by default (or the cache/state dir removed). This works just fine here as the OP envisions. FWIW while we are at it
printenv stat ~/.local/state/wireplumber ~/.local/state/wireplumber/restore-stream cat ~/.local/state/wireplumber/restore-stream
Last edited by ech (2025-07-28 06:19:37)
Offline
That file not existing is a problem, do you have nonstandard wireplumber config?
wpctl settings node.stream.restore-propsmight shed some global light on this but this might be down to config
grep -RA3 'restore' {/etc,/usr/lib,~/.config}/wireplumber/wireplumber.conf*Offline
wpctl settings node.stream.restore-props
Value: true
grep -RA3 'restore' {/etc,/usr/lib,~/.config}/wireplumber/wireplumber.conf*
grep: /etc/wireplumber/wireplumber.conf*: No such file or directory
grep: /usr/lib/wireplumber/wireplumber.conf*: No such file or directory
grep: /home/echonarch/.config/wireplumber/wireplumber.conf*: No such file or directoryTBH I'm curious too. Just check my Ubuntu device and there's a restore-stream file. I don't think that I've made any modification to wireplumber config.
Last edited by ech (2025-07-29 11:13:32)
Offline
On double checking my file wasn't accessed in a while so that might be getting stored somewhere else in recent versions, FWIW it should be /usr/share and not /usr/lib of course, my bad.
Offline
Okay I think I will go with the masking solution and mark this as solved. Thank you so much for your help!
Offline
Sanity check
ls -laR ~sddmOffline
Sanity check
ls -laR ~sddm
Permission denied: /var/lib/sddm - code: 13
Skipped 1 directories due to permission denied:
/var/lib/sddmOffline
sudo ls -laR ~sddmOffline
Offline
Permissions look all fine…
* why does SDDM have a /var/lib/sddm/.local/share/flatpak ?
The directory is effectively empty, but SDDM isn't a flatschpak installation?
pacman -Qikk sddmBefore starting SDDM,
* remove /var/lib/sddm/.config/pulse (maybe SDDM goes exclusively through libpulse and pipewire-pulse?
* remove /var/lib/sddm/.local/state/wireplumber (just for good measure)
Offline