From: Christian Heller Date: Sun, 6 Sep 2026 16:55:42 +0000 (+0000) Subject: Add backlight.py and udev magic to make it work without sudo. X-Git-Url: https://plomlompom.com/repos/foo.html?a=commitdiff_plain;h=1b6b8603edf359b248237664641575d22d128f0e;p=confplom Add backlight.py and udev magic to make it work without sudo. --- diff --git a/90-backlight.rules b/90-backlight.rules new file mode 100644 index 0000000..8adfb73 --- /dev/null +++ b/90-backlight.rules @@ -0,0 +1,3 @@ +SUBSYSTEM=="backlight", ACTION=="add", \ + RUN+="/bin/chgrp video $sys$devpath/brightness", \ + RUN+="/bin/chmod g+w $sys$devpath/brightness" diff --git a/backlight.py b/backlight.py new file mode 100755 index 0000000..6273512 --- /dev/null +++ b/backlight.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +'Simple wrapper for manipulating backlight device brightness file(s).' +from argparse import ArgumentError, ArgumentParser +from pathlib import Path + +FILENAME_MAX = 'max_brightness' +FILENAME_TARGET = 'brightness' +PATH_BACKLIGHTS = '/sys/class/backlight' +PERCENTAGE_MIN = 0 +PERCENTAGE_MAX = 100 + +APP_DESC = 'Set backlight strength.' +ARG_NAME = 'strength' +ARG_HELP = f'percentage of possible maximum (default: {PERCENTAGE_MAX})' +ARG_ERR_RANGE = f'must be >={PERCENTAGE_MIN}, <={PERCENTAGE_MAX}' + +if __name__ == '__main__': + parser = ArgumentParser(description=APP_DESC) + arg = parser.add_argument( + ARG_NAME, + metavar=ARG_NAME.upper(), + type=int, + nargs='?', + default=PERCENTAGE_MAX, + help=ARG_HELP + ) + args = parser.parse_args() + target_percentage = getattr(args, ARG_NAME) + if not PERCENTAGE_MIN <= target_percentage <= PERCENTAGE_MAX: + parser.error(str(ArgumentError(arg, ARG_ERR_RANGE))) + for path_backlight in Path(PATH_BACKLIGHTS).iterdir(): + path_max = Path(path_backlight).joinpath(FILENAME_MAX) + path_target = Path(path_backlight).joinpath(FILENAME_TARGET) + brightness_max = int(path_max.read_text(encoding='utf8')) + target_abs = int((target_percentage / 100) * brightness_max) + path_target.write_text(f'{target_abs}\n', encoding='utf8') + print(f'set {path_backlight} to {target_percentage}% ({target_abs})') diff --git a/setup_luksvg.sh b/setup_luksvg.sh index 9b7d99e..2b93587 100755 --- a/setup_luksvg.sh +++ b/setup_luksvg.sh @@ -6,7 +6,7 @@ usage $# "partition" PARTITION=$1 # constants we might want to change at some point -CONFIG_FILES_TO_COPY="start_root.sh start_home.sh _lib.sh" +TO_COPY="90-backlight.rules backlight.py start_root.sh start_home.sh _lib.sh" # constants derived from changeables PATH_LUKS_MAPPER=$(path_luks_mapper "${NAME_LUKSVG}") @@ -47,8 +47,8 @@ mkfs.ext4 -q "${PATH_VG_DATA}" # place config setup scripts mount_privately "${PATH_VG_DATA}" "${PATH_MNT_DATA}" mkdir "${PATH_MNT_DATA_CONFIG}" -msg 'Copying config setup scripts …' -for FNAME in ${CONFIG_FILES_TO_COPY}; do +msg 'Copying setup files …' +for FNAME in ${TO_COPY}; do cp "${FNAME}" "${PATH_MNT_DATA_CONFIG}/" done msg 'Unmounting …' diff --git a/start_root.sh b/start_root.sh index f87a1fb..9508222 100755 --- a/start_root.sh +++ b/start_root.sh @@ -6,8 +6,10 @@ FNAME_START_HOME=start_home.sh PATH_DEFAULT_LOCALE=/etc/default/locale PATH_SYSCTL_PRINTK=/etc/sysctl.d/60-printk-console.conf PATH_TLP_THRESH_CONF=/etc/tlp.conf.d/60-thresholds.conf +PATH_UDEV_RULES=/etc/udev/rules.d # constants we might want to change at some point +FNAME_UDEV_RULES_BACKLIGHT=90-backlight.rules LOCALE=C.UTF-8 TO_INSTALL="ack man-db ntpsec-ntpdate sudo sway tlp vim-gtk3 xwayland" USERNAME=plom @@ -39,9 +41,14 @@ printf 'START_CHARGE_THRESH_BAT0=%s\nSTOP_CHARGE_THRESH_BAT0=%s\n' \ "${TLP_THRESH_START}" "${TLP_THRESH_STOP}" >| "${PATH_TLP_THRESH_CONF}" tlp start +msg 'Making backlight devices available to user-run backlight.py script …' +cp "${FNAME_UDEV_RULES_BACKLIGHT}" "${PATH_UDEV_RULES}/" +udevadm control --reload-rules +udevadm trigger --action=add --subsystem-match=backlight + msg 'Setting up user: %s' "${USERNAME}" adduser --comment "" "${USERNAME}" -usermod -a -G sudo "${USERNAME}" +usermod -a -G sudo,video "${USERNAME}" msg 'Synchronizing clock …' ntpdate-debian