this post was submitted on 02 Sep 2024
49 points (96.2% liked)

Linux

47929 readers
1149 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

Does anyone know how I can select my audio output via the command line? I'm frequently switching between using my monitors inbuilt speakers and a USB audio interface and I'm finding it laborious to navigiggerate graphically through the settings in GNOME to do so.

What I'd like to do is set up a couple of bash aliases and do it in my terminal.

What's the best way for me to do that?

Many thanks

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 8 points 1 month ago (1 children)

I've written a bash script i'm using daily, maybe you can adapt it to your needs. I'm using pipewire-pulse. It's probably not perfect but it does the job:

#!/usr/bin/env bash
DEVICE=$1

# read input, parse list of available sinks (outputs)
if [ "$DEVICE" = "pc" ]
then
	OUTPUT=($(pactl list short sinks | awk '{print $2}' | grep -i -E 'hdmi|samson|Targus' -v))
elif [ "$DEVICE" = "tv" ]
then	
	OUTPUT=($(pactl list short sinks | awk '{print $2}' | grep -i -E 'hdmi'))
else
	echo "No valid input (must be either 'pc' or 'tv')"
	exit -1
fi

# get all currently connected streams
INPUTS=($(pactl list short sink-inputs | awk '{print $1}'))

# change default sink (for new audio outputs)
pactl set-default-sink $OUTPUT

# switch sink for existing audio outputs
for i in "${INPUTS[@]}"
do
	pactl move-sink-input $i $OUTPUT
done

# use notify-send to send a visual notification to the user that the sink changed
notify-send -c info "Default sink changed" "Changed default sink and sink-inputs to $OUTPUT"
[–] [email protected] 4 points 1 month ago

Amazing, thank you so much :)