Historicamente, havia diferentes abordagens para o problema de "notificações". Não há sequer consenso sobre o que é "notificação". Usamos para informar ao usuário que algo aconteceu? Esperamos alguma ação dele? Em caso afirmativo, como a entrada é coletada? Essa ação pode ser adiada ou o usuário deve agir imediatamente? Quanto tempo isso poderia demorar? Como o usuário deve revisar todas as ações pendentes? As respostas a todas essas perguntas moldam soluções propostas por diferentes equipes.
O resultado é que não há uma resposta única e definitiva para sua pergunta. Mas há diferentes abordagens que você pode tentar e escolher uma que seja adequada ao seu caso de uso específico.
notificar-enviar
Em um ponto, um padrão para notificações no Linux surgiu. A força motriz por trás disso, se a memória me serve bem, foi a equipe do GNOME 3. Eles procuraram uma maneira unificada para todos os aplicativos notificarem o usuário e descobriram que algum componente do ambiente de área de trabalho deveria ser responsável por manipular (enfileirar, exibir, coletar entrada) todas as notificações. Os aplicativos simplesmente enviam sua notificação para esse componente e esperam que o usuário o receba.
Você pode criar esse tipo de notificação com o aplicativo de linha de comando notify-send
. Observe que proposital não permite personalização. Você só passa sua mensagem e deixa o resto para o ambiente de trabalho. Este tipo de notificações é suportado pelo Unity (Ubuntu), GNOME 3 e KDE SC / Plasma.
osd_cat
osd_cat
é o aplicativo que exibe o conteúdo do arquivo na camada do servidor X. Ao usar a opção -d
, você pode fazer com que ela desapareça automaticamente depois de algum tempo, o que a torna um pouco adequada como aplicativo de notificação.
A fonte padrão será feia, mas você pode melhorar usando a opção -f
. O argumento -f
deve ser criado por xfontsel
.
Uma notificação de exemplo pode ser criada desta maneira:
echo -e "sample\nnotification" |osd_cat -p middle -A center -d 1 -f '-*-helvetica-*-r-*-*-34-*-*-*-*-*-*-*' -O 1 -c '#fff'
Ao contrário de notify-send
, você pode colocar sua notificação em qualquer lugar da tela e personalizá-la um pouco (selecionar fonte e cor; não há cor de fundo). A principal desvantagem é que é específico do X, por isso não funcionará sob Mir ou Wayland.
zenity / kdialog
zenity
(para áreas de trabalho GTK - Unity e GNOME) e kdialog
(para áreas de trabalho Qt - KDE e LxQt) permitem que o usuário crie janelas de diálogo simples a partir da linha de comando. Você pode colocar texto dentro, mas também alguns ícones predefinidos, botões, formulários de entrada, listas, seletores de arquivos ou barras de progresso. Com um pouco de trabalho do seu lado, você poderia usá-los como uma maneira de notificar o usuário.
zenity
suporta --width=
e --height=
opções de linha de comando, mas não fornece nenhuma maneira de alterar o posicionamento da janela. Pessoalmente, estou usando --title=
para dar à janela algumas regras personalizadas de título e gerenciador de janelas. O gerenciador de janelas (no meu caso, o KWin) seleciona todas as janelas que correspondem a determinados critérios, como título contendo cadeia, e modifica suas propriedades. Para notificações, coloco essas janelas no canto inferior direito da tela, removo a barra de título da janela, faço com que apareçam em todos os desktops virtuais e removê-los da barra de tarefas.
Solução personalizada
Se nenhum dos programas acima atender às suas necessidades, você sempre poderá escrever sua solução personalizada. O python fornece ligações ao GTK e ao Qt e permite que você crie GUI personalizada de maneira relativamente indolor. Você terá todas as opções de personalização do mundo, mas isso exigirá algum trabalho inicial para começar.