Como fazer um snap de código Python e Gtk3 funcionar no Ubuntu no Wayland

Se programarem em Python, certamente mais tarde ou mais cedo vão querer que o vosso programa seja distribuido, não apenas para os amigos, mas para toda a gente. Uma das formas mais simples de o distribuir é torna-lo num snap. Os snaps são uma tecnologia de contentores que isola num único ficheiro o nosso programa e tudo o que é necessário para o correr em qualquer distribuição Linux que suporte snaps. Podem obter mais informação sobre como fazer snaps (e outras coisas) nestes tutoriais do Ubuntu.

Se quiserem dar janelas e botões ao vosso programa Python vão ter que optar por uma GUI, ou interface gráfico de utilizador. O Python por defeito usa o tkinter que é uma biblioteca gráfica interessante e simples de usar, mas se querem ter o aspecto das janelas do Gnome na vossa aplicação, a opção natural é o Gtk, e na sua versão moderna, o Gtk3.

Embora seja relativamente simples fazer um snap para uma aplicação Python, pois existe um plugin python que ajuda, já o Gtk3 exige que, pelo menos, se incluam nas dependências do snap alguns pacotes e um desktop helper, o desktop-gtk3:


...
parts:
yourapp:
source: .
source-type: git
# See 'snapcraft plugins'
plugin: python
stage-packages:
- python3-gi
- libcanberra-gtk3-module
- gir1.2-gtk-3.0
after: [desktop-gtk3]

Acabado o código do snap, que no código acima não está completo, corremos o snapcraft e após o processo de building, somos presenteados com um snap. Se o experimentarmos no Ubuntu 16.04 ele corre sem problemas, e até no Ubuntu 17.10 em Xorg. Mas o Ubuntu 17.10 vem com o Wayland por defeito, e qual não é o nosso espanto quando depois de instalarmos o snap percebemos que ele não corre no Wayland. Ou melhor, pode até correr uma parte que foi o que me aconteceu a mim, e depois crasha com uma falha de segmentação.

Mas mais, podem, antes disso, durante a construção do snap ter um outro problema: version `GLIBC_2.25' not found e se o tiverem ficam já a saber que têm de criar o snap no Ubuntu 16.04 por uma questão de retro-compatibilidade na compilação dos ficheiro binários.

Mas usar o Ubuntu 16.04 não vai ser suficiente para resolver a segfault. Depois de muitas horas de frustração e diálogo com outros fabricadores de snaps (Daniel Llewellyn e Ken VanDine) no forum snapcraft, foi-me dada a explicação de que a versão do wayland dos pacotes para Ubuntu 16.04 entra em conflito com versões mais recentes, que é o que temos, na 17.10, e daí a falha de segmentação.

A única solução (provavelmente temporária) para esta situação é recorrer à construção manual de um snap dentro de um contentor LXD ou de uma máquina virtual adicionando primeiro ao contentor a PPA do Gnome 3.26.

Ou seja, ao correr o contentor, fazer:

add-apt-repository -y ppa:ubuntu-desktop/gnome-3-26
apt-get update && apt-get upgrade -y

e em seguida podem mudar do utilizador root no contentor para o utilizador sem previlégios com su ubuntu, e fazer clone ao repositório dentro do contentor. Finalmente para termos o snap é necessário correr o snapcraft no contentor.

E pronto,  vamos ter de fazer o upload do snap para a loja manualmente em vez de usar o snapcraft.io , mas pelo menos temos um snap de Python e Gtk3 que funciona no wayland no Ubuntu 17.10.

Anúncios

Instalar o dicionário português no emacs

Para instalar o dicionário português no emacs siga os seguintes passos:

  1. sudo apt install aspell-pt
  2. abrir o emacs
  3. M-x custumize-group
  4. escolher ispell
  5. clicar no triângulo de “Ispell Dictionary”
  6. clicar em “Value Menu” e escolher “String”
  7. no campo “String” escrever “portugues”
  8. clicar em “State” e escolher “Save for future sessions”

Ubuntu 16.04 como instalar pacotes externos .deb

No momento em que escrevo há um bug na instalação de pacotes externos .deb através do ‘Ubuntu Software’.  Por exemplo o Atom tem um pacote .deb que fica em suspensão quando o tentamos instalar no Ubuntu 16.04.

A solução é simples, basta instalar o Instalador de Pacotes GDebi, que está no ‘Ubuntu Software’ e com clique direito com o rato, abrir o pacote com o GDebi.

Solved!

Nota: esta solução é provisória visto que está previsto para breve uma correcção para o ‘Ubuntu Software’ que vai resolver o problema.

A Internet das Coisas (IoT) e a Internet nas Coisas

Este artigo podia chamar-se “como construir um router com um Raspberry Pi”, ou podia chamar-se “como ligar o seu prédio inteiro à internet usando autocolantes”, mas se o primeiro caso é relativamente simples, o segundo já sendo uma possibilidade ainda não é uma realidade.

Já todos sabemos que a Internet of Things, ou seja a internet das coisas, é o futuro. Só falta saber que futuro queremos para ela.

Construir um router com um Raspberry Pi, significa na prática transformar um computador de baixo custo num router. Isto permite-nos ter software livre a correr nesse router, e melhor ainda, ligar o nosso router Pi a outros routers Pi.

Agora imagine-se uma aplicação simples, que se descarrega da internet, e coloca não o router Pi, mas o meu router normal, a comunicar com todos os routers que a minha rede apanha. Agora imagine-se que eles trocam entre si informação encriptada e que não precisam de ISP. Finalmente imagine-se que todos os candeeiros da rua têm pequenos routers Raspberry Pi alimentados a energia solar no seu interior. Já agora estes candeeiros inteligentes, usam lâmpadas LED e o seu interior é uma bateria.

Podiamos pensar quanto poupava a câmara em energia, ao mesmo tempo que fornecia internet gratuita. Ja está paga pelos nossos impostos.

A IoT foi pensada como um esquema hierárquico entre a cloud e sensores inteligentes no frigorifico ou nos sapatos, que comunicam entre si. Mas pode vir a ser muito mais que isso se em vez de termos apenas uma internet das coisas, controlada hierarquicamente que armazena a informação na cloud, viermos a ter também uma internet nas coisas que transporta mais dados entre elas do que se tinha planeado inicialmente.

Como construir um Raspberry Pi a energia solar

Como instalar o Krita no Ubuntu (melhor que o Photoshop?)

O Krita será melhor que o Photoshop? Em vários aspectos não apenas o substitui como torna simples a criação e manipulação de imagens. A ultima versão possui ferramentas poderosas. Vale a pena instalar e experimentar.

Quem usa o KDE já conhece por certo o Krita, mas a quem usa a versão “normal” do Ubuntu esta excelente aplicação pode ter passado ao lado. Mas não é necessário ter o KDE para ter o Krita.

Para instalar o Krita abrimos um terminal (CTRL + T) e começamos por adicionar a PPA do Krita seguida de um apt-get update e da instalação de vários pacotes:

sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt-get update
sudo apt-get install krita
sudo apt-get install kritasketch (necessário para ter o pincel sketch)
sudo apt-get install karbon (necessário para algumas ferramentas vectoriais)
sudo apt-get install oxygen-icon-theme (necessário para termos os ícones correctos)
sudo apt-get install kdelibs-bin (necessário para correr o kbuildsycoca4)
kbuildsycoca4

Após esta instalação o Krita fica disponível na dash e deve funcionar correctamente no ubuntu, ao contrário do que acontece se apenas seguirmos as instruções patentes no site do Krita (especialmente os ícones das ferramentas).

Dicas:

  • Para fazer drop shadow num texto, seleccionamos a ferramenta de texto, seleccionamos a área do texto que queremos usar (o tamanho da selecção é proporcional ao tamanho do texto) e escrevemos. Nas opções da ferramenta (que podem estar escondidas abaixo) temos a opção shadow.
  • Existem vários tipos de camadas no Krita. As duas mais obvias são a Paint Layer e a Vector Layer. As ferramentas de desenho funcionam em modo vectorial nesta ultima.
  • Ao seleccionar uma área e aplicar um filtro temos primeiro de seleccionar uma camada paint.

Remover a caixa de pesquisa no Firefox

O Firefox tem duas caixas, uma para escrever endereços e uma para pesquisar, mas na prática só precisamos da primeira porque esta também faz pesquisa.

Como tirar a caixa de pesquisa?

Clicar do lado direito em cima de um espaço vazio na barra de ferramentas, escolher personalizar.

Arrastar a caixa de pesquisa para fora  da barra de ferramentas.
Clicar em sair da personalização e já está.

Na minha opinião fica muito mais prático só com uma caixa.