Skip to content

Instantly share code, notes, and snippets.

@cmccandless
Last active August 28, 2018 18:19
Show Gist options
  • Save cmccandless/c3c4056c0b3a73b7b2ab07e40d04f5a9 to your computer and use it in GitHub Desktop.
Save cmccandless/c3c4056c0b3a73b7b2ab07e40d04f5a9 to your computer and use it in GitHub Desktop.
Switch USB Audio mode (Headset <-> Speaker) on Ubuntu 16.04
#!/bin/bash
set -e
# CARD=1
PROFILE_BASE=output:analog-stereo
DEVICE=usb-Generic_USB_Audio_200901010001-00
CARD_NAME="alsa_card.${DEVICE}"
SINK_BASE="alsa_output.${DEVICE}.analog-stereo"
# Find card index
while read -r card_line ; do
read -r name_line
CARD=$(echo $card_line | grep -oE '[0-9]+')
# NAME=$(echo $name_line | grep -P '(?<=\s*name: ).*')
NAME=$(echo $name_line | sed -n 's/^\s*name: <\(.*\)>/\1/p')
if [ "$CARD_NAME" = "$NAME" ]; then
break
fi
done < <(pacmd list-cards | grep -E '(name|index):')
# Parse command
case $1 in
# Headphones
h*)
PROFILE="${PROFILE_BASE}-headphone+input:analog-stereo-mic";
SINK="${SINK_BASE}-headphone"
;;
s*)
PROFILE="${PROFILE_BASE}-speaker";
SINK="${SINK_BASE}-speaker"
;;
*) echo "UNKNOWN PROFILE $1"; exit 1;;
esac
pacmd set-card-profile $CARD $PROFILE &&
pacmd set-default-sink $SINK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment