add support for pipewire in volume widget
basiliscos opened this issue · comments
pipewire has pulse simulation layer via pipewire-pulse
program, but, unfortunately pacmd
reports:
pacmd
No PulseAudio daemon running, or not running as session daemon.
while pactl
works fine:
Server String: /run/user/1000/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 78
Tile Size: 65472
User Name: b
Host Name: xps
Server Name: PulseAudio (on PipeWire 0.3.63)
Server Version: 15.0.0
Default Sample Specification: float32le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.pci-0000_00_1f.3-platform-sof_sdw.HiFi__hw_sofsoundwire_2__sink
Default Source: alsa_input.pci-0000_00_1f.3-platform-sof_sdw.HiFi__hw_sofsoundwire_4__source
Cookie: bb84:54d8
This was proposed as a separate widget in #534, which resulted in a simple watch
recipe: awesomeWM/awesome-www#167
Does that satisfy your use case?
I think it does. Closing for inactivity. Feel free to comment back if you want to resume the conversation.
Hi, thank you for the advice. It would be nice to have something like that integrated into lain
to let it work transparently, independently from puplse/pipewire.
Here is my custom widget, which might be useful for somebody
-- pipewire
local volume = wibox.widget{
markup = '[?]',
align = 'center',
valign = 'center',
widget = wibox.widget.textbox
}
local volume_update = function()
local cmd = [[pactl get-sink-volume @DEFAULT_SINK@ | cut -s -d/ -f2,4; pactl get-sink-mute @DEFAULT_SINK@]]
awful.spawn.easy_async_with_shell(cmd, function(stdout, stderr, reason, exit_code)
local values = {}
for v in stdout:gmatch("(%d+%%)") do table.insert(values, v) end
local value = "N/A";
if ((#values == 2) and (values[1] == values[2])) then value = values[1] end
if (#values == 1) then value = values[1] end
local muted = string.find(stdout, "Mute: yes")
local color = muted and '#FF0000' or '#00FFFF'
volume.markup = string.format("[%s] ", markup.fg.color(color, value))
end)
end
local volume_timer = gears.timer {
timeout = 5,
call_now = true,
autostart = true,
callback = volume_update
}
Thank you for sharing your custom recipe.
It would be nice to have something like that integrated into
lain
to let it work transparently, independently from puplse/pipewire.
To satisfy your request, we could simply add a check, and then switch between the standard widget, or a variant similar to your recipe.
But this would create a catch-them-all approach, which goes against the simplicity principle I try to follow.
This is the rationale behind removing some lain widgets in favor of recipes, which are more maintainable.
My suggestion: if you have to switch between pulse
and pipewire
, then it's easy to implement the logic above in your configurations.
Otherwise, just use the widget you need.