去年购入绿联DX4600,原生是基于opwrt底层的魔改系统,入门使用也没什么问题。今年6月官方发布基于debian的新系统,体验了一下是按照群晖的逻辑来的,谁料系统极度不完整,问题多多。于是就想干脆直接黑裙不就解决了吗,再怎么说,群晖的口碑大家都是好评的。关于绿联盲操安装黑裙,可以参考这个文章:DX4600安装可以核显硬解的黑群晖(保姆级教程)
我是使用的RROrg/rr: Redpill Recovery (arpl-i18n) (github.com)引导文件。
请更新RR版本到24.6.9及以上,更新 i2c-i801.ko 对 Ice Lake-N, Alder Lake-P/M, Raptor Lake-S, Meteor Lake-P/SoC-S/PCH-S, Birch Stream 的兼容(only epyc7002)。led控制工具只能在root权限下运行。
同时支持以下设备:
- UGREEN DX4600 Pro
- UGREEN DXP2800
- UGREEN DXP4800 Plus
- UGREEN DXP6800 Pro
- UGREEN DXP8800 Plus
一、前置条件:
1.RR引导中
如果没设置过模块,默认是全选。
2.检查验证
SSH登陆NAS,并切换到root帐号:
sudo -i # 输入你帐户密码
检查加载的i2c模块:
lsmod | grep i2c
i2c_algo_bit 16384 1 i915
i2c_i801 28672 0
二、功能实现
电源:常亮白灯;
LAN灯:5分种ping一下网关,连通白灯,失败红色闪烁;
DISK灯:检查有几个硬盘,对应的灯位亮绿灯,如果温度超过50度,红色闪烁;
(可以自定义按自己心情改色)
计划任务-新增-计划中的任务-用户自定义的脚本
任务名称 ugreen_led 用户账号为 root
计划中勾选 在同一天内继续运行,第5分钟重复一次。
任务设置-运行命令 中粘贴以下脚本:
如果不要输出,请注释掉所有echo行
#!/bin/bash
#set -x
# 初始化设备状态数组
devices=(w x x x x x x x x x)
# 初始化设备映射
map=(power netdev disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8)
# 检查网络状态
gw=$(ip route | awk '/default/ { print $3 }')
if ping -q -c 1 -W 1 $gw >/dev/null; then
devices[1]=w
else
devices[1]=r
fi
# 将 sataX 映射到硬件设备
declare -A hwmap
echo "映射设备中..."
for devpath in /sys/block/sata*; do
dev=$(basename $devpath)
hctl=$(basename $(readlink $devpath/device))
hwmap[$dev]=${hctl:0:1}
echo "将 $dev 映射到 ${hctl:0:1}"
done
# 打印硬件映射 (hwmap) 以供验证
echo "硬件映射 (hwmap):"
for key in "${!hwmap[@]}"; do
echo "$key: ${hwmap[$key]}"
done
# 检查硬盘状态并更新设备状态数组,方法一(如果硬盘全部支持SMART功能)
#echo "检查磁盘状态中..."
#for dev in "${!hwmap[@]}"; do
# 使用 smartctl 检查硬盘状态
# if smartctl -H /dev/$dev &> /dev/null; then
# status="ONLINE"
# else
# status="OFFLINE"
# fi
# index=$((${hwmap[$dev]} + 2))
# echo "设备 $dev 状态 $status 映射到索引 $index"
#
# if [ $status = "ONLINE" ]; then
# devices[$index]=g
# else
# devices[$index]=x
# fi
#done
# 检查硬盘状态并更新设备状态数组,方法二
echo "检查磁盘状态中..."
for dev in "${!hwmap[@]}"; do
# 使用 udevadm 检查硬盘状态
if udevadm info --query=all --name=/dev/$dev &> /dev/null; then
status="ONLINE"
else
status="OFFLINE"
fi
index=$((${hwmap[$dev]} + 2))
echo "设备 $dev 状态 $status 映射到索引 $index"
if [ $status = "ONLINE" ]; then
devices[$index]=g
else
devices[$index]=x
fi
done
# 根据硬盘温度设置disk灯状态,50度高温红色闪烁提醒
for i in "${!hwmap[@]}"; do
index=$((${hwmap[$i]} + 2))
hdd_temp=$(cat /run/synostorage/disks/sata$((${hwmap[$i]} + 1))/temperature)
if [ "$hdd_temp" -ge 50 ]; then
devices[$index]=r
else
devices[$index]=g
fi
done
# 打印设备状态数组(可选,用于调试)
#echo "设备状态数组:${devices[@]}"
# 输出最终设备状态并控制 LED 灯
echo "最终设备状态:"
for i in "${!devices[@]}"; do
echo "$i: ${devices[$i]}"
case "${devices[$i]}" in
w)
echo "设置 ${map[$i]} 为白色常亮"
ugreen_leds_cli ${map[$i]} -color 255 255 255 -on -brightness 64
;;
g)
echo "设置 ${map[$i]} 为绿色常亮"
ugreen_leds_cli ${map[$i]} -color 0 255 0 -on -brightness 64
;;
r)
echo "设置 ${map[$i]} 为红色闪烁"
ugreen_leds_cli ${map[$i]} -color 255 0 0 -blink 400 600 -brightness 64
;;
x)
echo "关闭 ${map[$i]}"
ugreen_leds_cli ${map[$i]} -off
;;
esac
done
参考
https://github.com/meyergru/ugreen_dxp8800_leds_controller
https://github.com/miskcoo/ugreen_dx4600_leds_controller
https://blog.miskcoo.com/2024/05/ugreen-dx4600-pro-led-controller
https://gist.github.com/Kerryliu/c380bb6b3b69be5671105fc23e19b7e8
https://imnks.com/10101.html
评论区