123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #!/bin/bash
- #This script increases/decreases/toggles the volume by a fixed increment specified in step.
- #This script relies on the script notify-send-improved and on pactl.
- # i3-volume-toggle - Increases and decreases volume.
- # Copyright (C) 2017 Fabrizio Romano Genovese <egonigredo@gmail.com>
- # This copyrighted material is made available to anyone wishing to use,
- # modify, copy, or redistribute it subject to the terms and conditions of
- # the GNU General Public License v.2, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but WITHOUT
- # ANY WARRANTY expressed or implied, including the implied warranties of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
- # Public License for more details.
- # You should have received a copy of the
- # GNU General Public License along with this program; if not,
- # see <http://www.gnu.org/licenses/>
- # Put this file in /bin/ or in /usr/bin. Do not forget to give
- # sudo chmod +x i3-volume-toggle
- # to make it executable.
- step=5
- # Check if pactl, amixer and notify-send-improved are installed
- check_installed()
- {
- if [ ! -f /bin/notify-send-improved -a -f /bin/pactl -a -f /bin/amixer ]; then
- echo "Notify-send-improved, amixer and/or pactl not present."
- echo "Please install them."
- exit 2
- fi
- }
- #Here we actually change the volume using pactl
- if [[ $# -le 1 ]]; then
- case $1 in
- -v | --version)
- echo "$0 - Version $version"
- exit 0
- ;;
- -h | --help)
- echo "- v, --version Display current version"
- echo "-h, --help Display this message"
- echo "up Increase volume by $step%"
- echo "down Decrease volume by $step%"
- echo "mute Mute/unmute"
- exit 0
- ;;
- "up")
- check_installed
- pactl set-sink-volume 1 +$step%
- #This produces sound feedback. Comment if you don't like it.
- (speaker-test -t sine -f 400)& pid=$!; sleep 0.1s; kill -9 $pid
- ;;
- "down")
- check_installed
- pactl set-sink-volume 1 -$step%
- #This produces sound feedback. Comment if you don't like it.
- (speaker-test -t sine -f 400)& pid=$!; sleep 0.1s; kill -9 $pid
- ;;
- "toggle")
- check_installed
- pactl set-sink-mute 1 toggle
- #This produces sound feedback. Comment if you don't like it.
- (speaker-test -t sine -f 400)& pid=$!; sleep 0.1s; kill -9 $pid
- ;;
- *)
- echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}"
- exit 2
- esac
- fi
- # Here we get the current status of audio from alsamixer
- muted=`amixer get Master|tail -n1|sed -E 's/.*\[([a-z]+)\]/\1/'`
- volume=`amixer get Master|tail -n1|sed -E 's/.*\[([0-9]+)\%\].*/\1/'`
- # Selects the right icon for the notification
- # If icons do not exist they won't be displayed
- muteicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-muted-symbolic.symbolic.png"
- if [ "$volume" -eq "0" ]; then
- volumeicon=$muteicon
- elif [ "$volume" -lt "33" ]; then
- volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-low-symbolic.symbolic.png"
- elif [ "$volume" -lt "66" ]; then
- volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-medium-symbolic.symbolic.png"
- elif [ "$volume" -lt "120" ]; then
- volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-high-symbolic.symbolic.png"
- else
- # The following image is obtained with this command:
- # sudo convert "/usr/share/icons/Adwaita/32x32/status/audio-volume-high-symbolic.symbolic.png" -fuzz 100% -fill red -opaque "/usr/share/icons/Adwaita/32x32/status/audio-volume-danger-symbolic.symbolic.png"
- volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-danger-symbolic.symbolic.png"
- fi
- # Here we read the notification id from a temporary file. If the file doesn't exist, we initialize it the notification to 0
- # Then we send the notification out and we reassign the notification id to the current one using tee
- #
- # If the file exists, we just replace that notification id, that will then stay the same and not increment.
- if [ ! -f "/tmp/volume_notification_id.dat" ]; then
- notification_id="0"
- if [[ $muted == "off" ]]; then
- notification_id=$(notify-send-improved "Volume Control" -i $muteicon --print-id -t 1000 "Muted \($volume\%\)" | tee /dev/tty)
- else
- notification_id=$(notify-send-improved "Volume Control" -i $volumeicon --print-id -t 1000 "Volume: $volume\%" | tee /dev/tty)
- fi
- else
- notification_id=`cat /tmp/volume_notification_id.dat`
- if [[ $muted == "off" ]]; then
- notify-send-improved "Volume Control" -i $muteicon --print-id --replace=$notification_id -t 1000 "Muted \($volume\%\)"
- else
- notify-send-improved "Volume Control" -i $volumeicon --print-id --replace=$notification_id -t 1000 "Volume: $volume\%"
- fi
- fi
- # Here we write the notification id to a file. Next time we use this script it will know if the notification has to be overwritten or not
- echo "${notification_id}" > /tmp/volume_notification_id.dat
|