UPDATE: Scripts from upstream

This commit is contained in:
Gwendolin Kummer 2021-11-22 21:02:20 +01:00
parent cc85c51b4d
commit 2c4fa476d7
4 changed files with 256 additions and 108 deletions

View File

@ -1,35 +1,48 @@
#!/bin/bash
# Control the backlight brightness
sendNotification=false
APPNAME=$( basename "$0" | sed "s/\.sh$//" )
currentLevelCache=~/.cache/backlight/level
backlightDev=/sys/class/backlight/intel_backlight/
notification="false"
currentLevelCache=$XDG_CACHE_HOME/backlight/level
backlightDev=/sys/class/backlight/intel_backlight
declare -a levels=(0 50 100 200 500 1000 1500 2000 3500 5000 7500 10000 15000 20000 24242)
defaultValue=2
getCurrentLevel() {
# Fetch the cached level and return its value. If no cache exist, create it and return the default value
verbose="false"
if [[ -f $currentLevelCache ]]
b_log_debug() {
if $verbose
then
echo $(<$currentLevelCache)
else
mkdir -p "$(dirname $currentLevelCache)"
echo "$defaultValue" > $currentLevelCache
echo "$APPNAME: DEBUG: $1" > /dev/tty
fi
}
changeLevel() {
b_get_current_level() {
# Fetch the cached level and return its value. If no cache exist, create it and return the default value
if [[ ! -f $currentLevelCache ]]
then
b_log_debug "Create Cache File"
mkdir -p "$(dirname $currentLevelCache)"
echo "$defaultValue" > $currentLevelCache
fi
echo $(<$currentLevelCache)
}
b_change_level() {
# Change the brightness level according the the provided $1. + for increase, - for decrease
local currentLevel=$(getCurrentLevel)
local currentLevel=$(b_get_current_level)
case "$1" in
+)
local upperBound="${#levels[@]}"
local newLevel=$(( currentLevel + 1 < upperBound ? currentLevel + 1 : currentLevel ))
local upperBound=${#levels[@]}
local upperBound=$(( upperBound - 1 ))
local newLevel=$(( currentLevel + 1 <= upperBound ? currentLevel + 1 : currentLevel ))
;;
-)
local newLevel=$(( currentLevel - 1 >= 0 ? currentLevel - 1 : 0 ))
@ -40,48 +53,61 @@ changeLevel() {
esac
echo $newLevel > $currentLevelCache
echo ${levels[$newLevel]} > "${backlightDev}brightness"
echo ${levels[$newLevel]} > "${backlightDev}/brightness"
}
sendNotification() {
local currentLevel=$(getCurrentLevel)
local maxLevel="${#levels[@]}"
local levelDiff=$((maxLevel - currentLevel - 1))
b_send_notification() {
local level=$(b_get_current_level)
local maxLevel=${#levels[@]}
local maxLevel=$(( maxLevel - 1 ))
local barLeft=$(seq -s "=" 0 $currentLevel | sed 's/[0-9]//g')
local barRight=$(seq -s "-" 0 $levelDiff | sed 's/[0-9]//g')
b_log_debug "Current Level $level"
displayer dunstify -a "changeBacklight" -u low -r "1234212" "${barLeft}${barRight}"
local level=$(( level * 100 ))
local level=$(( level / maxLevel ))
b_log_debug "Normalized Level $level"
local message=""
displayer dunstify -a "changeBacklight" -u low -r "1234212" -h int:value:$level $message
}
usage() {
b_usage() {
printf "Usage: $0\n-i Increase brighness\n-d decrease brightness\n-n notification\n-h help"
}
while getopts 'idhn' flag
while (( $# ))
do
case "${flag}" in
i)
case "$1" in
-i)
changeState=+
shift
;;
d)
-d)
changeState=-
shift
;;
n)
sendNotification=true
-n)
notification="true"
shift
;;
h | *)
usage
-v)
verbose="true"
shift
;;
-h | *)
b_usage
exit 1 ;;
esac
done
if [[ -n ${changeState+x} ]]
then
echo "$(changeLevel $changeState)"
echo "$(b_change_level $changeState)"
fi
if [[ $sendNotification = true ]]
if [[ $notification = true ]]
then
$(sendNotification)
$(b_send_notification)
fi

View File

@ -1,55 +1,139 @@
#!/bin/bash
# Monitor controller
penMap() {
xinput --map-to-output 'Wacom Pen and multitouch sensor Finger' eDP-1
xinput --map-to-output 'Wacom Pen and multitouch sensor Pen Pen (0xb6cd249a)' eDP-1
xinput --map-to-output 'Wacom Pen and multitouch sensor Pen Eraser (0xb6cd249a)' eDP-1
#xinput --map-to-output 'Wacom Pen and multitouch sensor Pen' eDP-1
# Make sure pen stick the touchscreen
xinput --map-to-output 'Wacom Pen and multitouch sensor Finger touch' eDP-1
xinput --map-to-output 'Wacom Pen and multitouch sensor Pen stylus' eDP-1
xinput --map-to-output 'Wacom Pen and multitouch sensor Pen eraser' eDP-1
APPNAME=$( basename "$0" | sed "s/\.sh$//" )
intern="eDP-1"
extern=""
verbose="false"
m_log_debug() {
if $verbose
then
echo "$APPNAME: DEBUG: $1" > /dev/tty
fi
}
usage() {
echo "Usage: $0 \n
-h help\n
-s built-in monitor only\n
-e external monitor only\n
-m multi monitor" 1>&2; exit 1;
m_log_info() {
echo "$APPNAME: $1" > /dev/tty
}
m_log_error() {
echo "$APPNAME: ERROR: $1" > /dev/tty
}
m_get_connected() {
local out=$(xrandr | grep " connected " | awk '{ print$1 }')
m_log_debug "Connected: ${out}"
echo $out
}
m_get_disconnected() {
local out=$(xrandr | grep " disconnected " | awk '{ print$1 }')
echo $out
}
m_penmap() {
m_log_debug "Run m_penmap"
xinput --map-to-output 'Wacom Pen and multitouch sensor Finger touch' $intern
xinput --map-to-output 'Wacom Pen and multitouch sensor Pen stylus' $intern
xinput --map-to-output 'Wacom Pen and multitouch sensor Pen eraser' $intern
}
m_usage() {
local txt=(
"Utility $APPNAME for setting monitors."
"Usage: $APPNAME [options]"
""
"Options:"
" --help, -h Print help."
" --internal, -i Internal Monitor Only."
" --external, -E External Monitor Only."
" --extend, -e Extend Internal Monitor."
" --clone, -c Cline Internal Monitor."
" --verbose, -v Verbose Output."
)
printf "%s\\n" "${txt[@]}"
}
m_set() {
connected=$(m_get_connected)
extern=${connected/"$intern"/}
m_log_debug "Called m_set with $1"
cmd="xrandr"
# Enable correct monitors
case "$1" in
internal)
m_log_info "Enable internal monitor only"
cmd="${cmd} --output ${intern} --primary --auto --pos 0x0 --rotate normal --output ${extern} --off"
;;
external)
m_log_info "Enalbe external monitor only"
cmd="${cmd} --output ${intern} --off --output ${extern} --primary --auto --scale 2.5x2.5 --rotate normal"
;;
extend)
m_log_info "Extend internal monitor"
cmd="${cmd} --output ${intern} --primary --auto --pos 432x2700 --rotate normal --output ${extern} --auto --scale 2x2 --pos 0x0 --rotate normal"
;;
clone)
m_log_info "Clone internal monitor"
cmd="${cmd} --output ${intern} --primary --auto --pos 432x2700 --rotate normal --output "$extern" --auto --scale 2x2 --pos 0x0 --rotate normal --same-as ${intern}"
;;
esac
# Disable unused monitors
for d in $(m_get_disconnected)
do
cmd="${cmd} --output ${d} --off"
done
m_log_debug "Run ${cmd}"
eval "$cmd"
m_penmap
~/.fehbg
}
# No flags passed
if [[ $# -eq 0 ]]
then
usage
m_usage
fi
# Flags passed
while getopts 'hsme' flag
while (( $# ))
do
case "${flag}" in
s)
# Single monitor built-in
xrandr --output eDP-1 --primary --mode 3840x2160 --pos 0x0 --rotate normal --output DP-1 --off --output HDMI-1 --off --output DP-2 --off
penMap
~/.fehbg
m_log_debug "Parse Arg $1"
case "$1" in
--internal | -i)
mode="internal"
shift
;;
e)
# Single monitor external
xrandr --output eDP-1 --off --output DP-1 --off --output HDMI-1 --primary --mode 1920x1080 --scale 2.5x2.5 --rotate normal --output DP-2 --off
penMap
~/.fehbg
--external | -E)
mode="external"
shift
;;
m)
# Multiple monitor
xrandr --output eDP-1 --primary --mode 3840x2160 --pos 0x0 --rotate normal --output DP-1 --off --output HDMI-1 --mode 1920x1080 --scale 2x2 --pos 3840x0 --rotate normal --output DP-2 --off
penMap
~/.fehbg
--extend | -e)
mode="extend"
shift
;;
h | *)
usage
--clone | -c)
mode="clone"
shift
;;
--verbose | -v)
verbose="true"
shift
;;
--help | -h | *)
m_usage
exit 0
;;
esac
done
m_set "$mode"

View File

@ -1,10 +1,10 @@
#!/bin/bash
o0="Cancel"
o1="Only eDP-1"
o2="Only HDMI-1"
o3="Dual Screen eDP-1 -> HDMI-1"
o4="Clone Screen eDP-1 -> HDMI-1"
o1="Internal Only"
o2="External Only"
o3="Extend Internal"
o4="Clone Internal"
options="$o0\n$o1\n$o2\n$o3\n$o4"
@ -13,15 +13,15 @@ echo $selection
case $selection in
$o1)
displayer /home/gwen/bin/monitor.sh -s
displayer /home/gwen/bin/monitor.sh --internal
;;
$o2)
displayer /home/gwen/bin/monitor.sh -e
displayer /home/gwen/bin/monitor.sh --external
;;
$o3)
displayer /home/gwen/bin/monitor.sh -m
displayer /home/gwen/bin/monitor.sh --extend
;;
$o4)
displayer /home/gwen/bin/monitor.sh -m
displayer /home/gwen/bin/monitor.sh --clone
;;
esac

View File

@ -1,76 +1,114 @@
#!/bin/bash
# Control the volume
# Might require setting the default sink using
# pactl set-default-sink <someSink>
sendNotification=false
APPNAME=$( basename "$0" | sed "s/\.sh$//" )
changeLevel() {
notification="false"
sink="@DEFAULT_SINK@"
maxVolumeLevel=120
verbose="false"
v_log_debug() {
if $verbose
then
echo "$APPNAME: DEBUG: $1" > /dev/tty
fi
}
v_run_pactl() {
out=$(sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl $1)
echo $out
}
v_change_level() {
# Change the volume according the the provided $1. + for increase, - for decrease
case "$1" in
+)
sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-volume @DEFAULT_SINK@ +5%
#sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-volume "$sink" +5%
v_run_pactl "set-sink-volume $sink +5%"
;;
-)
sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-volume @DEFAULT_SINK@ -5%
#sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-volume "$sink" -5%
v_run_pactl "set-sink-volume $sink -5%"
;;
m)
sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-mute @DEFAULT_SINK@ toggle
#sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl set-sink-mute "$sink" toggle
v_run_pactl "set-sink-mute $sink toggle"
;;
*)
;;
esac
}
sendNotification() {
local mute=$(sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl list sinks | grep '^[[:space:]]Mute:' | sed -e 's_.*: \(\w\)_\1_')
local currentLevel=$(sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,')
currentLevel=$((currentLevel / 10 + 1))
v_send_notification() {
local mute=$(v_run_pactl "get-sink-mute $sink" | sed -e 's_.*: \(\w\)_\1_')
local levelDiff=$((20 - currentLevel))
local level=$(v_run_pactl "get-sink-volume $sink" | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,')
v_log_debug "Current Level: $level"
level=$(( level * 100 ))
level=$(( level / $maxVolumeLevel ))
v_log_debug "Normalized Level: $level"
local levelDiff=$((20 - level))
if [[ $mute == no ]]
then
local barLeft=$(seq -s "=" 0 $currentLevel | sed 's/[0-9]//g')
local message=" Unmute"
else
local barLeft=$(seq -s "x" 0 $currentLevel | sed 's/[0-9]//g')
local message=" Mute"
fi
local barRight=$(seq -s "-" 0 $levelDiff | sed 's/[0-9]//g')
displayer dunstify -a "changeVolume" -u low -r "38462528" "${barLeft}${barRight}"
displayer dunstify -a "changeVolume" -u low -r "38462528" -h int:value:$level $message
}
usage() {
v_usage() {
printf "Usage: $0\n-i Increase volume\n-d decrease volumei\n-m mute\n-n notification\n-h help"
}
while getopts 'idhnm' flag
while (( $# ))
do
case "${flag}" in
i)
case "$1" in
-i)
changeState=+
shift
;;
d)
-d)
changeState=-
shift
;;
m)
-m)
changeState=m
shift
;;
n)
sendNotification=true
-n)
notification="true"
shift
;;
h | *)
usage
-v)
verbose="true"
shift
;;
-h | *)
v_usage
exit 1 ;;
esac
done
if [[ -n ${changeState+x} ]]
then
echo "$(changeLevel $changeState)"
echo "$(v_change_level $changeState)"
fi
if [[ $sendNotification = true ]]
if $notification
then
$(sendNotification)
v_log_debug "Send Notification"
$(v_send_notification)
fi