ubuntu
カテゴリ
Midnight Commander (mc) メニューカスタマイズ
2026/04/24 17時maintenance
■menuファイルを置換えてメニューの追加設定
mc メニューにダイアログを表示させる「dialog」の、インストール
which dialog || sudo apt install dialog -y

menu ファイルの作成
nano ~/.config/mc/menu

c       Chown to 1000:1000 (Recursive)
        TARGET="%p"
        dialog --yesno "以下を再帰的に 1000:1000 に変更しますか?\n\n${TARGET}" 9 60
        if [ $? -eq 0 ]; then
            RESULT=$(sudo chown -R 1000:1000 "${TARGET}" 2>&1)
            if [ $? -eq 0 ]; then
                dialog --msgbox "変更しました:\n${TARGET}" 7 60
            else
                dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
            fi
        fi
        clear

x       chmod +x (実行権限付与)
        TARGET="%p"
        dialog --yesno "以下に実行権限(+x)を付与しますか?\n\n${TARGET}" 9 60
        if [ $? -eq 0 ]; then
            RESULT=$(sudo chmod +x "${TARGET}" 2>&1)
            if [ $? -eq 0 ]; then
                dialog --msgbox "実行権限を付与しました:\n${TARGET}" 7 60
            else
                dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
            fi
        fi
        clear

H       HLS管理
        CHOICE=$(dialog --menu "HLS管理" 14 50 4 \
            h "BS-NHK 起動(約90秒後に視聴可能)" \
            o "BS-NHK 停止" \
            j "BS-NHK → サブチャンネル切替" \
            k "キャッシュクリア(BS-NHK 再起動)" \
            3>&1 1>&2 2>&3)
        case $CHOICE in
            h)
                RESULT=$(sudo systemctl start hls-bs1 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "HLS BS-NHKを起動しました\n約90秒後に視聴可能です" 7 45
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
                fi
                ;;
            o)
                RESULT=$(sudo systemctl stop hls-bs1 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "HLS BS-NHKを停止しました" 6 40
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
                fi
                ;;
            j)
                RESULT=$(sudo systemctl stop hls-bs1 2>&1; sudo systemctl start hls-bs2 2>&1)
                STATUS=$?
                if [ $STATUS -eq 0 ]; then
                    dialog --msgbox "BS-NHK⇒サブ切替が完了しました" 6 45
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
                fi
                ;;
            k)
                dialog --yesno "HLS BS-NHKを再起動してキャッシュをクリアします\n視聴中の場合は約90秒切断されます。続行しますか?" 8 55
                if [ $? -eq 0 ]; then
                    RESULT=$(sudo systemctl stop hls-bs1 2>&1)
                    sleep 5
                    RESULT2=$(sudo systemctl start hls-bs1 2>&1)
                    if [ $? -eq 0 ]; then
                        dialog --msgbox "キャッシュクリア完了\n約90秒後に視聴可能になります" 7 45
                    else
                        dialog --msgbox "エラーが発生しました:\n\n${RESULT2}" 8 60
                    fi
                fi
                ;;
        esac
        clear

v       TV予約確認
        RESULT=$(curl -s "http://localhost:8888/api/reserves?limit=5&isHalfWidth=true" | python3 /mnt/data/backup/scripts/tv_reserves.py)
        echo "$RESULT" | dialog --programbox "TV予約確認" 15 60
        clear

p       コンテナ起動確認・自動復旧
        RESULT=$(/mnt/data/backup/scripts/check_containers.sh 2>&1)
        echo "$RESULT" | dialog --programbox "コンテナ起動確認・自動復旧" 20 60
        clear

R       コンテナ再起動
        CHOICE=$(dialog --menu "コンテナ再起動" 17 55 6 \
            A "AdGuard Home" \
            e "EPGStation(録画中チェック付)" \
            m "Mirakurun + EPGStation(録画中チェック付)" \
            f "vafee2-lounge" \
            i "Immich" \
            u "Uptime Kuma" \
            3>&1 1>&2 2>&3)
        case $CHOICE in
            A)
                RESULT=$(docker restart adguardhome 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "AdGuard Home を再起動しました\n\n${RESULT}" 8 50
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 50
                fi
                ;;
            e)
                RECORDING=$(curl -s "http://localhost:8888/api/recording?limit=1&isHalfWidth=true" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total',0))")
                if [ "$RECORDING" -gt 0 ]; then
                    dialog --msgbox "録画中のためスキップしました" 6 40
                else
                    RESULT=$(docker restart epgstation 2>&1)
                    if [ $? -eq 0 ]; then
                        dialog --msgbox "EPGStation を再起動しました\n\n${RESULT}" 8 50
                    else
                        dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 50
                    fi
                fi
                ;;
            m)
                RECORDING=$(curl -s "http://localhost:8888/api/recording?limit=1&isHalfWidth=true" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total',0))")
                if [ "$RECORDING" -gt 0 ]; then
                    dialog --msgbox "録画中のためスキップしました" 6 40
                else
                    RESULT=$(docker restart mirakurun 2>&1)
                    if [ $? -eq 0 ]; then
                        dialog --msgbox "Mirakurun を再起動しました\n\n${RESULT}\n\n1分後にEPGStationを再起動します\n(この画面は自動で閉じます)" 10 55
                        sleep 60
                        RESULT2=$(docker restart epgstation 2>&1)
                        if [ $? -eq 0 ]; then
                            dialog --msgbox "EPGStation を再起動しました\n\n${RESULT2}\n\nEPG反映まで数分かかります" 9 55
                        else
                            dialog --msgbox "EPGStation 再起動でエラーが発生しました:\n\n${RESULT2}" 8 55
                        fi
                    else
                        dialog --msgbox "Mirakurun 再起動でエラーが発生しました:\n\n${RESULT}" 8 55
                    fi
                fi
                ;;
            f)
                RESULT=$(cd /mnt/data/docker/Python/vafee2_project && docker compose restart 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "lounge を再起動しました\n\n${RESULT}" 8 50
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 50
                fi
                ;;
            i)
                RESULT=$(docker restart immich_server immich_microservices 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "immich を再起動しました\n\n${RESULT}" 8 50
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 50
                fi
                ;;
            u)
                RESULT=$(docker restart uptime-kuma 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "Uptime Kuma を再起動しました\n\n${RESULT}" 8 50
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 50
                fi
                ;;
        esac
        clear

w       スワップ使用量確認
        RESULT=$(free -h && echo "---" && for i in /proc/*/status; do awk '/VmSwap|Name/{printf $2 " "}' $i; echo; done | sort -k2 -rn | head -10)
        echo "$RESULT" | dialog --programbox "スワップ使用量" 20 60
        clear

t       タスクスケジューラ
        sudo crontab -e
        clear

d       SSDの温度計測
        sudo smartctl -a -d sat /dev/sdb | grep -i -E "temp|model|serial|health" | dialog --programbox "SSD 状態" 12 60
        clear

b       Vaultwarden・PassManager Backup and Restore
        CHOICE=$(dialog --menu "バックアップメニュー" 15 50 4 \
            1 "今すぐバックアップ実行" \
            2 "バックアップ一覧確認" \
            3 "データ復旧" \
            4 "キャンセル" \
            3>&1 1>&2 2>&3)
        case $CHOICE in
            1)
                RESULT=$(/mnt/data/backup/scripts/daily_backup.sh 2>&1)
                if [ $? -eq 0 ]; then
                    dialog --msgbox "バックアップ完了しました" 6 40
                else
                    dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
                fi
                ;;
            2)
                RESULT=$(ls -lh /mnt/data/backup/*_backup_*.tar.gz 2>/dev/null)
                echo "$RESULT" | dialog --programbox "バックアップ一覧" 20 70
                ;;
            3)
                DATE=$(dialog --inputbox "復旧する日付を入力してください\n例:20260529" 8 50 3>&1 1>&2 2>&3)
                if [ -n "$DATE" ]; then
                    RESULT=$(/mnt/data/backup/scripts/restore.sh $DATE 2>&1)
                    if [ $? -eq 0 ]; then
                        dialog --msgbox "復旧が完了しました" 6 40
                    else
                        dialog --msgbox "エラーが発生しました:\n\n${RESULT}" 8 60
                    fi
                fi
                ;;
        esac
        clear

S       シャットダウン・再起動
        CHOICE=$(dialog --menu "シャットダウン・再起動" 11 55 2 \
            s "シャットダウン" \
            r "再起動" \
            3>&1 1>&2 2>&3)
        case $CHOICE in
            s)
                dialog --yesno "ubuntu-sv をシャットダウンします\n録画中・HLS配信中でないか確認してください\n本当に実行しますか?" 9 55
                if [ $? -eq 0 ]; then
                    sudo shutdown -h now
                fi
                ;;
            r)
                dialog --yesno "ubuntu-sv を再起動します\n本当に実行しますか?" 7 50
                if [ $? -eq 0 ]; then
                    sudo reboot
                fi
                ;;
        esac
        clear


記事一覧