The following is a quick guide on getting basic status LED functionality working with TrueNAS running on the UGREEN DXP4800 Plus. Theoretically, it should work on all models (with some small revisions to the script), but I only have a DXP4800 Plus. :)
This guide is for cron job that runs a script to update the LEDs every couple minutes, but I'm sure the following can be modified for blinky LEDs as well.
- Manually build or download the
ugreen_leds_clitool from https://github.com/miskcoo/ugreen_dx4600_leds_controller. - Plop it somewhere on your NAS (E.g. a dataset).
- In the same dataset, create your
.shscript that controls the LEDs. At the bottom of this gist is my modified version of meyergru's. - Make the script executable:
chmod +X your-script.sh.- You may also need to make
ugreen_leds_cliexecutable as well.
- You may also need to make
- In TrueNas, navigate over to
System Settings→Advanced - Under
Init/Shutdown ScriptsCreate the following to load thei2c-devmodule on boot:- Description:
Enable i2c-dev - Type:
Command - Command:
modprobe i2c-dev - When:
Pre Init
- Description:
- Under
Cron Jobswe then create a task to run every x minutes:- Description:
Update Status LEDS - Command:
/mnt/path/to/your/script.sh - Run as User:
root - Schedule:
*/5 * * * *(or however often you desire)
- Description:
- Reboot and wait a bit for your cron job to run.
- https://github.com/miskcoo/ugreen_dx4600_leds_controller
- https://github.com/meyergru/ugreen_dxp8800_leds_controller
#! /bin/bash
#set -x
SCRIPTPATH=$(dirname "$0")
echo $SCRIPTPATH
devices=(p n x x x x)
map=(power netdev disk1 disk2 disk3 disk4)
# Check network status
gw=$(ip route | awk '/default/ { print $3 }')
if ping -q -c 1 -W 1 $gw >/dev/null; then
devices[1]=u
fi
# Map sdX1 to hardware device
declare -A hwmap
echo "Mapping devices..."
while read line; do
MAP=($line)
device=${MAP[0]}
hctl=${MAP[1]}
partitions=$(lsblk -l -o NAME | grep "^${device}[0-9]\+$")
for part in $partitions; do
hwmap[$part]=${hctl:0:1}
echo "Mapped $part to ${hctl:0:1}"
done
done <<< "$(lsblk -S -o NAME,HCTL | tail -n +2)"
# Print the hwmap for verification
echo "Hardware mapping (hwmap):"
for key in "${!hwmap[@]}"; do
echo "$key: ${hwmap[$key]}"
done
# Check status of zpool disks
echo "Checking zpool status..."
while read line; do
DEV=($line)
partition=${DEV[0]}
echo "Processing $partition with status ${DEV[1]}"
if [[ -n "${hwmap[$partition]}" ]]; then
index=$((${hwmap[$partition]} + 2))
echo "Device $partition maps to index $index"
if [ ${DEV[1]} = "ONLINE" ]; then
devices[$index]=o
else
devices[$index]=f
fi
else
echo "Warning: No mapping found for $partition"
fi
done <<< "$(zpool status -L | grep -E '^\s+sd[a-h][0-9]')"
# Output the final device statuses
echo "Final device statuses:"
for i in "${!devices[@]}"; do
echo "$i: ${devices[$i]}"
case "${devices[$i]}" in
p)
"$SCRIPTPATH/ugreen_leds_cli" ${map[$i]} -color 255 255 255 -on -brightness 64
;;
u)
"$SCRIPTPATH/ugreen_leds_cli" ${map[$i]} -color 255 255 255 -on -brightness 64
;;
o)
"$SCRIPTPATH/ugreen_leds_cli" ${map[$i]} -color 0 255 0 -on -brightness 64
;;
f)
"$SCRIPTPATH/ugreen_leds_cli" ${map[$i]} -color 255 0 0 -blink 400 600 -brightness 64
;;
*)
"$SCRIPTPATH/ugreen_leds_cli" ${map[$i]} -off
;;
esac
done

@LeslieFH @daibaron
I'm on TrueNAS 25.10.1 on my DXP4800 plus myself, and it works. I'm extremely tired of this topic. Here’s a FINAL, FINAL step-by-step guide.
Hopefully, this will settle the matter once and for all.
Download the CLI:
https://github.com/miskcoo/ugreen_leds_controller/releases/download/v0.3/ugreen_leds_cli
Place the CLI in a folder on your NAS. (For me, it's on the m.2 SSD, which serves as storage for applications) NOT on the Boot SSD!
/mnt/SSD/ix-applications/setup/DXP_4800LED/HERE!
Grant the CLI the necessary permissions (just do
chmod 777), give it everything. Everyone can do anything with this CLI. It doesn’t bother anyone!Create a
led.shfile with nano and copy and paste this junk into it:Save the
led.shRIGHT NEXT to the CLI./mnt/SDD/ix-applications/setup/DXP_4800LED/HERE!
Give the
led.shalsochmod 777. IT DOESN'T MATTER! IT'S JUST ABOUT LEDs!In TrueNAS under System -> Advanced Settings -> Init/Shutdown Scripts, Create the following to load the i2c-dev module on boot:
Description: Enable i2c-dev
Type: Command
Command: modprobe i2c-dev
When: Pre Init
Create a new Cron Job in TrueNAS under System -> Advanced Settings -> Cron Jobs:
Description: Update Status LEDs on my shitty DXP
Command:
bash /ABSOLUTE/PATH/TO/led.shlike/mnt/SSD/ix-applications/setup/DXP_4800LED/led.sh
Run as User: root
Schedule: Every 5 Minutes
Hide Standard Output: YES
Hide Standard Error: NO
Enabled: YES
Reboot your system after all these steps.
Easy chain: Cronjob calls .sh and .sh calls CLI.
Troubleshoot: