[Internal testing communication] 磐石系统管理脚本
Tofloor
poster avatar
deepin
2025-05-28 16:59
Author

DEEPIN25BATE-2025-05-28-16-52-07_看图王.png

论坛积分不够,挣点积分agree

#!/bin/bash

# Deepin v25 磐石系统管理脚本-By WqlSoft
# 功能:1.解除磐石系统 2.恢复磐石系统 3.查询磐石系统状态 4.重启电脑
# sudo deepin-immutable-writable enable -d /usr                  # 临时启用 /usr 可写
# sudo deepin-immutable-writable enable -d /var                  # 临时启用 /var 可写
# sudo deepin-immutable-writable set whitelist /usr              # 永久启用 /usr 可写
# sudo mount -o remount,rw --make-shared /usr                     #重新挂载 /usr 目录
# sudo apt install deepin-immutable-ctl deepin-immutable-boot     #重新挂载
# sudo update-initramfs -k all -u                                 #重新挂载
# sudo mkdir /usr/abc         sudo mkdir /var/abc                 #测试是否能写入文件
# sudo deepin-immutable-writable disable                          #恢复磐石系统到保护状态


# 250528  加入目录可写测试
# 250528  系统分区为自动分区,在vm虚拟机中测试可用。手动分区未测试!!!
# 250627  Deepin V25 正式版可用,在vm虚拟机中测试可用。手动分区未测试!!!

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色

# 显示欢迎信息
echo -e "${YELLOW}=== Deepin v25 磐石系统管理工具 ===${NC}"
echo

# 检查目录是否可写(使用sudo)
check_writable() {
    if sudo [ -w "$1" ]; then
        echo -e "${GREEN}可写${NC}"
    else
        echo -e "${RED}只读${NC}"
    fi
}

# 显示当前状态
echo -e "${GREEN}当前系统磐石状态:${NC}"
deepin-immutable-writable status | sed -e 's/Enable/是否已关闭磐石/g' -e 's/Booted/启动状态/g' -e 's/Whitelist/白名单/g' -e 's/ClearAfterReboot/重启后清除/g' -e 's/CleanData/清理数据/g' -e 's/OverlayDirs/挂载目录/g' -e 's/OverlayAllDirs/挂载所有目录/g' -e 's/false/否/g' -e 's/true/是/g'

echo -e "\n${GREEN}关键目录写入状态:${NC}"
echo "/usr: $(check_writable /usr)"
echo "/etc: $(check_writable /etc)"
echo "/opt: $(check_writable /opt)"
echo "/boot: $(check_writable /boot)"
echo "/var: $(check_writable /var)"
echo

# 显示菜单选项
show_menu() {
    echo -e "${YELLOW}请选择操作:${NC}"
    echo "1. 解除磐石系统 (/usr目录可写)"
    echo "2. 恢复磐石系统 (/usr目录只读)"
    echo "3. 查询磐石系统状态"
    echo "4. 重启电脑"
    echo "5. 退出"
    echo
}

# 执行选项
execute_option() {
    case $1 in
        1)
            echo -e "${GREEN}正在解除磐石系统...${NC}"
            sudo deepin-immutable-writable enable -a -y
    
            sudo mount -o remount,rw --make-shared /usr
            echo -e "${GREEN}操作完成,请重启系统使更改生效!${NC}"
            read -n1 -p "是否重启电脑? [y/n] " ans && [[ $ans == [Yy] ]] && reboot || echo "继续执行其他任务..."
            ;;
        2)
            echo -e "${GREEN}正在恢复磐石系统...${NC}"
            sudo deepin-immutable-writable disable -y
            echo -e "${GREEN}操作完成,请重启系统使更改生效!${NC}"
            read -n1 -p "是否重启电脑? [y/n] " ans && [[ $ans == [Yy] ]] && reboot || echo "继续执行其他任务..."
            ;;
        3)
            echo -e "${GREEN}查询磐石系统状态:${NC}"
            
            deepin-immutable-writable status | sed -e 's/Enable/是否已关闭磐石/g' -e 's/Booted/启动状态/g' -e 's/Whitelist/白名单/g' -e 's/ClearAfterReboot/重启后清除/g' -e 's/CleanData/清理数据/g' -e 's/OverlayDirs/挂载目录/g' -e 's/OverlayAllDirs/挂载所有目录/g' -e 's/false/否/g' -e 's/true/是/g'
    
            echo -e "\n${GREEN}关键目录写入状态:${NC}"
            echo "/usr: $(check_writable /usr)"
            echo "/etc: $(check_writable /etc)"
            echo "/opt: $(check_writable /opt)"
            echo "/boot: $(check_writable /boot)"
            echo "/var: $(check_writable /var)"
            ;;
        4)
            echo -e "${YELLOW}即将重启电脑...${NC}"
            read -s -n1 -rp $'"确定要重启吗 [Y/N]?' confirm
            if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
                sudo reboot
            else
                echo -e "${GREEN}已取消重启${NC}"
            fi
            ;;
        5)
            echo -e "${GREEN}退出系统...${NC}"
            exit 0
            ;;
        *)
            echo -e "${RED}错误:无效的选项,请重新输入!${NC}"
            ;;
    esac
}

# 主循环
while true; do
    show_menu
    read -p "请输入选项 (1-5): " choice
    echo
    execute_option $choice
    echo
    read -p "按任意键继续..." -n 1 -s
    clear
done  
Reply Favorite View the author
All Replies
过路人而已
deepin
2025-05-28 18:54
#1

大佬厉害啊!!!捡到宝了like

Reply View the author
UltraBlue
deepin
2025-05-28 19:01
#2

挺好的

Reply View the author
🐾深邃流年ₒₓ
deepin
2025-05-28 20:01
#3

大佬厉害!

Reply View the author
神末shenmo
deepin
Spark-App
Solutions Team Moderator
2025-06-05 16:47
#4

让dpsk改成zenity的了,这就算是个图形界面了

#!/bin/bash

# Deepin v25 Beta 磐石系统管理脚本-By WqlSoft
# 功能:1.解除磐石系统 2.恢复磐石系统 3.查询磐石系统状态 4.重启电脑
# 250528  加入目录可写测试
# 250528  系统分区为自动分区,在vm虚拟机中测试可用。手动分区未测试!!!

# 检查是否安装了zenity
if ! command -v zenity &> /dev/null; then
    echo "错误:需要安装zenity才能运行此脚本"
    echo "请执行:sudo apt install zenity"
    exit 1
fi

# 颜色定义(用于终端输出,zenity不使用这些)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色

# 检查目录是否可写(使用sudo)
check_writable() {
    if sudo [ -w "$1" ]; then
        echo "可写"
    else
        echo "只读"
    fi
}

# 获取磐石状态信息
get_status_info() {
    deepin-immutable-writable status | sed -e 's/Enable/启用状态/g' -e 's/Booted/启动状态/g' -e 's/Whitelist/白名单/g' -e 's/ClearAfterReboot/重启后清除/g' -e 's/CleanData/清理数据/g' -e 's/OverlayDirs/挂载目录/g' -e 's/OverlayAllDirs/挂载所有目录/g' -e 's/false/否/g' -e 's/true/是/g'
}

# 显示状态信息
show_status() {
    status_info=$(get_status_info)
    dir_info=$(echo -e "\n关键目录写入状态:\n/usr: $(check_writable /usr)\n/etc: $(check_writable /etc)\n/opt: $(check_writable /opt)\n/boot: $(check_writable /boot)\n/var: $(check_writable /var)")
    zenity --height=500 --info --title="磐石系统状态" --text="当前系统磐石状态:\n${status_info}\n${dir_info}" --width=500
}

# 主菜单
main_menu() {
    while true; do
        choice=$(zenity --list \
            --title="Deepin v25 Beta 磐石系统管理工具" \
            --text="请选择要执行的操作:" \
            --column="选项" --column="说明" \
            "1" "解除磐石系统 (/usr目录可写)" \
            "2" "恢复磐石系统 (/usr目录只读)" \
            "3" "查询磐石系统状态" \
            "4" "重启电脑" \
            "5" "退出" \
            --width=500 --height=500)
        
        if [ $? -ne 0 ]; then
            exit 0
        fi

        case $choice in
            1)
                zenity --height=500 --question --title="确认操作" --text="确定要解除磐石系统吗?" --width=300
                if [ $? -eq 0 ]; then
                    (
                        echo "10"
                        echo "# 正在解除磐石系统..."
                        sudo deepin-immutable-writable enable -a -y
                        echo "100"
                        echo "# 操作完成,请重启系统使更改生效!"
                    ) | zenity --height=500 --progress --title="操作中" --text="正在处理..." --percentage=0 --auto-close
                    if [ $? -ne 0 ]; then
                        zenity --height=500 --error --text="操作可能未完全完成" --width=300
                    fi
                fi
                ;;
            2)
                zenity --height=500 --question --title="确认操作" --text="确定要恢复磐石系统吗?" --width=300
                if [ $? -eq 0 ]; then
                    (
                        echo "10"
                        echo "# 正在恢复磐石系统..."
                        sudo deepin-immutable-writable disable -y
                        echo "100"
                        echo "# 操作完成,请重启系统使更改生效!"
                    ) | zenity --height=500 --progress --title="操作中" --text="正在处理..." --percentage=0 --auto-close
                    if [ $? -ne 0 ]; then
                        zenity --height=500 --error --text="操作可能未完全完成" --width=300
                    fi
                fi
                ;;
            3)
                show_status
                ;;
            4)
                zenity --height=500 --question --title="确认重启" --text="确定要重启电脑吗?" --width=300
                if [ $? -eq 0 ]; then
                    sudo reboot
                fi
                ;;
            5)
                exit 0
                ;;
            *)
                zenity --height=500 --error --text="无效的选项" --width=200
                ;;
        esac
    done
}

# 初始显示状态信息
show_status

# 显示主菜单
main_menu
Reply View the author
deepin
2025-06-20 10:24
#5
神末shenmo

让dpsk改成zenity的了,这就算是个图形界面了

#!/bin/bash

# Deepin v25 Beta 磐石系统管理脚本-By WqlSoft
# 功能:1.解除磐石系统 2.恢复磐石系统 3.查询磐石系统状态 4.重启电脑
# 250528  加入目录可写测试
# 250528  系统分区为自动分区,在vm虚拟机中测试可用。手动分区未测试!!!

# 检查是否安装了zenity
if ! command -v zenity &> /dev/null; then
    echo "错误:需要安装zenity才能运行此脚本"
    echo "请执行:sudo apt install zenity"
    exit 1
fi

# 颜色定义(用于终端输出,zenity不使用这些)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色

# 检查目录是否可写(使用sudo)
check_writable() {
    if sudo [ -w "$1" ]; then
        echo "可写"
    else
        echo "只读"
    fi
}

# 获取磐石状态信息
get_status_info() {
    deepin-immutable-writable status | sed -e 's/Enable/启用状态/g' -e 's/Booted/启动状态/g' -e 's/Whitelist/白名单/g' -e 's/ClearAfterReboot/重启后清除/g' -e 's/CleanData/清理数据/g' -e 's/OverlayDirs/挂载目录/g' -e 's/OverlayAllDirs/挂载所有目录/g' -e 's/false/否/g' -e 's/true/是/g'
}

# 显示状态信息
show_status() {
    status_info=$(get_status_info)
    dir_info=$(echo -e "\n关键目录写入状态:\n/usr: $(check_writable /usr)\n/etc: $(check_writable /etc)\n/opt: $(check_writable /opt)\n/boot: $(check_writable /boot)\n/var: $(check_writable /var)")
    zenity --height=500 --info --title="磐石系统状态" --text="当前系统磐石状态:\n${status_info}\n${dir_info}" --width=500
}

# 主菜单
main_menu() {
    while true; do
        choice=$(zenity --list \
            --title="Deepin v25 Beta 磐石系统管理工具" \
            --text="请选择要执行的操作:" \
            --column="选项" --column="说明" \
            "1" "解除磐石系统 (/usr目录可写)" \
            "2" "恢复磐石系统 (/usr目录只读)" \
            "3" "查询磐石系统状态" \
            "4" "重启电脑" \
            "5" "退出" \
            --width=500 --height=500)
        
        if [ $? -ne 0 ]; then
            exit 0
        fi

        case $choice in
            1)
                zenity --height=500 --question --title="确认操作" --text="确定要解除磐石系统吗?" --width=300
                if [ $? -eq 0 ]; then
                    (
                        echo "10"
                        echo "# 正在解除磐石系统..."
                        sudo deepin-immutable-writable enable -a -y
                        echo "100"
                        echo "# 操作完成,请重启系统使更改生效!"
                    ) | zenity --height=500 --progress --title="操作中" --text="正在处理..." --percentage=0 --auto-close
                    if [ $? -ne 0 ]; then
                        zenity --height=500 --error --text="操作可能未完全完成" --width=300
                    fi
                fi
                ;;
            2)
                zenity --height=500 --question --title="确认操作" --text="确定要恢复磐石系统吗?" --width=300
                if [ $? -eq 0 ]; then
                    (
                        echo "10"
                        echo "# 正在恢复磐石系统..."
                        sudo deepin-immutable-writable disable -y
                        echo "100"
                        echo "# 操作完成,请重启系统使更改生效!"
                    ) | zenity --height=500 --progress --title="操作中" --text="正在处理..." --percentage=0 --auto-close
                    if [ $? -ne 0 ]; then
                        zenity --height=500 --error --text="操作可能未完全完成" --width=300
                    fi
                fi
                ;;
            3)
                show_status
                ;;
            4)
                zenity --height=500 --question --title="确认重启" --text="确定要重启电脑吗?" --width=300
                if [ $? -eq 0 ]; then
                    sudo reboot
                fi
                ;;
            5)
                exit 0
                ;;
            *)
                zenity --height=500 --error --text="无效的选项" --width=200
                ;;
        esac
    done
}

# 初始显示状态信息
show_status

# 显示主菜单
main_menu

感谢大佬。

Reply View the author
猫粮
deepin
2025-06-20 10:49
#6

好家伙,支持。

说实话这本应该是官方该做的事

Reply View the author
jjcui8595
deepin
Resources Team Moderator
2025-06-28 20:33
#7

like

Reply View the author
wcs4221
deepin beta test group
2025-06-29 20:07
#8
神末shenmo

让dpsk改成zenity的了,这就算是个图形界面了

#!/bin/bash

# Deepin v25 Beta 磐石系统管理脚本-By WqlSoft
# 功能:1.解除磐石系统 2.恢复磐石系统 3.查询磐石系统状态 4.重启电脑
# 250528  加入目录可写测试
# 250528  系统分区为自动分区,在vm虚拟机中测试可用。手动分区未测试!!!

# 检查是否安装了zenity
if ! command -v zenity &> /dev/null; then
    echo "错误:需要安装zenity才能运行此脚本"
    echo "请执行:sudo apt install zenity"
    exit 1
fi

# 颜色定义(用于终端输出,zenity不使用这些)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色

# 检查目录是否可写(使用sudo)
check_writable() {
    if sudo [ -w "$1" ]; then
        echo "可写"
    else
        echo "只读"
    fi
}

# 获取磐石状态信息
get_status_info() {
    deepin-immutable-writable status | sed -e 's/Enable/启用状态/g' -e 's/Booted/启动状态/g' -e 's/Whitelist/白名单/g' -e 's/ClearAfterReboot/重启后清除/g' -e 's/CleanData/清理数据/g' -e 's/OverlayDirs/挂载目录/g' -e 's/OverlayAllDirs/挂载所有目录/g' -e 's/false/否/g' -e 's/true/是/g'
}

# 显示状态信息
show_status() {
    status_info=$(get_status_info)
    dir_info=$(echo -e "\n关键目录写入状态:\n/usr: $(check_writable /usr)\n/etc: $(check_writable /etc)\n/opt: $(check_writable /opt)\n/boot: $(check_writable /boot)\n/var: $(check_writable /var)")
    zenity --height=500 --info --title="磐石系统状态" --text="当前系统磐石状态:\n${status_info}\n${dir_info}" --width=500
}

# 主菜单
main_menu() {
    while true; do
        choice=$(zenity --list \
            --title="Deepin v25 Beta 磐石系统管理工具" \
            --text="请选择要执行的操作:" \
            --column="选项" --column="说明" \
            "1" "解除磐石系统 (/usr目录可写)" \
            "2" "恢复磐石系统 (/usr目录只读)" \
            "3" "查询磐石系统状态" \
            "4" "重启电脑" \
            "5" "退出" \
            --width=500 --height=500)
        
        if [ $? -ne 0 ]; then
            exit 0
        fi

        case $choice in
            1)
                zenity --height=500 --question --title="确认操作" --text="确定要解除磐石系统吗?" --width=300
                if [ $? -eq 0 ]; then
                    (
                        echo "10"
                        echo "# 正在解除磐石系统..."
                        sudo deepin-immutable-writable enable -a -y
                        echo "100"
                        echo "# 操作完成,请重启系统使更改生效!"
                    ) | zenity --height=500 --progress --title="操作中" --text="正在处理..." --percentage=0 --auto-close
                    if [ $? -ne 0 ]; then
                        zenity --height=500 --error --text="操作可能未完全完成" --width=300
                    fi
                fi
                ;;
            2)
                zenity --height=500 --question --title="确认操作" --text="确定要恢复磐石系统吗?" --width=300
                if [ $? -eq 0 ]; then
                    (
                        echo "10"
                        echo "# 正在恢复磐石系统..."
                        sudo deepin-immutable-writable disable -y
                        echo "100"
                        echo "# 操作完成,请重启系统使更改生效!"
                    ) | zenity --height=500 --progress --title="操作中" --text="正在处理..." --percentage=0 --auto-close
                    if [ $? -ne 0 ]; then
                        zenity --height=500 --error --text="操作可能未完全完成" --width=300
                    fi
                fi
                ;;
            3)
                show_status
                ;;
            4)
                zenity --height=500 --question --title="确认重启" --text="确定要重启电脑吗?" --width=300
                if [ $? -eq 0 ]; then
                    sudo reboot
                fi
                ;;
            5)
                exit 0
                ;;
            *)
                zenity --height=500 --error --text="无效的选项" --width=200
                ;;
        esac
    done
}

# 初始显示状态信息
show_status

# 显示主菜单
main_menu

很好用。支持了smirk

Reply View the author