debian-config-submenu 12.5 KB
Newer Older
Igor Pecovnik's avatar
Igor Pecovnik committed
1
2
#!/bin/bash
#
Igor Pecovnik's avatar
Igor Pecovnik committed
3
# Copyright (c) 2018 Igor Pecovnik, igor.pecovnik@gma**.com
Igor Pecovnik's avatar
Igor Pecovnik committed
4
5
6
7
8
#
# This file is licensed under the terms of the GNU General Public
# License version 2. This program is licensed "as is" without any
# warranty of any kind, whether express or implied.

9
10
11
12
13
# Functions:
# submenu_settings
# submenu_networking
# submenu_personal
# submenu_software
14

Igor Pecovnik's avatar
Igor Pecovnik committed
15
16
17
18
19



#
# system settings
Igor Pecovnik's avatar
Igor Pecovnik committed
20
#
Igor Pecovnik's avatar
Igor Pecovnik committed
21
function submenu_settings ()
Igor Pecovnik's avatar
Igor Pecovnik committed
22
23
24
25
{
while true; do

	LIST=()
Igor Pecovnik's avatar
Igor Pecovnik committed
26
27
	DIALOG_CANCEL=1
	DIALOG_ESC=255
Igor Pecovnik's avatar
Igor Pecovnik committed
28

29
30
31
	# detect desktop
	check_desktop

Igor Pecovnik's avatar
Igor Pecovnik committed
32
	# check update status of BSP packages
33
34
	local mark=$(apt-mark showhold | grep -w "$BOARD")

Igor Pecovnik's avatar
Igor Pecovnik committed
35
36
37
38
39
40
41
	# check if install targets are avaliable
	if [[ $(sed -n 's/^DEVNAME=//p' /sys/dev/block/$(mountpoint -d /)/uevent 2> /dev/null) == mmcblk* \
	&& -f /usr/sbin/nand-sata-install ]]; then
		LIST+=( "Install" "Install to SATA, eMMC, NAND or USB" )
	fi

	# armbian specific function
42
43
44
45
46
47
	if [[ -f /etc/armbian-release ]]; then
		if [[ -n "${mark}" ]]; then
				LIST+=( "Defreeze" "Enable kernel upgrades" )
			else
				LIST+=( "Freeze" "Disable kernel upgrades" )
		fi
48
	fi
Igor Pecovnik's avatar
Igor Pecovnik committed
49
50
51
52

	# armbian specific function, when upgrades are enabled
	if [[ -z ${mark} ]]; then
		[[ -f /etc/apt/sources.list.d/armbian.list ]] && [[ -n $(grep -w apt /etc/apt/sources.list.d/armbian.list) ]] \
53
		&& LIST+=( "Nightly" "Switch to nightly automated builds" )
Igor Pecovnik's avatar
Igor Pecovnik committed
54
		[[ -f /etc/apt/sources.list.d/armbian.list ]] && [[ -n $(grep -w beta /etc/apt/sources.list.d/armbian.list) ]] \
55
56
		&& LIST+=( "Stable" "Switch to stable builds" )
	fi
Igor Pecovnik's avatar
Igor Pecovnik committed
57

58
	[[ -n $(grep -w "#kernel.printk" /etc/sysctl.conf ) ]] && LIST+=( "Lowlevel" "Stop low-level messages on console" )
Igor Pecovnik's avatar
Igor Pecovnik committed
59

60
61
62
	[[ -f /boot/armbianEnv.txt ]] && LIST+=( "Bootenv" "Edit boot environment" )
	[[ -f /boot/boot.ini ]] && LIST+=( "Bootscript" "Edit boot script" )

63
	[[ -d ${OVERLAYDIR} ]] && \
64
	LIST+=( "Hardware" "Toggle hardware configuration: UART, I2C, etc." )
65
	[[ "$LINUXFAMILY" = cubox && "$BRANCH" = "next" ]] && LIST+=( "DTB" "Switch board .dtb configuration" )
66
	[[ "$LINUXFAMILY" = odroidxu4 && "$BRANCH" = "next" ]] && LIST+=( "DTB" "Select optimised board configuration" )
67
68
	[[ -f /usr/bin/bin2fex && "$LINUXFAMILY" = sun*i && "$BRANCH" = "default" ]] && LIST+=( "Fexedit" "Board (fex) settings editor" )
	[[ $(apt-cache search --names-only '^linux-'$(lsb_release  -cs)'-root.*.'$BOARD'' | sed 's/.*(\(.*\))/\1/' | awk '{print $1}' \
69
	| wc -l) -gt 1 && -z "${mark}" ]] && LIST+=( "Switch" "Switch to alternative kernels" )
70

Igor Pecovnik's avatar
Igor Pecovnik committed
71
	LIST+=( "SSH" "Reconfigure SSH daemon" )
72
	LIST+=( "Firmware" "Run apt update & apt upgrade" )
73
74
	[[ "$LINUXFAMILY" = sun*i && "$BRANCH" = "default" && \
	-n $(bin2fex </boot/script.bin 2>/dev/null | grep -w "hdmi_used = 1") ]] && LIST+=( "Display" "set the display resolution" )
Igor Pecovnik's avatar
Igor Pecovnik committed
75

Igor Pecovnik's avatar
Igor Pecovnik committed
76
	# desktop
Igor Pecovnik's avatar
Igor Pecovnik committed
77
78
	if [[ -n $DISPLAY_MANAGER ]]; then
			LIST+=( "Desktop" "Disable desktop" )
79
80
81
			if ! check_if_installed mpv ; then
				LIST+=( "Default" "Install desktop with browser and extras" )
			fi
Igor Pecovnik's avatar
Igor Pecovnik committed
82
83
			[[ $DISPLAY_MANAGER == 'nodm' ]] && 			LIST+=( "Lightdm" "Switch to standard login manager" )
			[[ $DISPLAY_MANAGER == 'lightdm' ]] && 			LIST+=( "Nodm" "Switch to simple auto login manager" )
84
85
	else
			if [[ -n $DESKTOP_INSTALLED ]]; then
Igor Pecovnik's avatar
Igor Pecovnik committed
86
															LIST+=( "Desktop" "Enable desktop" )
87
88
89
															if ! check_if_installed mpv ; then
																LIST+=( "Default" "Install desktop with browser and extras" )
															fi
90
				else
91
92
93
94
															LIST+=( "Minimal" "Install minimal desktop" )
															if ! check_if_installed mpv ; then
																LIST+=( "Default" "Install desktop with browser and extras" )
															fi
95
			fi
Igor Pecovnik's avatar
Igor Pecovnik committed
96
97
	fi

Igor Pecovnik's avatar
Igor Pecovnik committed
98
	# overlayroot
Igor Pecovnik's avatar
Igor Pecovnik committed
99
100
101
102
103
104
105
106
107
108
109
	if [[ "$DISTRO" == "Ubuntu" && "$(modinfo overlay > /dev/null 2>&1; echo $?)" == "0" ]]; then
		if [ -n "$(mount | grep -w tmpfs-root)" ]; then
			LIST+=( "Overlayroot" "Disable virtual read-only root filesystem" )
		else
			LIST+=( "Overlayroot" "Enable virtual read-only root filesystem" )
		fi
	fi

	# count number of menu items to adjust window sizee
	LISTLENGHT="$((6+${#LIST[@]}/2))"
	BOXLENGHT=${#LIST[@]}
Igor Pecovnik's avatar
Igor Pecovnik committed
110
111

	exec 3>&1
Igor Pecovnik's avatar
Igor Pecovnik committed
112
	selection=$(dialog --colors --backtitle "$BACKTITLE" --title " System settings " --clear \
113
	--cancel-label "Cancel" --menu "$disclaimer" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
114
115
116
117
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	[[ $exit_status == $DIALOG_CANCEL || $exit_status == $DIALOG_ESC ]] && clear && break
Igor Pecovnik's avatar
Igor Pecovnik committed
118
119

	# run main function
Igor Pecovnik's avatar
Igor Pecovnik committed
120
121
122
123
	jobs "$selection"
done
}

Igor Pecovnik's avatar
Igor Pecovnik committed
124

Igor Pecovnik's avatar
Igor Pecovnik committed
125
126
127


#
Igor Pecovnik's avatar
Igor Pecovnik committed
128
129
130
131
# menu for networking
#
function submenu_networking ()
{
Igor Pecovnik's avatar
Igor Pecovnik committed
132
133

# if there is more than one connected device
134
select_default_interface
Igor Pecovnik's avatar
Igor Pecovnik committed
135

Igor Pecovnik's avatar
Igor Pecovnik committed
136
while true; do
Igor Pecovnik's avatar
Igor Pecovnik committed
137

Igor Pecovnik's avatar
Igor Pecovnik committed
138
	LIST=()
Igor Pecovnik's avatar
Igor Pecovnik committed
139
140
	DIALOG_CANCEL=1
	DIALOG_ESC=255
Igor Pecovnik's avatar
Igor Pecovnik committed
141

Igor Pecovnik's avatar
Igor Pecovnik committed
142
	# edit ip
Igor Pecovnik's avatar
RC1    
Igor Pecovnik committed
143
	LIST+=( "IP" "Select dynamic or edit static IP address" )
Igor Pecovnik's avatar
Igor Pecovnik committed
144
145

	# hostapd
Igor Pecovnik's avatar
Igor Pecovnik committed
146
	HOSTAPDBRIDGE=$(cat /etc/hostapd.conf 2> /dev/null | grep -w "^bridge=br0")
Igor Pecovnik's avatar
Igor Pecovnik committed
147
	HOSTAPDSTATUS=$(service hostapd status 2> /dev/null | grep -w active | grep -w running)
Igor Pecovnik's avatar
Igor Pecovnik committed
148
149
150
151
	if [[ -n "$HOSTAPDSTATUS" ]]; then
			HOSTAPDINFO=$(hostapd_cli get_config 2> /dev/null | grep ^ssid | sed 's/ssid=//g')
			HOSTAPDCLIENTS=$(hostapd_cli all_sta 2> /dev/null | grep connected_time | wc -l)
			LIST+=( "Hotspot" "Manage active wireless access point" )
Igor Pecovnik's avatar
Igor Pecovnik committed
152
		else
153
			[[ -n $(LC_ALL=C nmcli device status | grep wifi | grep -w disconnected) ]] && LIST+=( "Hotspot" "Create WiFi access point" )
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
154

Igor Pecovnik's avatar
Igor Pecovnik committed
155
	fi
156

Igor Pecovnik's avatar
Igor Pecovnik committed
157
158
159
160
161
162
163
164
	# network throughput test
	if check_if_installed iperf3; then
		if pgrep -x "iperf3" > /dev/null
		then
			LIST+=( "Iperf3" "Disable network throughput tests daemon" )
			else
			LIST+=( "Iperf3" "Enable network throughput tests daemon" )
		fi
165
166
	fi

167
	if [[ -n $(LC_ALL=C nmcli device status | grep wifi | grep -v unavailable | grep -v unmanaged) ]]; then
168
169
170
171
		LIST+=( "WiFi" "Manage wireless networking" )
	else
		LIST+=( "Clear" "Clear possible blocked interfaces" )
	fi
172
173
174
175
176
177
178
179
	check_if_installed lirc && LIST+=( "Remove IR" "Remove IR support" ) || LIST+=( "IR" "Install IR support" )
	if check_if_installed bluetooth then ; then
			LIST+=( "BT remove" "Remove Bluetooth support" )
			if [[ -n $(service bluetooth status | grep -w active | grep -w running) ]]; then
				[[ $(hcitool dev | sed '1d') != "" ]] && LIST+=( "BT discover" "Discover and connect Bluetooth devices" )
			fi
		else
			LIST+=( "BT install" "Install Bluetooth support" )
Igor Pecovnik's avatar
Igor Pecovnik committed
180
181
	fi

182
183


184
185
	[[ -d /usr/local/vpnclient ]] && LIST+=( "VPN" "Manage Softether VPN client" ) && VPNSERVERIP=$(/usr/local/vpnclient/vpncmd /client localhost /cmd accountlist | grep "VPN Server" |grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | head -1)

Igor Pecovnik's avatar
RC1    
Igor Pecovnik committed
186
	LIST+=( "Advanced" "Edit /etc/network/interfaces" )
Igor Pecovnik's avatar
Igor Pecovnik committed
187
188
	[[ $(ls -1 /etc/NetworkManager/system-connections 2> /dev/null) ]] && \
	LIST+=( "Forget" "Disconnect and forget all wireless connections" )
Igor Pecovnik's avatar
Igor Pecovnik committed
189
190

	# count number of menu items to adjust window sizee
191
	LISTLENGHT="$((12+${#LIST[@]}/2))"
Igor Pecovnik's avatar
Igor Pecovnik committed
192
	BOXLENGHT=${#LIST[@]}
193
	WIFICONNECTED=$(LC_ALL=C nmcli -f NAME,TYPE connection show --active | grep wireless | awk 'NF{NF-=1};1')
Igor Pecovnik's avatar
Igor Pecovnik committed
194

Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
195
	local disclaimer=""
196
197
198

	local ipadd=$(ip -4 addr show dev $DEFAULT_ADAPTER | awk '/inet/ {print $2}' | cut -d'/' -f1)

199
200

	if [[ -n $(LC_ALL=C nmcli device status | grep $DEFAULT_ADAPTER | grep connected) ]]; then
201
		local ifup="\nIP ($DEFAULT_ADAPTER) via Network Manager: \Z1${ipadd}\n\Z0 "
202
	else
203
204
205
206
207
		if [[ -n $(service systemd-networkd status | grep -w active | grep -w running) ]]; then
			local ifup="\nIP ($DEFAULT_ADAPTER) via systemd-networkd: \Z1${ipadd}\n\Z0 "
		else
			local ifup="\nIP ($DEFAULT_ADAPTER) via IFUPDOWN: \Z1${ipadd}\n\Z0 "
		fi
208
	fi
209

210
211
	disclaimer="$ifup"

Igor Pecovnik's avatar
Igor Pecovnik committed
212
	if [[ -n $WIFICONNECTED ]]; then
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
213
		LISTLENGHT=$((LISTLENGHT+2))
214
215
		local connected="\n\Z0Connected to SSID: \Z1${WIFICONNECTED}\n\Z0 "
		disclaimer=$disclaimer"$connected"
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
216
217
	fi

218
219
220
221
222
223
	if [[ -n $VPNSERVERIP ]]; then
		local vpnserverip="\n\Z0Connected to VPN server: \Z1${VPNSERVERIP}\n\Z0 "
		disclaimer=$disclaimer"$vpnserverip"
		LISTLENGHT=$((LISTLENGHT+2))
	fi

Igor Pecovnik's avatar
Igor Pecovnik committed
224
	if [[ -n $HOSTAPDINFO && -n $HOSTAPDSTATUS ]]; then
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
225
		LISTLENGHT=$((LISTLENGHT+2))
Igor Pecovnik's avatar
Igor Pecovnik committed
226
		chpid=$(dmesg | grep $(grep ^interface /etc/hostapd.conf | sed 's/interface=//g') | head -1 | sed 's/\[.*\]//g' | awk '{print $1}')
227
		disclaimer=$disclaimer$"\n\Z0Hotspot SSID: \Z1$HOSTAPDINFO\Zn Band:";
228
		if [[ `grep ^hw_mode=a /etc/hostapd.conf` ]]; then local band="5Ghz"; else band="2.4Ghz"; fi
229
230
		if [[ `grep ^ieee80211n /etc/hostapd.conf` ]]; then local type="N"; fi
		if [[ `grep ^ieee80211ac /etc/hostapd.conf` ]]; then local type="AC"; fi
231
		disclaimer=$disclaimer$" \Z1${band} ${type}\Z0"
232
		[[ ! "$chpid" =~ .*IPv6.* ]] && disclaimer=$disclaimer$"\n\nChip: \Z1${chpid}\Z0";
Igor Pecovnik's avatar
Igor Pecovnik committed
233
		if [ "$HOSTAPDCLIENTS" -gt "0" ]; then disclaimer=$disclaimer$" Connected clients: \Z1$HOSTAPDCLIENTS\Zn"; fi
234
		if [[ ! "$chpid" =~ .*IPv6.* ]]; then LISTLENGHT=$((LISTLENGHT+2)); fi
Igor Pecovnik's avatar
Igor Pecovnik committed
235
		disclaimer=$disclaimer$"\n";
Igor Pecovnik's avatar
Igor Pecovnik committed
236
	fi
237
	disclaimer=$disclaimer"\n\Z1Note\Zn: This tool can be successful only when drivers are in good shape. If autodetection fails, you are on your own.\n "
Igor Pecovnik's avatar
Igor Pecovnik committed
238
239

	exec 3>&1
240
	selection=$(dialog --backtitle "$BACKTITLE" --colors --title " Wired, Wireless, Bluetooth, Hotspot " --clear \
241
	--cancel-label "Cancel" --menu "${disclaimer}" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
242
243
244
245
246
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	[[ $exit_status == $DIALOG_CANCEL || $exit_status == $DIALOG_ESC ]] && clear && break

Igor Pecovnik's avatar
Igor Pecovnik committed
247
	# run main function
Igor Pecovnik's avatar
Igor Pecovnik committed
248
	jobs "$selection"
249

Igor Pecovnik's avatar
Igor Pecovnik committed
250
251
252
done
}

253

Igor Pecovnik's avatar
Igor Pecovnik committed
254
#-----------------------------------------------------------------------------------------------------------------------------------------#
255
# personal
Igor Pecovnik's avatar
Igor Pecovnik committed
256
#
257
function submenu_personal ()
Igor Pecovnik's avatar
Igor Pecovnik committed
258
259
260
261
{
while true; do

	LIST=()
262
263
	LIST+=( "Timezone" "Change timezone \Z5($(date +%Z))\Z0" )
	LIST+=( "Locales" "Reconfigure language \Z5($(locale | grep LANGUAGE | cut -d= -f2 | cut -d_ -f1))\Z0 and character set" )
Igor Pecovnik's avatar
Igor Pecovnik committed
264
	LIST+=( "Keyboard" "Change console keyboard layout (\Z5$(cat /etc/default/keyboard | grep XKBLAYOUT | grep -o '".*"' | sed 's/"//g')\Z0)")
265
	LIST+=( "Hostname" "Change your hostname \Z5($(cat /etc/hostname))\Z0" )
266
	[[ -f /etc/apt/sources.list.d/armbian.list ]] && LIST+=( "Mirror" "Change repository server" )
Igor Pecovnik's avatar
Igor Pecovnik committed
267
268
269
	LIST+=( "Welcome" "Toggle welcome screen items" )

	# count number of menu items to adjust window sizee
270
	LISTLENGHT="$((6+${#LIST[@]}/2))"
Igor Pecovnik's avatar
Igor Pecovnik committed
271
272
273
	BOXLENGHT=${#LIST[@]}

	exec 3>&1
274
275
	selection=$(dialog --colors --backtitle "$BACKTITLE" --title "Personal settings" --clear \
	--cancel-label "Cancel" --menu "$disclaimer" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
276
277
278
279
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	[[ $exit_status == $DIALOG_CANCEL || $exit_status == $DIALOG_ESC ]] && clear && break
280
281

	# run main function
Igor Pecovnik's avatar
Igor Pecovnik committed
282
	jobs "$selection"
283

Igor Pecovnik's avatar
Igor Pecovnik committed
284
done
Igor Pecovnik's avatar
Igor Pecovnik committed
285
286
287
288
289
290
291
292
293
294
}


#-----------------------------------------------------------------------------------------------------------------------------------------#
# software
#
function submenu_software ()
{
while true; do

295
296
297
	# detect desktop
	check_desktop

Igor Pecovnik's avatar
Igor Pecovnik committed
298
	LIST=()
299
	[[ -f /usr/bin/softy || -f softy ]] && LIST+=( "Softy" "3rd party applications installer" )
Igor Pecovnik's avatar
Igor Pecovnik committed
300
301
302
303
	[[ -f /usr/bin/h3consumption && "$LINUXFAMILY" = "sun8i" && "$BRANCH" = "default" ]] && \
	LIST+=( "Consumption" "Control board consumption" )
	[[ -f /usr/bin/armbianmonitor ]] && LIST+=( "Monitor" "Simple CLI board monitoring" )
	[[ -f /usr/bin/armbianmonitor ]] && LIST+=( "Diagnostics" "Send diagnostics" )
304

Igor Pecovnik's avatar
Igor Pecovnik committed
305
306
	if [[ -n $(dpkg -l | grep linux-headers) ]]; then LIST+=( "Headers" "Remove kernel headers" ); else \
	LIST+=( "Headers" "Install kernel headers" ); fi
307

Igor Pecovnik's avatar
Igor Pecovnik committed
308
	if [[ -f /etc/armbian.txt ]]; then
Igor Pecovnik's avatar
Bugfix    
Igor Pecovnik committed
309
		if [[ -n $(dpkg -l | grep -w "armbian-firmware-full ") ]]; then
310
311
312
313
314
315
			LIST+=( "Mini" "Install mini firmware package" );
		else
			LIST+=( "Full" "Install full firmware package" );
		fi
	fi

316
317
318
319
320
321
	if [[ -n $DISPLAY_MANAGER ]]; then
			if [[ $(service xrdp status 2> /dev/null | grep -w active) ]]; then
				LIST+=( "RDP" "Disable remote desktop access from Windows" )
				else
				LIST+=( "RDP" "Enable remote desktop access from Windows" )
			fi
322
			if ! check_if_installed thunderbird ; then
323
324
325
326
				LIST+=( "Thunderbird" "Install full featured email client" )
				else
				LIST+=( "Thunderbird" "Remove full featured email client" )
			fi
327
			if ! check_if_installed libreoffice-writer ; then
328
329
330
				LIST+=( "Writer" "Libreoffice: Writer only" )
				LIST+=( "Suite" "Libreoffice: Full suite" )
				else
331
					if ! check_if_installed libreoffice-base ; then
332
333
334
335
336
337
						LIST+=( "Suite" "Libreoffice: Full suite" )
						LIST+=( "Libre" "Remove Libre office packages" )
					else
						LIST+=( "Libre" "Remove Libre office packages" )
					fi
			fi
338
	fi
Igor Pecovnik's avatar
Igor Pecovnik committed
339
340
341
342
343
344
345

	# count number of menu items to adjust window sizee
	LISTLENGHT="$((6+${#LIST[@]}/2))"
	BOXLENGHT=${#LIST[@]}

	exec 3>&1
	selection=$(dialog --backtitle "$BACKTITLE" --title "System and 3rd party software" --clear \
346
	--cancel-label "Cancel" --menu "$disclaimer" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
347
348
349
350
351
352
353
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	[[ $exit_status == $DIALOG_CANCEL || $exit_status == $DIALOG_ESC ]] && clear && break

	# run main function
	jobs "$selection"
354

Igor Pecovnik's avatar
Igor Pecovnik committed
355
done
356
}