Skip to content

Instantly share code, notes, and snippets.

@meetnick
Last active February 5, 2023 22:41
Show Gist options
  • Save meetnick/88376f2950b80a93c1672ad897f3ca3e to your computer and use it in GitHub Desktop.
Save meetnick/88376f2950b80a93c1672ad897f3ca3e to your computer and use it in GitHub Desktop.
Script to run when AC power supply state changes
#!/bin/sh
# create udev rule
sudo tee "/etc/udev/rules.d/60-ac-or-battery-change.rules" > /dev/null <<'EOF'
# Rule for when switching to battery
ACTION=="change",SUBSYSTEM=="power_supply",ENV{POWER_SUPPLY_ONLINE}=="0",ENV{DISPLAY}=":1",ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority",ENV{DBUS_SESSION_BUS_ADDRESS}="unix:path=/run/user/1000/bus",RUN+="/usr/bin/su niccola -c '/usr/bin/ac_change.sh 0'"
# Rule for when switching to powersupply
ACTION=="change",SUBSYSTEM=="power_supply",ENV{POWER_SUPPLY_ONLINE}=="1",ENV{DISPLAY}=":1",ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority",ENV{DBUS_SESSION_BUS_ADDRESS}="unix:path=/run/user/1000/bus",RUN+="/usr/bin/su niccola -c '/usr/bin/ac_change.sh 1'"
EOF
# Create script to run when AC power supply change state
sudo tee "/usr/bin/ac_change.sh" > /dev/null <<'EOF'
#!/usr/bin/env bash
EDP_CONNECTED=`xrandr | grep ' connected' | grep -oP 'eDP-1'`
if [ EDP_CONNECTED -eq "eDP-1" ]; then
exit 0
fi
if [ "$1" -eq "1" ]; then
logger "AC_CHANGE setting eDP-1 screen refresh rate to 120Hz"
xrandr --output eDP-1 --mode "1920x1080" --refresh 120
dbus-send --session --type=method_call --dest="org.gnome.SettingsDaemon.Power" /org/gnome/SettingsDaemon/Power org.freedesktop.DBus.Properties.Set string:"org.gnome.SettingsDaemon.Power.Screen" string:"Brightness" variant:int32:100
elif [ "$1" -eq "0" ]; then
logger "AC_CHANGE setting eDP-1 screen refresh rate to 60Hz"
CVT_MODELINE=`cvt -r 1920 1080 | grep -oP "\".*"`
MODELINE_NAME=`echo ${CVT_MODELINE} | grep -o -P '(?<=\").*(?=\")'` > /dev/null
xrandr --newmode ${CVT_MODELINE} > /dev/null 2>&1
xrandr --addmode eDP-1 "${MODELINE_NAME}" > /dev/null 2>&1
xrandr --display :1 --output eDP-1 --mode "${MODELINE_NAME}"
dbus-send --session --type=method_call --dest="org.gnome.SettingsDaemon.Power" /org/gnome/SettingsDaemon/Power org.freedesktop.DBus.Properties.Set string:"org.gnome.SettingsDaemon.Power.Screen" string:"Brightness" variant:int32:33
fi
EOF
sudo chmod +x /usr/bin/ac_change.sh
sudo udevadm control --reload-rules
sudo udevadm trigger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment