elog 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. #!/bin/bash
  2. #=============HEADER==============================================================|
  3. #AUTOR:
  4. # Jefferson Rocha <lrcjefferson@gmail.com>
  5. #
  6. #PROGRAMA:
  7. # Elog (Emmi Log)
  8. #
  9. #VERSÃO:
  10. # 0.4
  11. #
  12. #LICENÇA MIT
  13. #
  14. #SITE:
  15. # http://www.emmilinux.com.br
  16. #
  17. #DESCRIÇÃO:
  18. # Utilitário via CLI utilizando DIALOG com muitos recursos para facilitar
  19. # a vida do usuário!
  20. # Este programa foi feito especialmente para Distribuição Emmi Linux, que
  21. # tem como sua base o Debian.
  22. # Por isso para rodar em outra distribuição deve-se adaptar,
  23. # alguns recursos como comandos.
  24. #
  25. #RECURSOS:
  26. # -Atualizar Hora com Ntpdate (Servidor1 - ntp.br, Servidor2 - 2.br.pool.ntp.org )
  27. # -Configuração de Monitores com xrandr
  28. # -Configuração do teclado para ABNT2
  29. # -Editar Repositório com o editor nano
  30. #
  31. #NOTAS:
  32. # -Todos arquivos texto caso precise são adicionados em /tmp/elog.txt ,
  33. # e são excluidos logo após concluir a opção.
  34. # A uma função para isto que se chama (log4space)
  35. #
  36. #
  37. #
  38. #
  39. #CHANGELOG:
  40. #
  41. # (Versão 0.1) - Jefferson Rocha
  42. # -Lançamento do Software
  43. #
  44. # (Versão 0.2) - Jefferson Rocha
  45. # -Adicionado Configuração para Monitores
  46. #
  47. #
  48. # (Versão 0.3) - Jefferson Rocha
  49. # -Adicionado configuração Teclado (ABNT2)
  50. #
  51. #
  52. # (Versão 0.4) - Jefferson Rocha
  53. # -Adicionado Opção para editar Repositório (com editor nano)
  54. # -Trocado modo de chamada das funções "function por func()"
  55. # -Adicionado váriavel DIALOGRC para puxar configurações padrão do programa
  56. #
  57. #
  58. # (Versão 1.0) - Jefferson Rocha
  59. # -Adicionado check para ver se ntpdate está no sistema
  60. # -Adicionado opções para instalação dos checks ( dialog, ntpdate )
  61. # -Adicionado opção para mudar/alternar de shell (fish, bash)
  62. # -Adicionado opção de Ajuda no menu principal
  63. # -Adicionado tratamento de saída 255 (ESC)
  64. #
  65. #=================================================================================|
  66. #=======Váriaveis do Elog==#
  67. name="elog"
  68. version="1.0"
  69. back_title="$name versão $version"
  70. check_root=$(echo $UID)
  71. check_dialog=$(which dialog 2>&-)
  72. check_ntp=$(which ntpdate 2>&-)
  73. export DIALOGRC=".dialogrc-elog" # Mudar cor
  74. #===========FIM Váriaveis==#
  75. #=======Funções==#
  76. MSG_ERROR() { # Mensagem padronizada de erro.
  77. dialog --stdout \
  78. --title "Erro!" \
  79. --backtitle "$back_title" \
  80. --msgbox "\n Houve um erro :( \n" 8 25
  81. }
  82. KEY_OUTPUT() { # Tratamento de saídas
  83. case $? in
  84. 1) break ;;
  85. 2)
  86. dialog --stdout \
  87. --title "Ajuda" \
  88. --backtitle "$back_title" \
  89. --ok-label "Voltar" \
  90. --msgbox "
  91. Elog versão $version
  92. Este mini manual tem como te ajudar a se encontrar aqui na elog.
  93. Este software foi desenvolvido para você ter acesso fácil as principais configurações do sistema Emmi.
  94. - Como posso navegar entre os menus?
  95. Você pode usar o DIRECIONAL (flexinhas) do seu teclado ou simplesmente usar TAB.
  96. - Como faço para selecionar algo? Por exemplo, alguma opção do menu principal?
  97. Você pode usar o BACKSPACE ou o ENTER do seu teclado.
  98. - Como posso sair do programa sem precisar ir no botão (Sair)?
  99. Você pode apertar CTRL+C para finalizar a elog.
  100. Se você encontrar um bug ou quer fazer alguma solicitação, envie um e-mail para <jeffersonrocha@emmilinux.com.br>
  101. " 0 0 ;;
  102. 255)
  103. dialog --stdout \
  104. --yes-label "Sim" --no-label "Não" \
  105. --yesno "Deseja Sair?" 0 0
  106. [ $? = "0" ] && exit 0
  107. esac
  108. }
  109. log4space() {
  110. rm /tmp/elog.txt
  111. }
  112. #=======FIM Funções==#
  113. #=======Configuração Inicial==#
  114. # Usuário é root?
  115. if [[ $check_root -ne 0 ]]; then
  116. dialog --stdout \
  117. --title "Erro!" \
  118. --backtitle "$back_title" \
  119. --ok-label "Ok! Já volto." \
  120. --msgbox "\nFavor, logar-se como root." 8 27
  121. clear
  122. exit 1
  123. fi
  124. # ntp está no sistema?
  125. if [[ ! -e $check_ntp ]]; then
  126. dialog --stdout \
  127. --title "Erro!" \
  128. --backtitle "$back_title" \
  129. --ok-label "Sim, Instale." \
  130. --cancel-label "Não." \
  131. --yesno "\nNecessitas do 'ntpdate' para continuar, Deseja instalar agora?" 8 27
  132. if [ $? = "0" ]; then
  133. dialog --stdout \
  134. --title "Aguarde!!!" \
  135. --infobox "Instalando..." 0 0
  136. apt-get install ntpdate > /dev/null 2>/tmp/elog.txt
  137. [ $? = "0" ] && \ # Verificando se instalação nao teve erros.
  138. dialog --sleep 3 --infobox "Concluído" 0 0 \
  139. || \
  140. dialog --sleep 3 --title "OPS!" --infobox "Houve algum erro..." 0 0
  141. dialog --title "Verifique o Erro" \
  142. --editbox "/tmp/elog.txt" 0 0
  143. log4space # Chamada Funçao (REMOVER LOG)
  144. else
  145. exit 1
  146. fi
  147. fi
  148. # Dialog está instalado no sistema?
  149. if [[ ! -e $check_dialog ]]; then
  150. echo -e "\033[31;1mFavor Instalar o Dialog para prosseguir!\033[m"
  151. read -p "Deseja instalar agora?" option_user
  152. option_user_upper=${option_user,,}
  153. [ "$option_user" = "s" ] && apt-get install dialog
  154. fi
  155. #===========FIM Configurações==#
  156. # THE FUN START HERE ;)
  157. # Menu Principal
  158. while : ; do
  159. menu=$(
  160. dialog --stdout \
  161. --title "Menu Principal" \
  162. --backtitle "$back_title" \
  163. --ok-button "Executar" \
  164. --cancel-button "Sair" \
  165. --help-button \
  166. --help-label "Ajuda" \
  167. --menu "O que você deseja fazer?" \
  168. 0 0 0 \
  169. Hora "Ajustar o horário" \
  170. Monitores "Ajuste meus Monitores" \
  171. Teclado "Deixe meu teclado ABNT2" \
  172. Repositório "Ajuste meu Repositório" \
  173. Shell "Troque o meu Shell por outro" )
  174. KEY_OUTPUT # Chamada função de tratamento de saída
  175. case $menu in
  176. # HORA
  177. Hora)
  178. dialog --stdout \
  179. --title "Configuração da Hora" \
  180. --backtitle "$back_title" \
  181. --infobox "Um momento..." 0 0
  182. ntpdate ntp.br || ntpdate 2.br.pool.ntp.org # Atualizar data
  183. if [[ $? -eq 0 ]]; then
  184. dialog --stdout \
  185. --title "Concluído" \
  186. --backtitle "$back_title" \
  187. --msgbox "Concluído!" 0 0 ;sleep 3s
  188. else
  189. MSG_ERROR
  190. fi ;;
  191. # MONITORES
  192. Monitores)
  193. dialog --stdout \
  194. --title "Configuração dos monitores" \
  195. --backtitle "$back_title" \
  196. --infobox "Aguarde..." 0 0
  197. xrandr > /tmp/elog.txt # Criando arquivo em tmp do Elog
  198. dialog --stdout \
  199. --exit-label "Continuar" \
  200. --title "Configuração dos monitores" \
  201. --backtitle "$back_title" \
  202. --textbox /tmp/elog.txt 0 0
  203. case $? in
  204. 0)
  205. MONITOR_MAIN=$(
  206. dialog --stdout \
  207. --title "Configuração dos monitores" \
  208. --backtitle "$back_title" \
  209. --inputbox "Informe o monitor principal\nExemplo: VGA-1" 0 0 )
  210. FILTER_M_MAIN=$(echo $MONITOR_MAIN | tr [:lower:] [:upper:]) # tudo em MAIUSCULO
  211. POSITION=$( # Posição do monitor!
  212. dialog --stdout \
  213. --title "IMPORTANTE" \
  214. --inputbox "Qual a posição do monitor principal?\nRight=Direita Left=Esquerda :" 0 0 )
  215. FILTER_POSITION=$(echo $POSITION | tr [:upper:] [:lower:] )
  216. MONITOR_SECONDARY=$(
  217. dialog --stdout \
  218. --title "Configuração dos monitores" \
  219. --backtitle "$back_title" \
  220. --inputbox "Informe o monitor secundário:\nExemplo HDMI-1" \ 0 0 )
  221. FILTER_M_SECONDARY=$(echo $MONITOR_SECONDARY | tr [:lower:] [:upper:]) # tudo em MAISCULO
  222. # Executando comando xrandr
  223. xrandr --output $FILTER_M_MAIN --$FILTER_POSITION-of $FILTER_M_SECONDARY
  224. if [[ $? -eq 0 ]]; then
  225. dialog --stdout \
  226. --title "Finalizado" \
  227. --msgbox "Finalizado com Sucesso! :)" 0 0
  228. rm /tmp/elog.txt
  229. else
  230. MSG_ERROR
  231. fi
  232. esac ;;
  233. # Teclado
  234. Teclado)
  235. dialog --stdout \
  236. --title "Configuração do teclado" \
  237. --backtitle "$back_title" \
  238. --infobox "Um momento!" 0 0
  239. setxkbmap -model pc105 -layout br -variant abnt2
  240. if [[ $? -eq 0 ]]; then
  241. dialog --stdout \
  242. --title "Configuração teclado" \
  243. --msgbox "Concluído!" 0 0
  244. echo "setxkbmap -model pc105 -layout br -variant abnt2" >> /etc/profile
  245. else
  246. MSG_ERROR
  247. fi ;;
  248. # Repositório
  249. Repositório)
  250. nano /etc/apt/sources.list ;;
  251. Shell)
  252. while : ;do
  253. type_shell=$(
  254. dialog --stdout \
  255. --menu "Escolha qual shell será o Padrão" \
  256. 0 0 0 \
  257. Fish "Shell Fácil de utilizar e bem completo" \
  258. Bash "Shell padrão de todas as distribuições" )
  259. KEY_OUTPUT # Chamada funçao
  260. if [ "$type_shell" = "Fish" ]; then
  261. shell_fish=$(which fish)
  262. if [ ! -e "$shell_fish" ]; then
  263. dialog --sleep 4 --infobox "Você não possue o Fish, instale e retorne." 5 42
  264. break
  265. fi
  266. name=$(dialog --stdout --inputbox "Nome do seu Usuário:" 0 0)
  267. grep "$name" /etc/passwd >/dev/null # Usuário Existe?
  268. if [ $? = "1" ] || [ -z "$name" ]; then
  269. dialog --title "Ops." \
  270. --ok-label "Ok" \
  271. --msgbox "Este usuário Não existe!" 5 30
  272. else
  273. chsh --shell "$shell_fish" "$name"
  274. chsh --shell "$shell_fish" "root"
  275. dialog --sleep 4 \
  276. --infobox "Concluído, reinicie sua Interface gráfica." 3 45
  277. break
  278. fi
  279. else
  280. shell_bash=$(which bash)
  281. name=$(dialog --stdout --inputbox "Nome do seu Usuário:" 0 0)
  282. grep "$name" /etc/passwd >/dev/null # Usuário Existe?
  283. if [ $? = "1" ] || [ -z "$name" ]; then
  284. dialog --title "Ops." \
  285. --ok-label "Ok" \
  286. --msgbox "Este usuário Não existe!" 5 30
  287. else
  288. chsh --shell "$shell_bash" "$name" && \
  289. chsh --shell "$shell_bash" "root"
  290. dialog --sleep 4 \
  291. --infobox "Concluído, reinicie sua Interface gráfica." 3 45
  292. break
  293. fi
  294. fi
  295. done ;;
  296. esac # Fecha case Principal
  297. done # Fecha loop do menu