Última atividade 1 month ago

Erreur32's Avatar Erreur32 revisou este gist 5 months ago. Ir para a revisão

1 file changed, 0 insertions, 0 deletions

rcconf_2026-01-06.png(arquivo criado)

Binary file changes are not shown

Erreur32's Avatar Erreur32 revisou este gist 5 months ago. Ir para a revisão

Sem alterações

Erreur32's Avatar Erreur32 revisou este gist 5 months ago. Ir para a revisão

1 file changed, 147 insertions

rcconf_bash.sh(arquivo criado)

@@ -0,0 +1,147 @@
1 + #!/usr/bin/env bash
2 + set -euo pipefail
3 +
4 + [ "$EUID" -ne 0 ] && { echo "Exécuter en root"; exit 1; }
5 +
6 + export TERM="${TERM:-xterm-256color}"
7 + export NCURSES_NO_UTF8_ACS=1
8 +
9 + . /etc/os-release
10 + OS_INFO="$NAME $VERSION_ID"
11 +
12 + # dialog check + install
13 + if ! command -v dialog >/dev/null 2>&1; then
14 + echo "dialog non installé."
15 + read -rp "Installer dialog maintenant ? [O/n] " r
16 + r=${r:-O}
17 + if [[ "$r" =~ ^[Oo]$ ]]; then
18 + apt update && apt install -y dialog
19 + else
20 + exit 1
21 + fi
22 + fi
23 +
24 + # Taille plein écran
25 + H=$(tput lines); W=$(tput cols)
26 + H=$((H - 4)); W=$((W - 4))
27 + LISTH=$((H - 9))
28 + [ "$LISTH" -lt 8 ] && LISTH=8
29 +
30 + # Détection init
31 + if pidof systemd >/dev/null 2>&1; then
32 + INIT=systemd
33 + else
34 + INIT=sysv
35 + fi
36 +
37 + header_text() {
38 + cat <<EOF
39 + OS: $OS_INFO | Init: $INIT
40 + ────────────────────────────────────────
41 + Espace: ON/OFF | Entrée: Appliquer | Esc: Quitter
42 + EOF
43 + }
44 +
45 + # ===== Build list (ON d'abord) =====
46 + build_items_systemd() {
47 + local unit state
48 + ON_UNITS=()
49 + OFF_UNITS=()
50 +
51 + while read -r unit state; do
52 + [[ "$unit" =~ \.service$ ]] || continue
53 + [[ "$state" =~ ^(enabled|disabled)$ ]] || continue
54 + if [ "$state" = "enabled" ]; then
55 + ON_UNITS+=("$unit")
56 + else
57 + OFF_UNITS+=("$unit")
58 + fi
59 + done < <(systemctl list-unit-files --type=service --no-legend --no-pager | awk '{print $1,$2}')
60 +
61 + SERVICES=( "${ON_UNITS[@]}" "${OFF_UNITS[@]}" )
62 + ITEMS=()
63 +
64 + for unit in "${ON_UNITS[@]}"; do
65 + ITEMS+=("$unit" "\Z4ON\Zn " "on")
66 + done
67 + for unit in "${OFF_UNITS[@]}"; do
68 + ITEMS+=("$unit" "\Z1OFF\Zn" "off")
69 + done
70 + }
71 +
72 + build_items_sysv() {
73 + local svc
74 + ON_UNITS=()
75 + OFF_UNITS=()
76 +
77 + while read -r svc; do
78 + if ls /etc/rc?.d/S*"$svc" >/dev/null 2>&1; then
79 + ON_UNITS+=("$svc")
80 + else
81 + OFF_UNITS+=("$svc")
82 + fi
83 + done < <(for s in /etc/init.d/*; do [ -x "$s" ] && basename "$s"; done | sort)
84 +
85 + SERVICES=( "${ON_UNITS[@]}" "${OFF_UNITS[@]}" )
86 + ITEMS=()
87 +
88 + for svc in "${ON_UNITS[@]}"; do
89 + ITEMS+=("$svc" "\Z4ON\Zn " "on")
90 + done
91 + for svc in "${OFF_UNITS[@]}"; do
92 + ITEMS+=("$svc" "\Z3OFF\Zn" "off")
93 + done
94 + }
95 +
96 + apply_selection_systemd() {
97 + local sel="$1" unit
98 + for unit in "${SERVICES[@]}"; do
99 + if [[ " $sel " =~ \"${unit}\" ]]; then
100 + systemctl enable "$unit" >/dev/null 2>&1 || true
101 + else
102 + systemctl disable "$unit" >/dev/null 2>&1 || true
103 + fi
104 + done
105 + }
106 +
107 + apply_selection_sysv() {
108 + local sel="$1" svc
109 + for svc in "${SERVICES[@]}"; do
110 + if [[ " $sel " =~ \"${svc}\" ]]; then
111 + ls /etc/rc?.d/S*"$svc" >/dev/null 2>&1 || update-rc.d "$svc" defaults >/dev/null
112 + else
113 + ls /etc/rc?.d/S*"$svc" >/dev/null 2>&1 && update-rc.d -f "$svc" remove >/dev/null
114 + fi
115 + done
116 + }
117 +
118 + # ===== Loop : applique + refresh (live) =====
119 + while true; do
120 + SERVICES=(); ITEMS=()
121 +
122 + if [ "$INIT" = "systemd" ]; then
123 + build_items_systemd
124 + else
125 + build_items_sysv
126 + fi
127 +
128 + exec 3>&1
129 + SEL=$(dialog \
130 + --colors \
131 + --clear \
132 + --backtitle " rcconf hybride " \
133 + --title " Gestion des services " \
134 + --checklist "$(header_text)" \
135 + "$H" "$W" "$LISTH" \
136 + "${ITEMS[@]}" \
137 + 2>&1 1>&3) || { exec 3>&-; clear; exit 0; }
138 + exec 3>&-
139 +
140 + if [ "$INIT" = "systemd" ]; then
141 + apply_selection_systemd "$SEL"
142 + else
143 + apply_selection_sysv "$SEL"
144 + fi
145 +
146 + # refresh auto (ordre ON/OFF recalculé) -> loop continue
147 + done
Próximo Anterior