You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.9 KiB
Bash

#!/bin/bash
# TODO: Am I calling them displays or video outputs? Pick one!
function call_xrandr() {
xrandr_opts=''
for output in "${!video_outputs[@]}"; do
echo "Setting ${output} to ${video_outputs[$output]}"
xrandr_opts="${xrandr_opts} --output ${output} ${video_outputs[$output]}"
done
xrandr $xrandr_opts
}
if [ "$1" = '-a' ]; then
switch_audio='yes'
video_mode="$2"
else
video_mode="$1"
fi
declare -A video_outputs
while read -r display_line; do
display_name="$(echo "$display_line" | cut -d " " -f 1)"
video_outputs[$display_name]=' --off'
done <<< "$(xrandr | grep connected)"
# TODO: I'm kind of inattentive, so build in a mechanism to make sure the display I try
# to use is actually connected.
# TODO: I'm also very lazy, so build a method that automatically figures out which HDMI
# output to use if there's only one.
case $video_mode in
'lvds-hdmi1')
video_outputs['LVDS1']='--primary --mode 1366x768'
video_outputs['HDMI1']='--mode 1280x720 --above LVDS1'
if [ "$switch_audio" = 'yes' ]; then
audio_profile='output:hdmi-stereo'
fi
;;
'hdmi1')
video_outputs['HDMI1']='--primary --mode 1280x720'
if [ "$switch_audio" = 'yes' ]; then
audio_profile='output:hdmi-stereo'
fi
;;
'lvds')
video_outputs['LVDS1']='--primary --mode 1366x768'
if [ "$switch_audio" = 'yes' ]; then
audio_profile='output:analog-stereo'
fi
;;
# This is intended to be a quick rescue mode.
'')
video_outputs['LVDS1']='--primary --mode 1366x768'
audio_profile='output:analog-stereo'
;;
*)
echo "No configuration defined for ${video_mode}"
exit 1
;;
esac
call_xrandr "${video_outputs[@]}"
if [ "$switch_audio" = 'yes' ]; then
ponymix -c 0 set-profile "${audio_profile}"
fi