Olá pessoal! Venho em busca de ajuda com um projetinho que idealizei em desenvolver mas que acabou se tornando muito mais complexo do que eu imaginava…

Tenho pouca experiência com desenvolvimento de apps nativos pra desktop (meu foco sempre foi web) mas me interessei muito pelo ecossistema do GNOME!

A ideia é criar uma ferramenta para auxiliar na instalação de módulos de kernel os quais oferecem suporte ao hardware do Xbox no Linux. Hoje em dia isso precisa ser feito buscando pelos repositórios certos no Github (xpadneo + xone), clonando pra sua máquina, executando scripts no terminal e, quando as coisas dão errado, manipulando os módulos diretamente pelo dkms.

Eu gostaria de tornar essa experiência mais simples pois quando fiz minha transição do Windows 10 para o Fedora 37 isso foi algo que eu levei um bom tempo até conseguir fazer funcionar. Ter um app que torne isso “uma experiência de dois cliques” seria uma mão na roda naquela época e é isso que eu gostaria de tirar do papel.

Eu já tenho um projeto de aplicativo GNOME sendo desenvolvido para esse fim, se chama XPDA - Xbox Peripherals Driver Assistant. No entanto, por hora ele é só uma casca com um protótipo de interface de usuário escrito em Typescript sem funcionalidade alguma, pois foi justamente aí que encontrei minha dificuldade: como executar comandos com privilégios administrativos no sistema a partir do contexto de um app “conteinerizado” como um Flatpak?

Isso me levou a buscar por soluções na internet, documentação, fóruns, até mesmo LLMs… Não consegui encontrar nenhum exemplo do que preciso fazer, mas até que aprendi alguma coisa sobre como executar subprocessos, DBus e Polkit (os últimos são coisas das quais eu nunca nem tinha ouvido falar).

Enfim: alguém poderia me ajudar, ou me apontar para algum recurso que esclareça como desenvolver um serviço de sistema que rode como um usuário privilegiado lado a lado com o meu aplicativo, fale com o DKMS (essa parte eu consigo implementar, acho), exponha uma API no DBus e use o polkit para possibilitar a escalação dos privilégios pelo aplicativo Flatpak?

TLDR: preciso de ajuda para desenvolver um serviço de sistema que rode como um usuário privilegiado lado a lado com o meu aplicativo, fale com o DKMS (essa parte eu consigo implementar, acho), exponha uma API no DBus e use o polkit para possibilitar a escalação dos privilégios pelo aplicativo Flatpak. Alguém poderia me auxiliar com isso?

  • BaalInvokerA
    link
    fedilink
    arrow-up
    4
    ·
    2 months ago

    Posso estar enganado, mas acredito que programas Flatpak não podem rodar com privilégio elevado. Aplicativos como Zenmap, por exemplo, geralmente tem a seguinte descrição This version of Zenmap has a user restriction due to Flatpak: It can't be run as a root user..

    Como seu objetivo é criar um programa que mexe com uma parte tão profunda do sistema - módulos de kernel -, acredito que idealmente você deveria criar aplicativo nativo. Flatpak não vai te dar a permissão que você precisa para fazer essas modificações (pelo menos é o que eu acho).

    Não se preocupe com fazer seu programa um flatpak agora. Gaste suas energias fazendo ele funcionar nativamente. Depois que ele já estiver funcionando nativamente, daí você avalia a viabilidade de tornar ele um flatpak ou não. Também estudaria uma alternativa de criar um AppImage ao invés de Flatpak, pois acredito que tem como você rodar o pkexec com AppImage.

    • tarsisurdiOP
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      2 months ago

      Pois então, preciso focar o desenvolvimento apenas em um serviço de sistema que converse com o dkms e exponha uma API no DBus, dessa forma funcionaria com o Flatpak (e também com outros formatos), pensando em manutenção disso no futuro…

      Em conversa com o pessoal do GNOME Brasil no Matrix, me apontaram para essa biblioteca que parece facilitar bastante o desenvolvimento do serviço, só agora eu tenho que saber quais métodos implementar e como usar essa biblioteca kkkkkkkk

      EDIT: mas sim, se eu tivesse acesso ao pkexec seria muito mais simples executar os comandos como subprocessos…