Files
LumaOps-Public/scripts/unraid-hardware-setup.sh
T

67 lines
2.5 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
readonly PERSIST_DIR="/boot/config/plugins/lumaops"
readonly PERSIST_SCRIPT="${PERSIST_DIR}/hardware-setup.sh"
readonly LIVE_RULES="/etc/udev/rules.d/60-lumaops-openrgb.rules"
readonly BOOT_HOOK='bash /boot/config/plugins/lumaops/hardware-setup.sh --boot'
if [[ "${EUID}" -ne 0 ]]; then
echo "Dit script moet als root op de Unraid-host worden uitgevoerd." >&2
exit 77
fi
install -d -m 0755 "${PERSIST_DIR}" /etc/udev/rules.d
if [[ "${1:-}" != "--boot" ]]; then
install -m 0755 "$0" "${PERSIST_SCRIPT}"
if ! grep -Fqx "${BOOT_HOOK}" /boot/config/go; then
printf '\n# LumaOps OpenRGB hardware access\n%s\n' "${BOOT_HOOK}" >> /boot/config/go
fi
fi
modprobe i2c-dev
modprobe i2c-i801
rules_tmp="$(mktemp)"
trap 'rm -f "${rules_tmp}"' EXIT
cat > "${rules_tmp}" <<'RULES'
# LumaOps: minimum access for the detected ASUS Aura and Intel SMBus devices.
ACTION=="add|change", SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", ATTR{idProduct}=="18f3", MODE:="0660", GROUP:="users"
ACTION=="add|change", SUBSYSTEM=="hidraw", KERNEL=="hidraw*", ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="18f3", MODE:="0660", GROUP:="users"
ACTION=="add|change", SUBSYSTEM=="i2c-dev", KERNEL=="i2c-0", MODE:="0660", GROUP:="users"
RULES
install -m 0644 "${rules_tmp}" "${LIVE_RULES}"
udevadm control --reload-rules
udevadm trigger --action=change --subsystem-match=usb --attr-match=idVendor=0b05 --attr-match=idProduct=18f3
udevadm trigger --action=change --subsystem-match=hidraw
udevadm trigger --action=change --subsystem-match=i2c-dev --sysname-match=i2c-0
udevadm settle
for node in /dev/hidraw0 /dev/i2c-0; do
if [[ -e "${node}" ]]; then
chgrp users "${node}"
chmod g+rw "${node}"
fi
done
for sysdev in /sys/bus/usb/devices/*; do
[[ -f "${sysdev}/idVendor" && -f "${sysdev}/idProduct" ]] || continue
[[ "$(<"${sysdev}/idVendor")" == "0b05" && "$(<"${sysdev}/idProduct")" == "18f3" ]] || continue
busnum="$(printf '%03d' "$((10#$(<"${sysdev}/busnum")))")"
devnum="$(printf '%03d' "$((10#$(<"${sysdev}/devnum")))")"
usb_node="/dev/bus/usb/${busnum}/${devnum}"
chgrp users "${usb_node}"
chmod g+rw "${usb_node}"
done
for required in /dev/hidraw0 /dev/i2c-0; do
if [[ ! -r "${required}" || ! -w "${required}" ]]; then
echo "Hardware-node is niet lees- en schrijfbaar: ${required}" >&2
exit 69
fi
done
stat -c '%n %a %U:%G' /dev/hidraw0 /dev/i2c-0