Re: execute commands on suspend/resume?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 08, 2021 at 08:17:00PM -0700, Peter Meilstrup wrote:
> Hello pulseaudio list,
> 
> I am wondering if it is possible to have a command be executed when a
> sink is suspended or resumed (via module-suspend-on-idle).
> Specifically I want to switch my amplifier on and off automatically
> via home automation. Is this supported in pulseaudio?

I realize this is a reply to a pretty old message, but in case you or
others are still wondering about this:

It's pretty straightforward to do this with a custom pulseaudio client
application. I took a quick stab at it with the "pulsectl" python
library. Example script attached, just modify the sink.name line to
match your target device.

--Sean

#!/usr/bin/python3

import pulsectl

with pulsectl.Pulse('event-printer') as pulse:
	sink_idx = None
	sink_was_suspended = False

	# Get the desired sink.
	for sink in pulse.sink_list():
		if sink.name == "alsa_output.usb-Focusrite_Scarlett_Solo_USB-00.analog-stereo":
			sink_idx = sink.index
			sink_old_state = (sink.state == 'suspended')

	def print_events(ev):
		#print('Pulse event:', ev)
		if sink_idx == ev.index:
			raise pulsectl.PulseLoopStop # Break out of the event_listen to process the event in the main app.

	pulse.event_mask_set('sink')
	pulse.event_callback_set(print_events)

	while True:
		pulse.event_listen()

		sink = pulse.sink_list()[sink_idx]
		sink_new_state = (sink.state == 'suspended')
		#print(sink_new_state, sink.state)

		if sink_new_state != sink_old_state:
			print("Sink has changed state")
			if sink.state == 'suspended':
				print("Now suspended.")
				# <<< TAKE ACTION HERE >>>
			elif sink.state == 'idle' or sink.state == 'running':
				print("Now active.")
				# <<< TAKE ACTION HERE >>>
			sink_old_state = sink_new_state


[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux