rafatosta / zapzap

WhatsApp desktop application written in Pyqt6 + PyQt6-WebEngine.
https://rtosta.com/zapzap-web/
GNU General Public License v3.0
86 stars 2 forks source link

ZapZap não abre no Flatpak do Deepin 20.6 #76

Closed eduardomozart closed 2 years ago

eduardomozart commented 2 years ago

Opa, buenas Rafael, tudo certo? Sempre é bom encontrar um brazuca e usar software desenvolvido por um brazuca também! Estou tentando executar o zapzap no Deepin 20.6 (baseado no Debian 10) e ao executar ele pelo Deepin Launcher ele simplesmente não abre. Ao executar ele pelo Flatpak, recebo a seguinte mensagem de erro:

Eduardo@Eduardo-PC:~$ flatpak run com.rtosta.zapzap
['/app/bin/zapzap']
QStandardPaths: wrong permissions on runtime directory /run/user/1000, 0755 instead of 0700
qt.webenginecontext: 

GL Type: desktop
Surface Type: OpenGL
Surface Profile: NoProfile
Surface Version: 3.1
QSG RHI Backend: OpenGL
Using Supported QSG Backend: yes
Using Software Dynamic GL: no
Using Multithreaded OpenGL: yes

Init Parameters:
  *  application-name ZapZap 
  *  browser-subprocess-path /app/bin/QtWebEngineProcess 
  *  disable-features ConsolidatedMovementXY,InstalledApp,BackgroundFetch,WebOTP,WebPayments,WebUSB,PictureInPicture 
  *  disable-setuid-sandbox  
  *  disable-speech-api  
  *  enable-features NetworkServiceInProcess,TracingServiceInProcess 
  *  enable-threaded-compositing  
  *  in-process-gpu  
  *  use-gl desktop 

[3:11:0801/212131.316644:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/Flatpak: org.freedesktop.DBus.Error.InvalidArgs: Nenhuma propriedade “supports”
Eduardo@Eduardo-PC:~$ [10:10:0100/000000.431688:ERROR:zygote_linux.cc(650)] write: Pipe quebrado (32)

Notei que a dependência com.riverbankcomputing.PyQt.BaseApp não havia sido instalada mas mesmo instalando ela via Flatpak conforme o README o problema persiste.

Se houver alguma informação que eu possa te fornecer para ajudar a diagnosticar ou resolver o problema, fico à disposição! Abraço e obrigado por desenvolver esse projeto!

rafatosta commented 2 years ago

Tudo na paz! Pelo erro QStandardPaths: wrong permissions on runtime directory /run/user/1000, 0755 instead of 0700 chuto que é algo relacionado as permissões de usuário. Verifica no flatseal como está as permissões para acessar as pastas de usuário, por favor

rafatosta commented 2 years ago

É só pelo Deepin Launcher que não funciona, correto?

Achei esse problema parecido com o Telegram e o Deepin https://github.com/telegramdesktop/tdesktop/issues/24569

eduardomozart commented 2 years ago

Pelo que vi no código-fonte do Qt, essa mensagem de permissão é apenas um aviso e não deveria impedir a execução do programa - https://invent.kde.org/packaging/flatpak-kde-runtime/-/merge_requests/44/diffs Devido ao não abrir pelo Deepin Launcher, decidi executar ele pelo Terminal. Ele não abre nem pelo Deepin Launcher nem pelo Terminal. Em ambos não chega nem a exibir a janela do programa. Acho que o erro pode estar relacionado as duas mensagens de erro no final da execução:

3:11:0801/212131.316644:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/Flatpak: org.freedesktop.DBus.Error.InvalidArgs: Nenhuma propriedade “supports”
Eduardo@Eduardo-PC:~$ [10:10:0100/000000.431688:ERROR:zygote_linux.cc(650)] write: Pipe quebrado (32)
rafatosta commented 2 years ago

Pelo que vi no código-fonte do Qt, essa mensagem de permissão é apenas um aviso e não deveria impedir a execução do programa - https://invent.kde.org/packaging/flatpak-kde-runtime/-/merge_requests/44/diffs Devido ao não abrir pelo Deepin Launcher, decidi executar ele pelo Terminal. Ele não abre nem pelo Deepin Launcher nem pelo Terminal. Em ambos não chega nem a exibir a janela do programa. Acho que o erro pode estar relacionado as duas mensagens de erro no final da execução:

3:11:0801/212131.316644:ERROR:object_proxy.cc(642)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/Flatpak: org.freedesktop.DBus.Error.InvalidArgs: Nenhuma propriedade “supports”
Eduardo@Eduardo-PC:~$ [10:10:0100/000000.431688:ERROR:zygote_linux.cc(650)] write: Pipe quebrado (32)

Muito estranho. Já tentou remover e instalar novamente?

eduardomozart commented 2 years ago

Já, mas o problema persiste. Vou tentar baixar as dependências pelo Pip e executar direto pelo código-fonte. Seria interessante disponibilizar seu app como um pacote pip também, já que permitiria executar o app de forma nativa em plataformas que suportam o Python ao invés de depender do Flatpak, possivelmente tornando o app multiplataforma, já que o pip está disponível para Windows e outros sistemas operacionais também. Seria interessante ter uma alternativa para o WhatsApp Web no Windows 7 e Windows 8 que não possuem cliente do WhatsApp nativos.

rafatosta commented 2 years ago

Seria o ideal, mas uso muita coisa que é exclusivo do linux como a troca de temas e notificações. Enfim, não é difícil "instalar" esse app no sistema. Bastaria:

  1. instalar as dependências via pip
  2. pip install setup.py --user
  3. modificar o .desktop na linha de execução do app para apenas exec=zapzap e colocar na pasta /home/seu_user/.local/share/applications/
  4. Além do ícone na pasta /home/seu_user/.local/share/icons/hicolor/scalable/apps/

Só terá um problema, a correção ortográfica não funcionará.

Outro problema é que não uso Windows mais e como há muita coisa específica da plataforma seria muito complicado dar suporte (lembre-se que faço isso no meu "tempo livre"). O flatpak proporciona essa compatibilidade com a maioria das distribuições e isso facilita bastante. Muitos dos problemas que aparecem, assim como o seu, é bem isolado e, na maioria das vezes, não consigo reproduzir aqui.

Se você puder mandar o link de download da distro que você usa ficaria mais fácil reproduzir aqui e tentar lançar uma correção.

eduardomozart commented 2 years ago

Sim, eu entendo. Sem problemas. =) Normalmente eu usava o WhatsChrome no Windows 7. Tentei executar o comando pip install setup.py --user aqui mas recebi o erro:

Eduardo@Eduardo-PC:~/Documents/GitHub/zapzap$ pip install setup.py --user
Collecting setup.py
Could not install packages due to an EnvironmentError: 404 Client Error: Not Found for url: https://pypi.org/simple/setup-py/ 

Não sei se essa URL é apontada no próprio código-fonte ou se o PIP está tentando baixar o setup-py da Internet. Estou vendo se consigo instalar o setup-py de outra forma.

O Deepin 20.6 pode ser baixado à partir da seguinte URL: https://www.deepin.org/en/download/

rafatosta commented 2 years ago

Acho que foi erro meu. Tenta "python setup.py install --user"

rafatosta commented 2 years ago

Sim, eu entendo. Sem problemas. =) Normalmente eu usava o WhatsChrome no Windows 7. Tentei executar o comando pip install setup.py --user aqui mas recebi o erro:

Eduardo@Eduardo-PC:~/Documents/GitHub/zapzap$ pip install setup.py --user
Collecting setup.py
Could not install packages due to an EnvironmentError: 404 Client Error: Not Found for url: https://pypi.org/simple/setup-py/ 

Não sei se essa URL é apontada no próprio código-fonte ou se o PIP está tentando baixar o setup-py da Internet. Estou vendo se consigo instalar o setup-py de outra forma.

O Deepin 20.6 pode ser baixado à partir da seguinte URL: https://www.deepin.org/en/download/

Amanhã vou instalar essa distro e fazer alguns testes.

rafatosta commented 2 years ago

Se a instalação funcionar, basta digitar 'zapzap' no terminal que o app é executado!

eduardomozart commented 2 years ago

Consegui instalar pelo Python/Pip!

Eis os comandos que executei para instalar após baixar o repositório pelo git:

python3 -m pip install pip setuptools --upgrade
python3 setup.py install --user
pip3 install PyQt6 PyQt6-WebEngine

O zapzap será instalado no diretório $HOME/.local/bin. Para executá-lo:

cd $HOME/.local/bin
./zapzap

Seria interessante atualizar o README para usar pip3 ao invés de pip e sobre a necessidade de atualizar o setup.py que acompanha a distro para a versão do repositório do Pip. Distribuições estáveis (como o Debian), diferente de Distros mais modernas, ainda acompanham o Python 2.7 por padrão. Então a única forma de executar o Python3 é informando a versão diretamente.

rafatosta commented 2 years ago

Coloquei a versão do python logo acima, mas vou ajustar essa parte. Obrigado.

Se jogar apenas zapzap no terminal tem que funcionar também.

Tá funcionando ok? Lembrando que a correção ortográfica não irá funcionar, agora o resto acho que funciona perfeitamente.

eduardomozart commented 2 years ago

Para instalar o atalho no Deepin Launcher (menu iniciar) do Deepin, navegue até o diretório git onde você baixou o zapzap e execute os comandos:

cp share/applications/com.rtosta.zapzap.desktop ~/.local/share/applications
cp share/icons/com.rtosta.zapzap.svg ~/.local/share/icons

Você precisará editar o arquivo ~/.local/share/applications/com.rtosta.zapzap.desktop e informar o caminho completo para o executável do ZapZap, caso contrário, o atalho não será exibido no Deepin Launcher. Altere Exec=zapzap para Exec=/home/Eduardo/.local/bin/zapzap (substitua /home/Eduardo pelo seu diretório $HOME).

Para executar o zapzap sem precisar executar pelo caminho completo (apenas executando o comando zapzap no Terminal), adicione o diretório ~/.local/bin a variável $PATH adicionando a seguinte linha ao final do arquivo ~/.bashrc:

export PATH="$HOME/.local/bin:$PATH"
rafatosta commented 2 years ago

Instalei o Deepin através do Fedora Everything e roda perfeitamente através do flatpak. Os únicos problemas são:

  1. Não sincroniza com to tema do sistema (o que significa que não segue o org.freedesktop.appearance);
  2. A decoração da janela no próprio app fica com pontas pretas (relacionado como o gestor da janela);
  3. Não aparece a foto do contato nas notificações e ao clicar não direciona para o app.

image

Note que o seletor de arquivo aberto pelo ZapZap segue o tema aplicado do sistema. image

Realmente as notificações não funcionam como deveriam e, mais uma vez, acredito que seja a forma que o Deepin trabalha com elas. O ZapZap usa o python-dbus e a interface org.freedesktop.Notification, que parece não ser um padrão da DE. image

Concluo que todos os problemas enfrentados por você está na distribuição que usa e não no Flatpak ou ZapZap.

eduardomozart commented 2 years ago

Sim, eu também acredito que seja problema na distro subjacente (Debian) ao invés do Flatpak ou ZapZap. Talvez seja corrigido na versão 20.7 ou na versão 23 do Deepin, que vai passar a usar o Debian 11. Mas as notificações pelo jeito não funcionaram nem no Flatpak quando o DDE é usado, o que indica que pode se tratar de um bug ou limitação do ambiente gráfico (DDE). Vou averiguar essa informação analisando o código-fonte do ZapZap e caso não consiga fazer a imagem aparecer, vou abrir um Bug Report na distro. Conseguiria um print da notificação como ela deveria aparecer? Pode ser no seu ambiente mesmo (Ubuntu, etc.), só para que eu possa encaminhar ao fazer o Bug Report, já que provavelmente não vou conseguir fazer ela aparecer como deveria no DDE.

rafatosta commented 2 years ago

No ambiente Gnome aparecem dessa forma:

Notificação flutuante: image

Bandeja do sistema: image

Ao clicar, independente de aonde esteja, é redirecionado para o aplicativo. O Plasma possui o mesmo comportamento.

eduardomozart commented 2 years ago

Legal! Obrigado pelos prints, Rafa! Vou tentar futricar no código-fonte do ZapZap e comparar com o código-fonte das notificações de aplicativos que exibem o ícone normalmente no DDE e tentar fazer funcionar por aqui (talvez seja uma limitação do formato, tamanho ou cores da imagem) e confirmando a limitação ou se não conseguir fazer aparecer, vou abrir um Bug Report na Distro. De qualquer forma, como funciona em outras Distros, creio eu que não seja um bug no ZapZap em si e sim uma limitação do DDE. Obrigado pelo retorno!

eduardomozart commented 2 years ago

E aí Rafa, vim atualizar essa Issue com um HowTo de como fazer o Debian 10 rodar o ZapZap via Flatpak XD Acredito que o erro na execução do ZapZap no Debian esteja ocorrendo devido a sandbox que o Debian 10 cria usando o setuid/bubblewrap. Como os próprios desenvolvedores do Debian comentaram (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=977841), outras distros não impõe o mesmo nível de segurança/restrições de sandbox que o Debian e provavelmente na versão do Debian 11 a Bubblewrap vai ser mitigada, assim como ocorre em outras distros, como Ubuntu e Fedora/RHEL.

Antes de atualizar o Flatpak, talvez a atualização do Flatpak para a versão Backports não seja necessária, talvez basta apenas desativar o Bubblewrap (https://github.com/flathub/org.chromium.Chromium/issues/31):

sudo echo 'kernel.unprivileged_userns_clone=1' >> /usr/lib/sysctl.d/50-bubblewrap.conf
sudo sysctl -p 
sudo bash -c 'chmod -s $(which bwrap)'
sudo bash -c 'dpkg-statoverride --add --update root root 0755 $(which bwrap)'

Reinicie o sistema e tente executar o ZapZap novamente. Caso o erro persista, instale a versão do Flatpak disponível no Buster-Backports.

sudo echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list.d/debian-buster-backports.list
sudo apt-get update && sudo apt install -y flatpak/buster-backports

Eu suspeito que o problema estivesse relacionado a sandbox do Debian porque ao executar o ZapZap sem desabilitar o setuid/bubblewrap antes a seguinte mensagem de erro era exibida ao executar o ZapZap via Terminal:

$ flatpak -v run com.rtosta.zapzap
<<<Ommited output>>>
[3:11:0803/200328.287225:FATAL:flatpak_sandbox.cc(290)] Your Flatpak installation is setuid, which is not supported

Após desabilitar o setuid/bubblewrap, o ZapZap iniciou normalmente.

Havia aberto com você a Issue https://github.com/rafatosta/zapzap/issues/84 referente as notificações, então decidi instalar o dbus-python através do Pip. Não recebi nenhuma mensagem para testar se após a instalação/atualização da interface DBus o problema da Issue https://github.com/rafatosta/zapzap/issues/84 foi corrigido, mas de qualquer forma, como o dbus-python é uma dependência do ZapZap, vou mantê-la instalada.

Para instalar o dbus-python 1.2.18 no Debian 10 (https://stackoverflow.com/questions/61285415/no-package-dbus-1-found):

sudo apt install build-essential libdbus-glib-1-dev libgirepository1.0-dev
sudo apt install build-essential libpython3-dev libdbus-1-dev
python3 -m pip install dbus-python

Porém, no meu caso, talvez devido a versão do Flatpak ser a Backports, o ícone do ZapZap não é exibido na Dock. Os Devs do Telegram (https://github.com/telegramdesktop/tdesktop/issues/24046#issuecomment-1034147197) acreditam que isso esteja ocorrendo devido ao Qt criar o arquivo de ícone em /run/user/1000 e o Flatpak não compartilhar esse diretório com o host. Talvez esse problema esteja relacionado a Issue https://github.com/rafatosta/zapzap/issues/84, já que se as imagens dos contatos também são salvas nesse diretório, pode explicar o porquê do Deepin falhar ao carregá-las e fazer fallback para o ícone padrão do sistema ao invés de exibir a imagem dos contatos nas notificações.

De qualquer forma, por estar usando o Flatpak na versão Backports, sei que dificilmente vou obter qualquer suporte da distro do Deepin. Também acredito que nas próximas versões do Deepin (principalmente a versão 23, que será baseado no Debian 11), caso esses problemas estejam relacionados a sandbox e/ou versão desatualizada/incompatível do Flatpak, deverão ser corrigidos automaticamente e sequer vou precisar usar a versão Backports do Flatpak.

Mas como uma solução de contorno para deixar o ícone bonitinho na Dock até sair a versão estável do Deepin 20.7 ou Deepin 23, já que não encontrei uma solução definitiva para o problema na Internet, apenas outros usuários que encontraram problemas similares com o Flatpak/Snap em diferentes distros, encontrei uma solução de contorno no AskUbuntu, que é modificar o ícone genérico no Dock pelo ícone do ZapZap através do xseticon.

A primeira coisa que você precisa fazer é compilar o xseticon, já que não há arquivos binários para versões recentes do Debian. Também é possível executar ele através do Snap, mas você precisará instalar o pacote selinux-utils e desabilitar o SELINUX (https://github.com/PowerShell/PowerShell/issues/9252#issuecomment-486954264) para o xseticon funcionar. Então é mais rápido e seguro compilar o xseticon à partir do código-fonte. As instruções de compilação e instalação estão disponíveis em https://github.com/xeyownt/xseticon

Infelizmente, o xseticon suporta apenas ícones em formato PNG. Como o ZapZap utiliza um ícone SVG escalável, precisamos convertê-lo para PNG para usá-lo em conjunto com o xseticon. Para isso, certifique-se de possuir o pacote librsvg2-bin instalado no seu sistema (https://stackoverflow.com/a/32573821) e execute o seguinte comando no Terminal para converter o ícone do ZapZap para todos os tamanhos de ícones PNG padrões do Flatpak:

for i in 16 24 32 64 128 256 512; do

  rsvg-convert -w $i -h $i $HOME/.local/share/flatpak/exports/share/icons/hicolor/scalable/apps/com.rtosta.zapzap.svg \

      -o $HOME/.local/share/flatpak/exports/share/icons/hicolor/${i}x${i}/apps/com.rtosta.zapzap.png

done

Agora, basta abrir o ZapZap e executar o seguinte comando para executar o xseticon e realizar a substituição do ícone (substitua /home/Eduardo pelo seu caminho $HOME):

xseticon -name ZapZap /home/Eduardo/.local/share/flatpak/exports/share/icons/hicolor/512x512/apps/com.rtosta.zapzap.png

Como não temos como prever quando o usuário irá abrir o ZapZap sem modificar o arquivo .desktop que acompanha o ZapZap (e possivelmente ter que alterá-lo toda vez que você lançar uma nova atualização do programa), decidi adicionar o xseticon como um script de inicialização que executa o programa a cada 2 segundos. Caso o ZapZap seja aberto, o xseticon irá substituir automaticamente o ícone padrão do sistema pelo ícone do ZapZap.

Crie o seguinte arquivo em $HOME/.config/autostart/xseticon-com.rtosta.zapzap.desktop. Note que você deverá substituir "/home/Eduardo" pelo seu diretório $HOME. Não é permitido usar variáveis em arquivos .desktop, portanto, você precisará especificar explicitamente o caminho do diretório $HOME.

[Desktop Entry]
Name=xseticon-com.rtosta.zapzap.desktop
Type=Application
Exec=bash -c 'while : ; do xseticon -name ZapZap /home/Eduardo/.local/share/flatpak/exports/share/icons/hicolor/512x512/apps/com.rtosta.zapzap.png ; sleep 2.0 ; done"
NoDisplay=true
Terminal=false
rafatosta commented 2 years ago

Obrigado pela devolutiva. Me alertou que quando não há suporte ou a imagem fosse desativada nas configurações o ícone do app não seria exibido. Mandei a correção em Fix default image in notifications