找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
glinet
查看: 1328|回复: 30

网心云OESPlus刷ophub armbian系统前面板硬盘指示灯

[复制链接]
发表于 2025-10-17 17:38 | 显示全部楼层 |阅读模式
本帖最后由 595914151 于 2025-10-17 20:39 编辑

从github上Arthur97172网友分享的OESPlus前面板SATA硬盘指示灯代码通过deepseek精简和修改,得到以下代码,原代码有3种状态(1.插入硬盘亮绿灯;2.无硬盘灭灯;3.读写硬盘闪灯),以下分享的代码前面板硬盘指示灯只显示2种硬盘状态(1.有硬盘亮绿灯;2.无硬盘灭灯),因为原代码要实时检测硬盘状态,代码要一直运行,考虑OESPlus也不需要热拔插硬盘,以下分享的代码只在设备开机启动时检测硬盘状态,大大减少CPU占用。


以下是代码及操作过程,适用armbian系统,其中第3步添加开机运行提供2种方法,2选1即可,无需全部操作:
游客,如果您要查看本帖隐藏内容请回复




2.添加执行权限
sudo chmod +x /usr/local/bin/sata-led.sh

3.添加开机启动(简单)
sudo nano /etc/rc.local

在 exit 0 之前添加你的:
/usr/local/bin/sata-led.sh

3.添加到开机启动(与上面第3步2选1即可):
3.1# 创建systemd服务
sudo cat >  /etc/systemd/system/sata-led.service <<EOF
[Unit]
Description=Setup SATA LED states
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/sata-led.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

3.2# 启用服务
systemctl daemon-reload

sudo systemctl enable sata-led

sudo systemctl start sata-led

sudo systemctl start sata-led



只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
发表于 2025-10-18 12:40 | 显示全部楼层
我也是要刷机明显看看啊啊、
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-19 10:39 | 显示全部楼层
谢谢分享
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-19 13:04 | 显示全部楼层
大佬厉害,收藏以后说不定有用
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-19 13:19 | 显示全部楼层
网心云OESPlus刷ophub armbian系统前面板硬盘指示灯
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-19 14:44 来自手机 | 显示全部楼层
有没有硬解方案啊
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-19 14:48 来自手机 | 显示全部楼层
对了  能顺便分享下  硬盘读写闪灯的版本吗

点评

这个是原作者的代码,一点未改 OES Plus 我自己写个硬盘指示灯脚本 创建脚本 /usr/local/bin/sata-led-daemon.sh sudo nano /usr/local/bin/sata-led-daemon.sh 复制下面脚本内容: #!/usr/bin/env bash # sata-le  详情 回复 发表于 2025-10-19 16:42
给你发个deepseek给优化过的试试,SLEEP_INTERVAL=2 # 增加到2秒,这个是调整检测时间的,你自己测试下用几秒比较完美,时间越短,对CPU占用越多,但这玩意对CPU占用很低。 #!/usr/bin/env bash # sata-led.sh #  详情 回复 发表于 2025-10-19 16:20
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-19 16:20 | 显示全部楼层
xxgg 发表于 2025-10-19 14:48
对了  能顺便分享下  硬盘读写闪灯的版本吗

给你发个deepseek给优化过的试试,SLEEP_INTERVAL=2  # 增加到2秒,这个是调整检测时间的,你自己测试下用几秒比较完美,时间越短,对CPU占用越多,但这玩意对CPU占用很低。

#!/usr/bin/env bash
# sata-led.sh
# 控制逻辑:
# - 无盘:保持设备树默认 ataX(LED不亮)
# - 有盘空闲:切换 default-on (长亮)
# - 有盘读写:切回 ataX (闪烁)
set -euo pipefail

# 配置 - 更长的检测间隔
LEDS=( "green:disk" "green:disk_1" "green:disk_2" )
ATAS=( "ata1" "ata2" "ata3" )
SLEEP_INTERVAL=2  # 增加到2秒

declare -A last_count
declare -A device_state
declare -A current_devices

set_trigger() {
    local led="$1"
    local trig="$2"
    local p="/sys/class/leds/$led"
    [[ -d "$p" ]] || return 1
    echo "$trig" > "$p/trigger" 2>/dev/null
}

find_device_by_ata() {
    local ata="$1"
   
    for bd in /sys/block/sd*; do
        [[ -e "$bd/device" ]] || continue
        local path=$(readlink -f "$bd/device" 2>/dev/null) || continue
        [[ "$path" == *"/$ata/"* ]] && { basename "$bd"; return 0; }
    done
    return 1
}

cleanup() {
    for i in "${!ATAS[@]}"; do
        set_trigger "${LEDS[$i]}" "${ATAS[$i]}"
    done
    exit 0
}

trap cleanup SIGTERM SIGINT

while true; do
    for i in "${!ATAS[@]}"; do
        ata="${ATAS[$i]}"
        led="${LEDS[$i]}"
        
        dev=$(find_device_by_ata "$ata") || dev=""
        [[ "$dev" == "${current_devices[$i]:-}" ]] || current_devices[$i]="$dev"
        
        if [[ -z "$dev" ]]; then
            [[ "${device_state[$i]:-}" == "absent" ]] || {
                set_trigger "$led" "$ata"
                device_state[$i]="absent"
            }
            continue
        fi
        
        statfile="/sys/block/$dev/stat"
        [[ -r "$statfile" ]] && {
            current_io=$(awk '{print $1+$5}' "$statfile" 2>/dev/null)
            current_io=${current_io:-0}
            last_io=${last_count[$i]:-0}
            
            if [[ "$current_io" -gt "$last_io" ]]; then
                [[ "${device_state[$i]:-}" == "active" ]] || {
                    set_trigger "$led" "$ata"
                    device_state[$i]="active"
                }
            else
                [[ "${device_state[$i]:-}" == "idle" ]] || {
                    set_trigger "$led" "default-on"
                    device_state[$i]="idle"
                }
            fi
            last_count[$i]="$current_io"
        }
    done
    sleep "$SLEEP_INTERVAL"
done
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-19 16:42 | 显示全部楼层
xxgg 发表于 2025-10-19 14:48
对了  能顺便分享下  硬盘读写闪灯的版本吗

这个是原作者的代码,一点未改
OES Plus 我自己写个硬盘指示灯脚本

创建脚本 /usr/local/bin/sata-led-daemon.sh
sudo nano /usr/local/bin/sata-led-daemon.sh

复制下面脚本内容:

#!/usr/bin/env bash
# sata-led-daemon.sh
# 控制逻辑:
# - 无盘:保持设备树默认 ataX(LED不亮)
# - 有盘空闲:切换 default-on (长亮)
# - 有盘读写:切回 ataX (闪烁)

# log信息,如需打开请取消下面3个注释!
#LOG=/var/log/sata-led-daemon.log
#exec >>"$LOG" 2>&1
#echo "=== $(date) sata-led-daemon starting ==="

LEDS=( "green:disk" "green:disk_1" "green:disk_2" )
ATAS=( "ata1" "ata2" "ata3" )

declare -A last_count
declare -A state

set_trigger() {
    local led="$1"
    local trig="$2"
    local p="/sys/class/leds/$led"
    [ -d "$p" ] || return
    echo "$trig" > "$p/trigger" 2>/dev/null || true
}

while true; do
    for i in "${!ATAS[@]}"; do
        ata="${ATAS[$i]}"
        led="${LEDS[$i]}"

        # 找出对应的设备
        dev=$(for bd in /sys/block/*; do
            [ -e "$bd/device" ] || continue
            path=$(readlink -f "$bd/device" 2>/dev/null) || continue
            if echo "$path" | grep -q "$ata"; then
                basename "$bd"
                break
            fi
        done)

        if [ -z "$dev" ]; then
            # 无盘 → 保持默认 ataX
            if [ "${state[$i]}" != "absent" ]; then
                echo "$(date) ata=$ata -> no dev, keep $ata for $led"
                set_trigger "$led" "$ata"
                state[$i]="absent"
            fi
            continue
        fi

        statfile="/sys/block/$dev/stat"
        cur=$(awk '{print $1+$5}' "$statfile" 2>/dev/null)
        [ -z "$cur" ] && cur=0
        last=${last_count[$i]:-0}

        if [ "$cur" -gt "$last" ]; then
            # 活动 → 切回 ataX
            if [ "${state[$i]}" != "active" ]; then
                echo "$(date) ata=$ata dev=$dev activity ($last -> $cur) -> set $ata for $led"
                set_trigger "$led" "$ata"
                state[$i]="active"
            fi
        else
            # 空闲 → default-on
            if [ "${state[$i]}" != "idle" ]; then
                echo "$(date) ata=$ata dev=$dev idle ($last -> $cur) -> DEFAULT-ON for $led"
                set_trigger "$led" "default-on"
                state[$i]="idle"
            fi
        fi

        last_count[$i]="$cur"
    done
    sleep 1
done
赋予脚本可执行权限
sudo chmod +x /usr/local/bin/sata-led-daemon.sh

创建systemd 单元(守护进程) /etc/systemd/system/sata-led-daemon.service
sudo nano /etc/systemd/system/sata-led-daemon.service

复制下面的脚本

[Unit]
Description=SATA LED Auto Control Daemon
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sata-led-daemon.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
加载 systemd,启用并启动 daemon
sudo systemctl daemon-reload
sudo systemctl enable --now sata-led-daemon.service
查看进程状态
# 实时日志(脚本也写入 /var/log/sata-led-daemon.log)
sudo journalctl -u sata-led-daemon.service -f
tail -n 200 /var/log/sata-led-daemon.log

#如果日志记录功能关闭请用如下命令查看
journalctl -u sata-led-daemon.service -f
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-22 23:03 | 显示全部楼层
谢谢分享
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-23 18:06 | 显示全部楼层
老大威武
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-23 19:08 | 显示全部楼层
我的oesp网口还是不正常,插上会造成整个网络的超时。

点评

我这里说的是硬盘指示灯,网口按说刷ophub的固件,目前都没问题,只能插靠近USB的那个网口。不能2个网口都插  详情 回复 发表于 2025-10-24 10:12
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-24 10:12 | 显示全部楼层
plm7788 发表于 2025-10-23 19:08
我的oesp网口还是不正常,插上会造成整个网络的超时。

我这里说的是硬盘指示灯,网口按说刷ophub的固件,目前都没问题,只能插靠近USB的那个网口。不能2个网口都插
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-24 13:58 | 显示全部楼层
现在刷上了ubuntu包了,插网线连接不上
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

发表于 2025-10-27 13:42 | 显示全部楼层
违禁词语,请勿再发啊
只谈技术、莫论政事!(点击见详情) | 互相尊重、友善交流、切勿过度反应、玻璃心。胡乱输入灌水等操作将会被封禁ID。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-12-5 14:26

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表