Integração de desktop

Requisitos & convenções cobre os aspectos essenciais da integração de desktop Linux. Esta página fornece mais informações sobre os recursos opcionais de integração de desktop. Ele também fornece orientação sobre como os aplicativos podem garantir que suas interfaces com o usuário se ajustem a toda a gama de desktops e distribuições Linux.

Essas informações são destinadas principalmente a desenvolvedores que são novos no Linux. No entanto, também é relevante para aplicativos Linux específicos de desktop que desejam atingir uma gama mais ampla de ambientes Linux.

Embora visar o ecossistema de desktop Linux possa parecer desafiador, a existência de padrões comuns, combinada com essas diretrizes, significa que não é difícil oferecer suporte a toda a gama de ambientes Linux.

Detecção de localidade

Os kits de ferramentas de aplicativos, como Electron, GTK e Qt, fornecem suporte interno para a detecção de qual localidade usar. Caso contrário, a função setlocale pode ser usada.

Portais

Portais são o framework para acessar com segurança os recursos de fora de um sandbox de aplicativos. Eles fornecem uma variedade de recursos comuns para aplicativos, incluindo:

  • Determinar status de rede

  • Abrir um arquivo com um seletor de arquivos

  • Abrir URIs

  • Evitar que o dispositivo suspenda/hiberne/desligue

  • Imprimir

  • Enviar e-mail

  • Mostrar notificações

  • Obter capturas de tela e fazer gravação de tela

Kits de ferramentas como GTK e Qt fornecem suporte transparente para portais.

If you are not using one of these toolkits, it is possible to access the portals API directly. See the Portals API documentation for more information.

Notificações

Vários kits de ferramentas e frameworks fornecem suporte transparente a notificações de desktop Linux. Isso inclui Electron, GTK, KDE e QML.

Ícones de status

Status icons are the same concept as the system tray or the taskbar on Windows, or menu bar icons on Mac. These are supported on most Linux distributions, through abstractions such as libappindicator.

Várias distribuições Linux não mostram ícones de status. Ainda é possível fornecer um ícone de status, que será mostrado em algumas distribuições. No entanto, para garantir a compatibilidade, é recomendável usar apenas ícones de status de maneira suplementar e não confiar neles como o único mecanismo para fornecer informações de status ou acessar recursos específicos. Isso inclui a funcionalidade “minimizar para a área de notificação” (ou equivalente).

XEmbed style icons will function on desktops that support them with the x11 permission.

StatusNotifier

StatusNotifier style icons will not function without extra permissions as it requires talking to a non-hardenend host service. Risks include impersonation of other software and exploitation of bugs in the host service such as image decoders.

At the very minimum to use StatusNotifier you must have the --talk-name=org.kde.StatusNotifierWatcher permission to register an item.

Depending on the exact implementation of StatusNotifier that your application is using it may need session bus ownership of org.kde.StatusNotifierItem-$PID-$ITEM_ID.

This permission is problematic in Flatpak as the $PID value is often the same in sandboxes and the item will possibly conflict with other applications. However if needed the --own-name=org.kde.* permission will allow this. This opens many new risks including the ability to impersonate any KDE service or application possibly capturing important user data.

Most implementations of StatusNotifer have dropped this requirement but known exceptions to this are Electron versions older than 23.3.0.

Current versions of Electron, Chromium, KNotifications, and libappindicator are known to work without ownership permissions.

Controles de janela

Controles de janela são os botões usados para fechar, maximizar e minimizar janelas. Eles variam entre os desktops Linux, principalmente em termos de quais controles são mostrados. Se os aplicativos tentam seguir essas variações fica a seu critério. Fornecer exatamente os mesmos controles usados por um ambiente de área de trabalho específico não deve ser visto como um requisito rígido.

Da perspectiva da experiência do usuário, é importante garantir que os controles de janela apareçam no mesmo lado da janela que outras áreas de trabalho. No Linux, este é o lado direito da janela (como o Windows).

No X11, os aplicativos podem contar com barras de título fornecidas pelo sistema se não quiserem desenhar seus próprios controles de janela. Para uma experiência consistente com Wayland, os aplicativos devem sempre fornecer os seus próprios. Normalmente, os kits de ferramentas lidam com isso, mas os clientes mais simples de wayland podem usar libdecor para uma solução geral.

Decorações de janela

Se seu aplicativo usar um estilo visual escuro, bem como decorações de janela fornecidas pelo sistema, a propriedade de janela X11 GTK_THEME_VARIANT=dark deve ser usada para garantir que as decorações de janelas correspondam ao restante da janela do aplicativo. Isso pode ser feito executando:

xprop -f _GTK_THEME_VARIANT 8u -set _GTK_THEME_VARIANT dark

Temas

Os aplicativos Flatpak não podem usar diretamente o tema do sistema. Isso acontece porque os flatpaks não têm a capacidade de usar arquivos de dados ou bibliotecas em /usr (onde os temas do sistema estão normalmente localizados). A solução para isso foi empacotar temas como Flatpaks, pois confiar no host para ter a versão correta para cada flatpak anula os benefícios de portabilidade que ele oferece. Esses temas são fornecidos como extensões, para o runtime do Freedesktop quando o ponto de extensão é Gtk e para o runtime do KDE quando o ponto de extensão é Qt.

O sistema de temas requer Flatpak 0.8.4+ e aplicativos usando org.gnome.Platform 3.24+ ou org.freedesktop.Platform 1.6+ ou org.kde.Platform 5,9+ atualizados.

Instalando temas

Instruções para Gtk

Os temas Gtk atuais são empacotados no repositório flathub que você pode adicionar (se ainda não estiver adicionado) executando:

$ flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo

Para ver uma lista de temas atualmente empacotados você pode usar o comando flatpak search gtk3theme (disponível desde a versão 0.10.1 do Flatpak). Caso você use uma versão mais antiga do Flatpak, você pode usar o comando flatpak remote-ls flathub | grep org.gtk.Gtk3theme. A diferença na saída entre esses dois comandos é que o primeiro imprime o ID do aplicativo, o controle remoto de onde vem o tema e a descrição do tema, enquanto o segundo imprime apenas o nome completo do pacote flatpak do tema.

Você pode instalar temas com o comando flatpak install flathub org.gtk.Gtk3theme.Foo, substituindo Foo pelo nome do tema desejado.

Instruções para Qt

Para que o tema Qt funcione, os pacotes flatpak kstyle e platformtheme devem ser instalados. Eles estão empacotados no repositório kdeapps que você pode adicionar executando:

$ flatpak remote-add kdeapps https://distribute.kde.org/kdeapps.flatpakrepo

Depois os dois pacotes podem ser instalados com os seguintes comandos:

$ flatpak install kdeapps org.kde.KStyle.Adwaita//5.9
$ flatpak install kdeapps org.kde.PlatformTheme.QGnomePlatform//5.9

Aplicando temas

Não existe uma maneira ideal de especificar o tema que os aplicativos Flatpak usam. Os aplicativos tentarão corresponder ao tema do sistema que está sendo usado no momento, se corresponder a algum dos temas Flatpak instalados, e retornarão ao Adwaita (se usarem Gtk2 ou Gtk3) ou ao tema padrão Qt (se usarem Qt) se um tema correspondente não é detectado.

A partir do Flatpak 0.10.1, o sistema Flatpak pode detectar se os temas do sistema disponíveis correspondem a quaisquer temas Flatpak disponíveis nos repositórios e, se sim, instalará automaticamente os temas encontrados no momento da atualização com base no gtk-theme Chave Dconf. Essa chave, no entanto, pode conter apenas um valor, o do tema usado no momento, o que significa que as versões Flatpak dos temas correspondentes que não estão sendo usados no momento não são instaladas até que esses temas sejam habilitados. Se nenhum dos temas de sistema correspondentes estiver sendo usado no momento, os aplicativos retornarão ao Adwaita ou ao tema padrão do Qt.

No X11, o Gtk3 pega os temas via XSettings. Especificamente, o daemon gsd-xsettings do GNOME XSettings lê os valores DConf e os converte nos valores XSettings. Para que isso funcione, você precisa de um daemon xsettings que esteja configurado corretamente. Gtk3 em Wayland pega temas diretamente via Dconf. Para que isso funcione, você pode usar o KDE (com kde-gtk-config > 5.11.95), GNOME, que funciona imediatamente, ou configurar manualmente as chaves dconf em /org/gnome/desktop/interface/. Para que a opção DConf funcione no Wayland o aplicativo também deve estar configurado para ter acesso ao DConf.

Outras notas sobre temas

Em relação aos temas de ícones, desde o Flatpak 0.8.8 os ícones do host são expostos ao convidado, de modo que geralmente não há necessidade da presença de temas de ícones do Flatpak.

Se você usar a opção Tema escuro global (removida no GNOME-Tweaks 3.28) em gnome-tweak-tool ela não funcionará porque simplesmente grava em settings.ini que não está disponível em a caixa de areia. Use versões escuras de temas, se existirem.