Programa gráfico em Java para atualizar Ubuntu based e mais

Sexta-feira, 08/07, tive a “brilhante” ideia de criar uma interface com JFrame com o intuito de atualizar sistemas com base Ubuntu* e, de brinde, iniciar a instância do SQL Server (via) docker através de scripts shell. É um projeto besta de simples, mas para quem se interssar, aqui vai o repositório → https://github.com/JGMelon22/EasyGUI

Screenshot from 2022-07-10 22-06-54

5 curtidas

Empacotou isso como?

Tem que compilar usando jdk 8 ou superior. Motivo: o local onde o usuário vai colocar os .sh é dinâmico.

1 curtida

Não pensou em fazer um .deb ou Appimage?

1 curtida

Posso tentar, mas tenho que descobrir antes como usar um “coringa” para representar o nome do usuário, pois o “~/” não funcionou.

2 curtidas

Já pensou em variável de ambiente? System.getenv("HOME") ou System.getenv("USER")


Também notei a falta de uma licença, considere adicionar…

1 curtida

Como a ideia inicial era ser uma quebra de conceito, não pensei em adicionar uma licença. Mas boa ideia. Vou adicionar uma :slight_smile:
E sobre as variáveis de ambiente, não. Faz tempo que não mexo com Java, então tô voltando no modo emburrado por assim dizer kkk
Assim que eu tiver mais tempo, modificarei o código.

Adicionei o System.getenv("HOME") e resolvido essa questão. Obrigado pelo bizu.
O próximo passo e criar um .deb, ou flatpak ou sei lá para distribuir mais facilmente a aplicação. Fiz o primeiro release agora a pouco compilado em Java 17, pois não consegui reaproveitar os Forms em Java 11, ao menos o IntelliJ não deixava.

1 curtida

Notei que para iniciar um processo esta usando gnome-terminal -e, recomendo alterar para sh, pois o mesmo estará disponível com todos os *Unix, caso contrario falhará, caso o gnome-terminal não estiver instalado.

Em relação à construir um AppImage para aplicações Java como sugerido, segue link.

2 curtidas

Sim, não sabia que de forma geral o sh funcionaria, tive problemas ao compilar e rodar ao usar o IntelliJ em flatpak, então optei pelo Gnome-Terminal, mas agora estou com a versão da toolbox. Vou alterar e já subo a versão atualizada. @null valeu pelo feedback e pelas discas :slight_smile:

1 curtida

Bom… Acaba não chamando nem um terminal pelo visto. Preciso que chame algum feedback gráfico (terminal mesmo) para o usuário inputar a senha, pois os processos são como sudo

1 curtida

Sou meio leigo, mas o tal do packagekit (ou polkit, agora não lembro ao certo) não serviria pra isso? (Lembro do @frc_kde sempre desinstalando das distros dele pq ele só faz att pelo terminal mesmo…)

1 curtida

Aí que tá, a ideia de criar em software em Java é justamente fazer o que o atualizador do Pop!_OS, meu caso, na faz. Prefiro chamar um script que criei que atualiza com full-upgrade e de brinde um autoremove. Pelo que li, pouco pois estou na correria, o sh dispara o script shell, mas não chama terminal algum, o que é uma pena, pois ê preciso do input de senha do usuário para ele rodar os scripts e, ainda, não cheguei ao nível de saber como chamo uma text box da vida para o input da senha e passar para o terminal da vida, tudo via JFrame.
E uma observação: não criei nem para mim, mas por causa do meu pai que acha chato chamar o script via terminal para o docker + SQL server.

1 curtida

Deixa ver se ajudo arrumando as tarefas:

  1. Scripts pra atualizar etc. - OK
  2. Frontend pra rodar os scripts - OK

Ficaria faltando:
3. Uma forma de chamar uma janela onde inserir a senha (em GUI, imagino)
4. Empacotar isso de forma a ser encontrado num repositório e/ou na loja/Synaptic

Tô certo, @JG22?

Uma sugestão para o item 3: veja como o Pamac faz isso - mesmo quando roda no terminal, ele chama uma janela gráfica pra colocar a senha…

1 curtida

O item três pode ser chamando o terminal de forma genérica, tipo, saca o ~ representa a /home do usuário no Shell? Seria bom ter uma forma de chamar o terminal padrão da distro, seja o Konsole (no Kubuntu), xfce4-terminal (Xubuntu) ou o GNOME Terminal mesmo (Ubuntu vanilla).
O item quatro não é a maior preocupação no momento, pois trata-se de um arquivo .jar. Acho mais interessante portar para Java 11 até, pois é o default do Ubuntu 22.04

1 curtida

Uma boa. Só não sei se conseguirei replicar em Java pois, na teoria, essa parte do pamac é feita em C/C++.

1 curtida

Pra não complicar, uma alternativa é utilizar por exemplo o utilitário x-terminal-emulator à qual chamará o Emulador de Terminal que usuário tiver instalado, mas isso só está presente em algumas distros, se me lembro somente base Debian, o que você pode fazer é algo como o i3-sensible-terminal faz onde cria um loop-for, com os principais Emuladores de Terminal, bastando chama-lo em vez do que estar à fazer, segue um exemplo do i3-sensible-terminal.

for terminal in "$TERMINAL" x-terminal-emulator mate-terminal gnome-terminal terminator xfce4-terminal urxvt rxvt termit Eterm aterm uxterm xterm roxterm termite lxterminal terminology st qterminal lilyterm tilix terminix konsole kitty guake tilda alacritty hyper; do
    if command -v "$terminal" > /dev/null 2>&1; then
        exec "$terminal" "$@"
    fi
done

Mas o correto seria, ao clicar no botão abrir um dialog com o input-text perguntando a senha.


Outra questão notada nos scripts responsáveis, por iniciar e pausar containers Docker, você não necessariamente precisa do sudo, bastando adicionar o usuário ao grupo docker, para que o mesmo possa iniciá-los… Isso tem algumas implicações ao que se refere em segurança veja esse issue

1 curtida

Lembrei de um app que usa esse esquema - e como a distro instala uma pá de ambientes gráficos e o app é o mesmo, deve ter como saber chamar o terminal independente de qual emulador seja, é o script pra rodar o Reflector do Reborn, chama-se Refresh Mirrors. Só que, se não me engano, ele chama uma janela gráfica pra colocar a senha via policykit (ou sei lá, agora não lembro quem faz essa parte - hahahaha)

Mais um caso pra vc dar uma olhada em como fazer. O legal é que ao terminar de rodar o Reflector, ele fecha sozinho…

Ciente, mas como havia comentado em uma resposta do Rodrigo, a ideia inicial era ser um facilitador para o PC do meu pai, agora com a ajuda de vocês que estou começando a moldar de forma mais profissional, por assim dizer.
Agora apenas empaquei como posso, ao chamar o terminal via o script que você disaponibillizou, passar os comandos necessários, como o sudo apt update :thinking:

1 curtida

Esse é um problema (nem li a issue, mas ok): é uma boa perguntar ao dono do PC se ele quer que seu user seja adicionado ao grupo docker. Essa diretriz de UX implica em mais uma série de passos a serem implementados na UI do app, creio

1 curtida