--- /dev/null
+SUBSYSTEM=="backlight", ACTION=="add", \
+ RUN+="/bin/chgrp video $sys$devpath/brightness", \
+ RUN+="/bin/chmod g+w $sys$devpath/brightness"
--- /dev/null
+#!/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})')
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}")
# 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 …'
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
"${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