浏览代码

Include apps on the user control menu

Bob Mottram 8 年前
父节点
当前提交
da3f06d60d

+ 4
- 0
src/freedombone-app-irc 查看文件

@@ -36,6 +36,10 @@ IRC_ONION_PORT=6697
36 36
 # An optional password to log into IRC. This applies to all users
37 37
 IRC_PASSWORD=
38 38
 
39
+function run_client_irc {
40
+    irssi
41
+}
42
+
39 43
 function irc_show_password {
40 44
     IRC_PASSWORD=$(cat /etc/ngircd/ngircd.conf | grep "Password =" | head -n 1 | awk -F '=' '{print $2}')
41 45
     dialog --title $"IRC Password" \

+ 172
- 0
src/freedombone-app-syncthing 查看文件

@@ -39,6 +39,178 @@ SYNCTHING_PORT=22000
39 39
 SYNCTHING_SHARED_DATA=/var/lib/syncthing/SyncShared
40 40
 SYNCTHING_USER_IDS_FILE='.syncthingids'
41 41
 
42
+function syncthing_create_ids_file {
43
+    if [ ! -f ~/.syncthing-server-id ]; then
44
+        return
45
+    fi
46
+
47
+    SYNCTHING_ID=$(cat ~/.syncthing-server-id)
48
+    if [ ! -f $SYNCTHING_CONFIG_FILE ]; then
49
+        echo $'# Your syncthing configuration file' > $SYNCTHING_CONFIG_FILE
50
+        echo '#' >> $SYNCTHING_CONFIG_FILE
51
+        echo $"# The ${PROJECT_NAME} syncthing ID is: $SYNCTHING_ID" >> $SYNCTHING_CONFIG_FILE
52
+        echo '#' >> $SYNCTHING_CONFIG_FILE
53
+        echo '# Paste the IDs of your devices below' >> $SYNCTHING_CONFIG_FILE
54
+        echo '#' >> $SYNCTHING_CONFIG_FILE
55
+    fi
56
+}
57
+
58
+function syncthing_manual_edit {
59
+    if [ ! -f ~/.syncthing-server-id ]; then
60
+        return
61
+    fi
62
+    syncthing_create_ids_file
63
+    editor $SYNCTHING_CONFIG_FILE
64
+
65
+    # force an update of the configuration
66
+    touch ~/.syncthing-update
67
+}
68
+
69
+function syncthing_show_id {
70
+    if [ ! -f ~/.syncthing-server-id ]; then
71
+        return
72
+    fi
73
+
74
+    SYNCTHING_ID=$(cat ~/.syncthing-server-id)
75
+    dialog --title $"Device ID for ${PROJECT_NAME}" \
76
+           --backtitle $"Freedombone User Control Panel" \
77
+           --msgbox $"In a desktop terminal press shift and select the ID below,\nthen right click and copy.\n\nWithin Connectbot select Menu/Copy and then highlight the ID below\n\n$SYNCTHING_ID" 12 78
78
+}
79
+
80
+function syncthing_add_id {
81
+    if [ ! -f ~/.syncthing-server-id ]; then
82
+        return
83
+    fi
84
+
85
+    syncthing_create_ids_file
86
+
87
+    data=$(tempfile 2>/dev/null)
88
+    trap "rm -f $data" 0 1 2 5 15
89
+    dialog --backtitle $"Freedombone User Control Panel" \
90
+           --title $"Add a Syncthing device ID" \
91
+           --form $"Paste the device ID for your laptop/desktop/netbook/phone/tablet below" 9 80 2 \
92
+           $"Device ID:" 1 1 "" 1 26 80 80 \
93
+           $"Description (optional):" 2 1 "" 2 26 80 80 \
94
+           2> $data
95
+    sel=$?
96
+    case $sel in
97
+        1) return;;
98
+        255) return;;
99
+    esac
100
+    SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p)
101
+    SYNCTHING_DESCRIPTION=$(cat $data | sed -n 2p)
102
+
103
+    if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then
104
+        return
105
+    fi
106
+
107
+    if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'*  || $SYNCTHING_DEVICE_ID != *"-"* ]]; then
108
+        dialog --title $"Add a Syncthing device ID" \
109
+               --backtitle $"Freedombone User Control Panel" \
110
+               --msgbox $"That doesn't look like a device ID" 6 50
111
+        return
112
+    fi
113
+
114
+    if grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then
115
+        dialog --title $"Add a Syncthing device ID" \
116
+               --backtitle $"Freedombone User Control Panel" \
117
+               --msgbox $"That ID has already been added" 6 50
118
+        return
119
+    fi
120
+
121
+    if [ ${#SYNCTHING_DESCRIPTION} -gt 0 ]; then
122
+        echo "# $SYNCTHING_DESCRIPTION" >> $SYNCTHING_CONFIG_FILE
123
+    fi
124
+    echo "$SYNCTHING_DEVICE_ID" >> $SYNCTHING_CONFIG_FILE
125
+
126
+    # force an update of the configuration
127
+    touch ~/.syncthing-update
128
+
129
+    dialog --title $"Add a Syncthing device ID" \
130
+           --backtitle $"Freedombone User Control Panel" \
131
+           --msgbox $"The ID was added" 6 50
132
+}
133
+
134
+function syncthing_remove_id {
135
+    if [ ! -f ~/.syncthing-server-id ]; then
136
+        return
137
+    fi
138
+
139
+    syncthing_create_ids_file
140
+
141
+    data=$(tempfile 2>/dev/null)
142
+    trap "rm -f $data" 0 1 2 5 15
143
+    dialog --backtitle $"Freedombone User Control Panel" \
144
+           --title $"Remove a Syncthing device ID" \
145
+           --form $"Paste the device ID which is to be removed below" 8 80 1 \
146
+           $"Device ID:" 1 1 "" 1 14 80 80 \
147
+           2> $data
148
+    sel=$?
149
+    case $sel in
150
+        1) return;;
151
+        255) return;;
152
+    esac
153
+    SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p)
154
+
155
+    if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then
156
+        return
157
+    fi
158
+
159
+    if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'*  || $SYNCTHING_DEVICE_ID != *"-"* ]]; then
160
+        dialog --title $"Remove a Syncthing device ID" \
161
+               --backtitle $"Freedombone User Control Panel" \
162
+               --msgbox $"That doesn't look like a device ID" 6 50
163
+        return
164
+    fi
165
+
166
+    if ! grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then
167
+        dialog --title $"Remove a Syncthing device ID" \
168
+               --backtitle $"Freedombone User Control Panel" \
169
+               --msgbox $"That ID wasn't registered anyway" 6 50
170
+        return
171
+    fi
172
+
173
+    sed -i "/$SYNCTHING_DEVICE_ID/d" $SYNCTHING_CONFIG_FILE
174
+
175
+    # force an update of the configuration
176
+    touch ~/.syncthing-update
177
+
178
+    dialog --title $"Remove a Syncthing device ID" \
179
+           --backtitle $"Freedombone User Control Panel" \
180
+           --msgbox $"The ID was removed" 6 50
181
+}
182
+
183
+function run_client_syncthing {
184
+    SYNCTHING_CONFIG_FILE=~/.syncthingids
185
+    SYNCTHING_ID=$(cat ~/.syncthing-server-id)
186
+
187
+    while true
188
+    do
189
+        data=$(tempfile 2>/dev/null)
190
+        trap "rm -f $data" 0 1 2 5 15
191
+        dialog --backtitle $"Freedombone User Control Panel" \
192
+               --title $"File Synchronization" \
193
+               --radiolist $"Choose an operation:" 12 70 6 \
194
+               1 $"Show device ID for ${PROJECT_NAME}" off \
195
+               2 $"Add an ID for another machine or device" off \
196
+               3 $"Remove an ID for another machine or device" off \
197
+               4 $"Manually edit device IDs" off \
198
+               5 $"Back to main menu" on 2> $data
199
+        sel=$?
200
+        case $sel in
201
+            1) break;;
202
+            255) break;;
203
+        esac
204
+        case $(cat $data) in
205
+            1) syncthing_show_id;;
206
+            2) syncthing_add_id;;
207
+            3) syncthing_remove_id;;
208
+            4) syncthing_manual_edit;;
209
+            5) break;;
210
+        esac
211
+    done
212
+}
213
+
42 214
 function install_interactive_syncthing {
43 215
     echo -n ''
44 216
 }

+ 10
- 0
src/freedombone-app-tox 查看文件

@@ -49,6 +49,16 @@ TOXIC_FILE=/usr/local/bin/toxic
49 49
 QTOX_REPO="https://github.com/bashrc/qTox"
50 50
 QTOX_COMMIT='27a628a3789fca4f31516c3982e580052dd3c773'
51 51
 
52
+function run_client_tox {
53
+    # create a tox user
54
+    if [ ! -f /home/${USER}/.config/tox/data.tox ]; then
55
+        mkdir -p /home/${USER}/.config/tox
56
+        chown -R ${USER}:${USER} /home/${USER}/.config
57
+        toxid -u ${USER} -n data
58
+    fi
59
+    toxic -f /home/${USER}/.config/tox/data.tox --force-tcp --SOCKS5-proxy 127.0.0.1 9050
60
+}
61
+
52 62
 function install_interactive_tox {
53 63
     echo -n ''
54 64
 }

+ 4
- 0
src/freedombone-app-xmpp 查看文件

@@ -37,6 +37,10 @@ XMPP_PASSWORD=
37 37
 XMPP_CIPHERS='"EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA"'
38 38
 XMPP_ECC_CURVE='"secp384r1"'
39 39
 
40
+function run_client_xmpp {
41
+    torify profanity
42
+}
43
+
40 44
 function install_interactive_xmpp {
41 45
     echo -n ''
42 46
 }

+ 5
- 2
src/freedombone-controlpanel 查看文件

@@ -1848,7 +1848,7 @@ function menu_wifi {
1848 1848
     done
1849 1849
 }
1850 1850
 
1851
-function app_settings {
1851
+function menu_app_settings {
1852 1852
     detect_installable_apps
1853 1853
 
1854 1854
     applist=""
@@ -1866,6 +1866,9 @@ function app_settings {
1866 1866
         fi
1867 1867
         app_index=$[app_index+1]
1868 1868
     done
1869
+    if [ $n -le 1 ]; then
1870
+        return
1871
+    fi
1869 1872
     backstr=$'Exit'
1870 1873
     applist="$applist $n $backstr on"
1871 1874
     appnames+=("Exit")
@@ -1921,7 +1924,7 @@ function menu_top_level {
1921 1924
             1) show_about;;
1922 1925
             2) menu_backup_restore;;
1923 1926
             3) reset_tripwire;;
1924
-            4) app_settings;;
1927
+            4) menu_app_settings;;
1925 1928
             5) ${PROJECT_NAME}-addremove;;
1926 1929
             6) logging_on_off;;
1927 1930
             7) ping_enable_disable;;

+ 62
- 198
src/freedombone-controlpanel-user 查看文件

@@ -36,8 +36,17 @@ export TEXTDOMAINDIR="/usr/share/locale"
36 36
 MY_EMAIL_ADDRESS=$USER@$HOSTNAME
37 37
 GPG_ID=$(gpg --fingerprint $MY_EMAIL_ADDRESS | grep -i "pub" | head -n 1 | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}')
38 38
 
39
-SYNCTHING_CONFIG_FILE=~/.syncthingids
40
-SYNCTHING_ID=$(cat ~/.syncthing-server-id)
39
+UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*
40
+for f in $UTILS_FILES
41
+do
42
+  source $f
43
+done
44
+
45
+APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
46
+for f in $APP_FILES
47
+do
48
+  source $f
49
+done
41 50
 
42 51
 function any_key {
43 52
     echo ' '
@@ -595,147 +604,6 @@ function smtp_proxy {
595 604
     fi
596 605
 }
597 606
 
598
-function syncthing_create_ids_file {
599
-    if [ ! -f ~/.syncthing-server-id ]; then
600
-        return
601
-    fi
602
-
603
-    SYNCTHING_ID=$(cat ~/.syncthing-server-id)
604
-    if [ ! -f $SYNCTHING_CONFIG_FILE ]; then
605
-        echo $'# Your syncthing configuration file' > $SYNCTHING_CONFIG_FILE
606
-        echo '#' >> $SYNCTHING_CONFIG_FILE
607
-        echo $"# The ${PROJECT_NAME} syncthing ID is: $SYNCTHING_ID" >> $SYNCTHING_CONFIG_FILE
608
-        echo '#' >> $SYNCTHING_CONFIG_FILE
609
-        echo '# Paste the IDs of your devices below' >> $SYNCTHING_CONFIG_FILE
610
-        echo '#' >> $SYNCTHING_CONFIG_FILE
611
-    fi
612
-}
613
-
614
-function syncthing_manual_edit {
615
-    if [ ! -f ~/.syncthing-server-id ]; then
616
-        return
617
-    fi
618
-    syncthing_create_ids_file
619
-    editor $SYNCTHING_CONFIG_FILE
620
-
621
-    # force an update of the configuration
622
-    touch ~/.syncthing-update
623
-}
624
-
625
-function syncthing_show_id {
626
-    if [ ! -f ~/.syncthing-server-id ]; then
627
-        return
628
-    fi
629
-
630
-    SYNCTHING_ID=$(cat ~/.syncthing-server-id)
631
-    dialog --title $"Device ID for ${PROJECT_NAME}" \
632
-           --backtitle $"Freedombone User Control Panel" \
633
-           --msgbox $"In a desktop terminal press shift and select the ID below,\nthen right click and copy.\n\nWithin Connectbot select Menu/Copy and then highlight the ID below\n\n$SYNCTHING_ID" 12 78
634
-}
635
-
636
-function syncthing_add_id {
637
-    if [ ! -f ~/.syncthing-server-id ]; then
638
-        return
639
-    fi
640
-
641
-    syncthing_create_ids_file
642
-
643
-    data=$(tempfile 2>/dev/null)
644
-    trap "rm -f $data" 0 1 2 5 15
645
-    dialog --backtitle $"Freedombone User Control Panel" \
646
-           --title $"Add a Syncthing device ID" \
647
-           --form $"Paste the device ID for your laptop/desktop/netbook/phone/tablet below" 9 80 2 \
648
-           $"Device ID:" 1 1 "" 1 26 80 80 \
649
-           $"Description (optional):" 2 1 "" 2 26 80 80 \
650
-           2> $data
651
-    sel=$?
652
-    case $sel in
653
-        1) return;;
654
-        255) return;;
655
-    esac
656
-    SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p)
657
-    SYNCTHING_DESCRIPTION=$(cat $data | sed -n 2p)
658
-
659
-    if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then
660
-        return
661
-    fi
662
-
663
-    if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'*  || $SYNCTHING_DEVICE_ID != *"-"* ]]; then
664
-        dialog --title $"Add a Syncthing device ID" \
665
-               --backtitle $"Freedombone User Control Panel" \
666
-               --msgbox $"That doesn't look like a device ID" 6 50
667
-        return
668
-    fi
669
-
670
-    if grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then
671
-        dialog --title $"Add a Syncthing device ID" \
672
-               --backtitle $"Freedombone User Control Panel" \
673
-               --msgbox $"That ID has already been added" 6 50
674
-        return
675
-    fi
676
-
677
-    if [ ${#SYNCTHING_DESCRIPTION} -gt 0 ]; then
678
-        echo "# $SYNCTHING_DESCRIPTION" >> $SYNCTHING_CONFIG_FILE
679
-    fi
680
-    echo "$SYNCTHING_DEVICE_ID" >> $SYNCTHING_CONFIG_FILE
681
-
682
-    # force an update of the configuration
683
-    touch ~/.syncthing-update
684
-
685
-    dialog --title $"Add a Syncthing device ID" \
686
-           --backtitle $"Freedombone User Control Panel" \
687
-           --msgbox $"The ID was added" 6 50
688
-}
689
-
690
-function syncthing_remove_id {
691
-    if [ ! -f ~/.syncthing-server-id ]; then
692
-        return
693
-    fi
694
-
695
-    syncthing_create_ids_file
696
-
697
-    data=$(tempfile 2>/dev/null)
698
-    trap "rm -f $data" 0 1 2 5 15
699
-    dialog --backtitle $"Freedombone User Control Panel" \
700
-           --title $"Remove a Syncthing device ID" \
701
-           --form $"Paste the device ID which is to be removed below" 8 80 1 \
702
-           $"Device ID:" 1 1 "" 1 14 80 80 \
703
-           2> $data
704
-    sel=$?
705
-    case $sel in
706
-        1) return;;
707
-        255) return;;
708
-    esac
709
-    SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p)
710
-
711
-    if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then
712
-        return
713
-    fi
714
-
715
-    if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'*  || $SYNCTHING_DEVICE_ID != *"-"* ]]; then
716
-        dialog --title $"Remove a Syncthing device ID" \
717
-               --backtitle $"Freedombone User Control Panel" \
718
-               --msgbox $"That doesn't look like a device ID" 6 50
719
-        return
720
-    fi
721
-
722
-    if ! grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then
723
-        dialog --title $"Remove a Syncthing device ID" \
724
-               --backtitle $"Freedombone User Control Panel" \
725
-               --msgbox $"That ID wasn't registered anyway" 6 50
726
-        return
727
-    fi
728
-
729
-    sed -i "/$SYNCTHING_DEVICE_ID/d" $SYNCTHING_CONFIG_FILE
730
-
731
-    # force an update of the configuration
732
-    touch ~/.syncthing-update
733
-
734
-    dialog --title $"Remove a Syncthing device ID" \
735
-           --backtitle $"Freedombone User Control Panel" \
736
-           --msgbox $"The ID was removed" 6 50
737
-}
738
-
739 607
 function sign_gpg_key {
740 608
     data=$(tempfile 2>/dev/null)
741 609
     trap "rm -f $data" 0 1 2 5 15
@@ -854,34 +722,6 @@ function menu_email {
854 722
     done
855 723
 }
856 724
 
857
-function menu_syncthing {
858
-    while true
859
-    do
860
-        data=$(tempfile 2>/dev/null)
861
-        trap "rm -f $data" 0 1 2 5 15
862
-        dialog --backtitle $"Freedombone User Control Panel" \
863
-               --title $"File Synchronization" \
864
-               --radiolist $"Choose an operation:" 12 70 6 \
865
-               1 $"Show device ID for ${PROJECT_NAME}" off \
866
-               2 $"Add an ID for another machine or device" off \
867
-               3 $"Remove an ID for another machine or device" off \
868
-               4 $"Manually edit device IDs" off \
869
-               5 $"Back to main menu" on 2> $data
870
-        sel=$?
871
-        case $sel in
872
-            1) break;;
873
-            255) break;;
874
-        esac
875
-        case $(cat $data) in
876
-            1) syncthing_show_id;;
877
-            2) syncthing_add_id;;
878
-            3) syncthing_remove_id;;
879
-            4) syncthing_manual_edit;;
880
-            5) break;;
881
-        esac
882
-    done
883
-}
884
-
885 725
 function menu_admin {
886 726
     if [ ! -f /etc/sudoers ]; then
887 727
         clear
@@ -905,14 +745,43 @@ function sign_keys {
905 745
     esac
906 746
 }
907 747
 
908
-function run_tox_client {
909
-    # create a tox user
910
-    if [ ! -f /home/${USER}/.config/tox/data.tox ]; then
911
-        mkdir -p /home/${USER}/.config/tox
912
-        chown -R ${USER}:${USER} /home/${USER}/.config
913
-        toxid -u ${USER} -n data
748
+function menu_run_client_app {
749
+    detect_installable_apps
750
+
751
+    applist=""
752
+    appnames=()
753
+    n=1
754
+    app_index=0
755
+    for a in "${APPS_AVAILABLE[@]}"
756
+    do
757
+        if [[ ${APPS_INSTALLED[$app_index]} != "0" ]]; then
758
+            if [[ $(function_exists run_client_${a}) == "1" ]]; then
759
+                applist="$applist $n $a off"
760
+                n=$[n+1]
761
+                appnames+=("$a")
762
+            fi
763
+        fi
764
+        app_index=$[app_index+1]
765
+    done
766
+    if [ $n -le 1 ]; then
767
+        return
768
+    fi
769
+    backstr=$'Exit'
770
+    applist="$applist $n $backstr on"
771
+    appnames+=("Exit")
772
+
773
+    choice=$(dialog --stdout --backtitle $"Freedombone" \
774
+                     --title $"Run an App" \
775
+                     --radiolist $'Choose:' \
776
+                     16 40 20 $applist)
777
+
778
+    if [ $? -eq 0 ]; then
779
+        app_index=$[choice-1]
780
+        chosen_app=${appnames[$app_index]}
781
+        if [[ $chosen_app != "Exit" ]]; then
782
+            run_client_${chosen_app}
783
+        fi
914 784
     fi
915
-    toxic -f /home/${USER}/.config/tox/data.tox --force-tcp --SOCKS5-proxy 127.0.0.1 9050
916 785
 }
917 786
 
918 787
 function menu_top_level {
@@ -925,16 +794,14 @@ function menu_top_level {
925 794
                --radiolist $"Choose an operation:" 19 50 12 \
926 795
                1 $"Use Email" off \
927 796
                2 $"Change Email Filtering Rules" off \
928
-               3 $"Use Tox Chat" off \
929
-               4 $"Use XMPP Chat" off \
930
-               5 $"Use IRC" off \
931
-               6 $"Browse the Web" off \
932
-               7 $"File Synchronization" off \
933
-               8 $"My Encryption Keys" off \
934
-               9 $"Set an outgoing email proxy" off \
935
-               10 $"Administrator controls" off \
936
-               11 $"Exit to the command line" off \
937
-               12 $"Log out" on 2> $data
797
+               3 $"Run an App" off \
798
+               4 $"Browse the Web" off \
799
+               5 $"File Synchronization" off \
800
+               6 $"My Encryption Keys" off \
801
+               7 $"Set an outgoing email proxy" off \
802
+               8 $"Administrator controls" off \
803
+               9 $"Exit to the command line" off \
804
+               10 $"Log out" on 2> $data
938 805
         sel=$?
939 806
         case $sel in
940 807
             1) exit 1;;
@@ -943,16 +810,13 @@ function menu_top_level {
943 810
         case $(cat $data) in
944 811
             1) mutt;;
945 812
             2) menu_email;;
946
-            3) run_tox_client;;
947
-            4) torify profanity;;
948
-            5) irssi;;
949
-            6) torify elinks;;
950
-            7) menu_syncthing;;
951
-            8) menu_encryption_keys;;
952
-            9) smtp_proxy;;
953
-            10) menu_admin;;
954
-            11) break;;
955
-            12) kill -HUP `pgrep -s 0 -o`;;
813
+            3) menu_run_client_app;;
814
+            4) torify elinks;;
815
+            5) menu_encryption_keys;;
816
+            6) smtp_proxy;;
817
+            7) menu_admin;;
818
+            8) break;;
819
+            9) kill -HUP `pgrep -s 0 -o`;;
956 820
         esac
957 821
     done
958 822
 }