debian-config-submenu 12 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

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

Igor Pecovnik's avatar
Igor Pecovnik committed
32
33
34
35
36
37
38
	# 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
39
40
41
42
43
44
	if [[ -f /etc/armbian-release ]]; then
		if [[ -n "${mark}" ]]; then
				LIST+=( "Defreeze" "Enable kernel upgrades" )
			else
				LIST+=( "Freeze" "Disable kernel upgrades" )
		fi
45
	fi
Igor Pecovnik's avatar
Igor Pecovnik committed
46
47
48
49

	# 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) ]] \
50
		&& LIST+=( "Nightly" "Switch to nightly automated builds" )
Igor Pecovnik's avatar
Igor Pecovnik committed
51
		[[ -f /etc/apt/sources.list.d/armbian.list ]] && [[ -n $(grep -w beta /etc/apt/sources.list.d/armbian.list) ]] \
52
53
		&& LIST+=( "Stable" "Switch to stable builds" )
	fi
Igor Pecovnik's avatar
Igor Pecovnik committed
54

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

57
58
59
	[[ -f /boot/armbianEnv.txt ]] && LIST+=( "Bootenv" "Edit boot environment" )
	[[ -f /boot/boot.ini ]] && LIST+=( "Bootscript" "Edit boot script" )

60
	[[ -d ${OVERLAYDIR} ]] && \
61
	LIST+=( "Hardware" "Toggle hardware configuration: UART, I2C, etc." )
62
	[[ "$LINUXFAMILY" = cubox && "$BRANCH" = "next" ]] && LIST+=( "DTB" "Switch board .dtb configuration" )
63
	[[ "$LINUXFAMILY" = odroidxu4 && "$BRANCH" = "next" ]] && LIST+=( "DTB" "Select optimised board configuration" )
64
65
	[[ -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}' \
66
	| wc -l) -gt 1 && -z "${mark}" ]] && LIST+=( "Switch" "Switch to alternative kernels" )
67

Igor Pecovnik's avatar
Igor Pecovnik committed
68
	LIST+=( "SSH" "Reconfigure SSH daemon" )
69
	LIST+=( "Firmware" "Run apt update & apt upgrade" )
70
71
	[[ "$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
72

Igor Pecovnik's avatar
Igor Pecovnik committed
73
	# desktop
Igor Pecovnik's avatar
Igor Pecovnik committed
74
75
76
77
	if [[ -n $DISPLAY_MANAGER ]]; then
			LIST+=( "Desktop" "Disable desktop" )
			[[ $DISPLAY_MANAGER == 'nodm' ]] && 			LIST+=( "Lightdm" "Switch to standard login manager" )
			[[ $DISPLAY_MANAGER == 'lightdm' ]] && 			LIST+=( "Nodm" "Switch to simple auto login manager" )
78
79
	else
			if [[ -n $DESKTOP_INSTALLED ]]; then
Igor Pecovnik's avatar
Igor Pecovnik committed
80
															LIST+=( "Desktop" "Enable desktop" )
81
				else
Igor Pecovnik's avatar
Igor Pecovnik committed
82
															LIST+=( "Desktop" "Install desktop" )
83
			fi
Igor Pecovnik's avatar
Igor Pecovnik committed
84
85
	fi

Igor Pecovnik's avatar
Igor Pecovnik committed
86
	# overlayroot
Igor Pecovnik's avatar
Igor Pecovnik committed
87
88
89
90
91
92
93
94
95
96
97
	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
98
99

	exec 3>&1
Igor Pecovnik's avatar
Igor Pecovnik committed
100
	selection=$(dialog --colors --backtitle "$BACKTITLE" --title " System settings " --clear \
101
	--cancel-label "Cancel" --menu "$disclaimer" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
102
103
104
105
	"${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
106
107

	# run main function
Igor Pecovnik's avatar
Igor Pecovnik committed
108
109
110
111
	jobs "$selection"
done
}

Igor Pecovnik's avatar
Igor Pecovnik committed
112

Igor Pecovnik's avatar
Igor Pecovnik committed
113
114
115


#
Igor Pecovnik's avatar
Igor Pecovnik committed
116
117
118
119
# menu for networking
#
function submenu_networking ()
{
Igor Pecovnik's avatar
Igor Pecovnik committed
120
121

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

Igor Pecovnik's avatar
Igor Pecovnik committed
124
while true; do
Igor Pecovnik's avatar
Igor Pecovnik committed
125

Igor Pecovnik's avatar
Igor Pecovnik committed
126
	LIST=()
Igor Pecovnik's avatar
Igor Pecovnik committed
127
128
	DIALOG_CANCEL=1
	DIALOG_ESC=255
Igor Pecovnik's avatar
Igor Pecovnik committed
129

Igor Pecovnik's avatar
Igor Pecovnik committed
130
	# edit ip
Igor Pecovnik's avatar
RC1    
Igor Pecovnik committed
131
	LIST+=( "IP" "Select dynamic or edit static IP address" )
Igor Pecovnik's avatar
Igor Pecovnik committed
132
133

	# hostapd
Igor Pecovnik's avatar
Igor Pecovnik committed
134
	HOSTAPDBRIDGE=$(cat /etc/hostapd.conf 2> /dev/null | grep -w "^bridge=br0")
Igor Pecovnik's avatar
Igor Pecovnik committed
135
	HOSTAPDSTATUS=$(service hostapd status 2> /dev/null | grep -w active | grep -w running)
Igor Pecovnik's avatar
Igor Pecovnik committed
136
137
138
139
	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
140
		else
141
			[[ -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
142

Igor Pecovnik's avatar
Igor Pecovnik committed
143
	fi
144

Igor Pecovnik's avatar
Igor Pecovnik committed
145
146
147
148
149
150
151
152
	# 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
153
154
	fi

155
	if [[ -n $(LC_ALL=C nmcli device status | grep wifi | grep -v unavailable | grep -v unmanaged) ]]; then
156
157
158
159
		LIST+=( "WiFi" "Manage wireless networking" )
	else
		LIST+=( "Clear" "Clear possible blocked interfaces" )
	fi
160
161
162
163
164
165
166
167
	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
168
169
	fi

170
171


172
173
	[[ -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
174
	LIST+=( "Advanced" "Edit /etc/network/interfaces" )
Igor Pecovnik's avatar
Igor Pecovnik committed
175
176
	[[ $(ls -1 /etc/NetworkManager/system-connections 2> /dev/null) ]] && \
	LIST+=( "Forget" "Disconnect and forget all wireless connections" )
Igor Pecovnik's avatar
Igor Pecovnik committed
177
178

	# count number of menu items to adjust window sizee
179
	LISTLENGHT="$((12+${#LIST[@]}/2))"
Igor Pecovnik's avatar
Igor Pecovnik committed
180
	BOXLENGHT=${#LIST[@]}
181
	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
182

Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
183
	local disclaimer=""
184
185
186

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

187
188

	if [[ -n $(LC_ALL=C nmcli device status | grep $DEFAULT_ADAPTER | grep connected) ]]; then
189
		local ifup="\nIP ($DEFAULT_ADAPTER) via Network Manager: \Z1${ipadd}\n\Z0 "
190
	else
191
192
193
194
195
		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
196
	fi
197

198
199
	disclaimer="$ifup"

Igor Pecovnik's avatar
Igor Pecovnik committed
200
	if [[ -n $WIFICONNECTED ]]; then
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
201
		LISTLENGHT=$((LISTLENGHT+2))
202
203
		local connected="\n\Z0Connected to SSID: \Z1${WIFICONNECTED}\n\Z0 "
		disclaimer=$disclaimer"$connected"
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
204
205
	fi

206
207
208
209
210
211
	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
212
	if [[ -n $HOSTAPDINFO && -n $HOSTAPDSTATUS ]]; then
Igor Pecovnik's avatar
Cleanup    
Igor Pecovnik committed
213
		LISTLENGHT=$((LISTLENGHT+2))
Igor Pecovnik's avatar
Igor Pecovnik committed
214
		chpid=$(dmesg | grep $(grep ^interface /etc/hostapd.conf | sed 's/interface=//g') | head -1 | sed 's/\[.*\]//g' | awk '{print $1}')
215
		disclaimer=$disclaimer$"\n\Z0Hotspot SSID: \Z1$HOSTAPDINFO\Zn Band:";
216
		if [[ `grep ^hw_mode=a /etc/hostapd.conf` ]]; then local band="5Ghz"; else band="2.4Ghz"; fi
217
218
		if [[ `grep ^ieee80211n /etc/hostapd.conf` ]]; then local type="N"; fi
		if [[ `grep ^ieee80211ac /etc/hostapd.conf` ]]; then local type="AC"; fi
219
		disclaimer=$disclaimer$" \Z1${band} ${type}\Z0"
220
		[[ ! "$chpid" =~ .*IPv6.* ]] && disclaimer=$disclaimer$"\n\nChip: \Z1${chpid}\Z0";
Igor Pecovnik's avatar
Igor Pecovnik committed
221
		if [ "$HOSTAPDCLIENTS" -gt "0" ]; then disclaimer=$disclaimer$" Connected clients: \Z1$HOSTAPDCLIENTS\Zn"; fi
222
		if [[ ! "$chpid" =~ .*IPv6.* ]]; then LISTLENGHT=$((LISTLENGHT+2)); fi
Igor Pecovnik's avatar
Igor Pecovnik committed
223
		disclaimer=$disclaimer$"\n";
Igor Pecovnik's avatar
Igor Pecovnik committed
224
	fi
225
	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
226
227

	exec 3>&1
228
	selection=$(dialog --backtitle "$BACKTITLE" --colors --title " Wired, Wireless, Bluetooth, Hotspot " --clear \
229
	--cancel-label "Cancel" --menu "${disclaimer}" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
230
231
232
233
234
	"${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
235
	# run main function
Igor Pecovnik's avatar
Igor Pecovnik committed
236
	jobs "$selection"
237

Igor Pecovnik's avatar
Igor Pecovnik committed
238
239
240
done
}

241

Igor Pecovnik's avatar
Igor Pecovnik committed
242
#-----------------------------------------------------------------------------------------------------------------------------------------#
243
# personal
Igor Pecovnik's avatar
Igor Pecovnik committed
244
#
245
function submenu_personal ()
Igor Pecovnik's avatar
Igor Pecovnik committed
246
247
248
249
{
while true; do

	LIST=()
250
251
	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
252
	LIST+=( "Keyboard" "Change console keyboard layout (\Z5$(cat /etc/default/keyboard | grep XKBLAYOUT | grep -o '".*"' | sed 's/"//g')\Z0)")
253
	LIST+=( "Hostname" "Change your hostname \Z5($(cat /etc/hostname))\Z0" )
254
	[[ -f /etc/apt/sources.list.d/armbian.list ]] && LIST+=( "Mirror" "Change repository server" )
Igor Pecovnik's avatar
Igor Pecovnik committed
255
256
257
	LIST+=( "Welcome" "Toggle welcome screen items" )

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

	exec 3>&1
262
263
	selection=$(dialog --colors --backtitle "$BACKTITLE" --title "Personal settings" --clear \
	--cancel-label "Cancel" --menu "$disclaimer" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
264
265
266
267
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	[[ $exit_status == $DIALOG_CANCEL || $exit_status == $DIALOG_ESC ]] && clear && break
268
269

	# run main function
Igor Pecovnik's avatar
Igor Pecovnik committed
270
	jobs "$selection"
271

Igor Pecovnik's avatar
Igor Pecovnik committed
272
done
Igor Pecovnik's avatar
Igor Pecovnik committed
273
274
275
276
277
278
279
280
281
282
283
}


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

	LIST=()
284
	[[ -f /usr/bin/softy || -f softy ]] && LIST+=( "Softy" "3rd party applications installer" )
Igor Pecovnik's avatar
Igor Pecovnik committed
285
286
287
288
	[[ -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" )
289

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

Igor Pecovnik's avatar
Igor Pecovnik committed
293
	if [[ -f /etc/armbian.txt ]]; then
Igor Pecovnik's avatar
Bugfix    
Igor Pecovnik committed
294
		if [[ -n $(dpkg -l | grep -w "armbian-firmware-full ") ]]; then
295
296
297
298
299
300
			LIST+=( "Mini" "Install mini firmware package" );
		else
			LIST+=( "Full" "Install full firmware package" );
		fi
	fi

301
302
303
304
305
306
	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
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
			if ! check_if_installed thunderbird then ; then
				LIST+=( "Thunderbird" "Install full featured email client" )
				else
				LIST+=( "Thunderbird" "Remove full featured email client" )
			fi
			if ! check_if_installed libreoffice-writer then ; then
				LIST+=( "Writer" "Libreoffice: Writer only" )
				LIST+=( "Suite" "Libreoffice: Full suite" )
				else
					if ! check_if_installed libreoffice-base then ; then
						LIST+=( "Suite" "Libreoffice: Full suite" )
						LIST+=( "Libre" "Remove Libre office packages" )
					else
						LIST+=( "Libre" "Remove Libre office packages" )
					fi
			fi
323
	fi
Igor Pecovnik's avatar
Igor Pecovnik committed
324
325
326
327
328
329
330

	# 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 \
331
	--cancel-label "Cancel" --menu "$disclaimer" $LISTLENGHT 70 $BOXLENGHT \
Igor Pecovnik's avatar
Igor Pecovnik committed
332
333
334
335
336
337
338
	"${LIST[@]}" 2>&1 1>&3)
	exit_status=$?
	exec 3>&-
	[[ $exit_status == $DIALOG_CANCEL || $exit_status == $DIALOG_ESC ]] && clear && break

	# run main function
	jobs "$selection"
339

Igor Pecovnik's avatar
Igor Pecovnik committed
340
done
341
}