Como configurar o ecrã de login do GLPI com CSS por entidade

Personalize o ecrã de login do GLPI com o CSS por entidade nativo, sem editar o core nem instalar um plugin de tema. Veja onde estão os campos reais (enable_custom_css e custom_css_code), como recolorir pelos tokens Tabler do GLPI 11, porque a cor exige !important e a armadilha da herança que faz o tema do login desaparecer se o aplicar na entidade errada.

Neste artigo7 secções

Personalizar o ecrã de login do GLPI é o pedido de branding mais frequente que recebemos na sustentação - e quase toda a gente começa mal, a editar o core ou a instalar um plugin de tema. O caminho limpo já existe no GLPI: CSS por entidade, um campo nativo que sobrevive a atualizações e permite reverter em segundos. Este guia mostra onde estão os campos reais (enable_custom_css e custom_css_code), porque a cor não pega sem !important, e a armadilha da herança de entidade que faz o tema do login desaparecer mesmo com o CSS gravado.

Porquê CSS por entidade (e não plugin de tema ou core)

Editar ficheiros do core resolve por uma versão e parte na atualização seguinte - o patch perde-se e fica a caçar o que mudou. Um plugin de tema resolve, mas prende o aspeto ao ciclo de atualização e à compatibilidade do plugin (na passagem para o GLPI 11, os temas de terceiros foram dos primeiros a partir). O CSS por entidade é nativo, versionável no seu próprio controlo de alterações e reversível colando o CSS anterior. Para a identidade visual - cores, logótipo, fundo do login - dá mais controlo do que qualquer plugin, porque alcança qualquer seletor da interface.

AbordagemSobrevive à atualizaçãoReversãoÂmbito
Editar o core (CSS/SCSS)Não (o patch perde-se)Manual e arriscadaGlobal
Plugin de temaDepende do pluginDesinstalar o pluginGlobal
CSS por entidade (nativo)SimColar o CSS anterior e gravarPor entidade, com herança

Onde configurar no GLPI

Abra o formulário da entidade em Administração > Entidades > [a sua entidade] e localize a secção de personalização de interface. Dois campos importam:

  • Enable CSS customization (enable_custom_css) - uma lista pendente com herança (herda do pai, ou força ativado/desativado na entidade atual).
  • CSS personalizado (custom_css_code) - o editor onde o CSS é colado.

A primeira cilada mora aqui: enquanto enable_custom_css não estiver ativo, o editor aparece bloqueado com o aviso "Custom CSS is disabled" e nada é aplicado - cola o CSS, grava, recarrega e "não funciona". Ative a lista pendente primeiro. Grave e recarregue a página de login para validar.

CSS pronto: recolorir o login pela marca

O front-end do GLPI 11 usa Tabler (sobre Bootstrap 5), portanto a forma limpa de recolorir é sobrescrever os design tokens --tblr-* em vez de caçar seletor a seletor. O exemplo abaixo aplica uma paleta de marca (vermelho e dourado), trata o fundo e cobre as várias classes de body que o ecrã de login usa entre o GLPI 10 e o 11:

/* Login por marca - colar em custom_css_code da entidade.
   GLPI 11 usa Tabler: sobrescreva os tokens --tblr-* para a cor primaria. */
:root {
  --brand-500: #b11123;
  --brand-700: #7f0e18;
  --brand-gold: #d4a017;
  --tblr-primary: var(--brand-500);
  --tblr-primary-rgb: 177, 17, 35;
}

/* O ecra de login muda de classe de body entre versoes - cubra as duas. */
body.page-login,
body.welcome-anonymous,
body[class*="login"] {
  min-height: 100vh;
  background-color: #140104 !important;
  background-image:
    linear-gradient(145deg, rgba(16,0,0,.74) 2%, rgba(127,14,24,.56) 60%, rgba(212,160,23,.34) 100%),
    url("/front/logos/login-bg.jpg") !important; /* aloje local, evite um URL externo */
  background-size: cover !important;
  background-position: center !important;
  background-attachment: fixed !important;
}

/* As cores do GLPI vencem por especificidade: precisa de !important. */
body[class*="login"] .btn-primary {
  border: 1px solid var(--brand-gold) !important;
  background: linear-gradient(180deg, var(--brand-500), var(--brand-700)) !important;
  color: #fff !important;
}

/* O rodape do login e .copyright (nao um id/classe obvia). */
body[class*="login"] .copyright { color: #fff6da !important; }

/* fixed pesa em mobile: troque por scroll no telemovel. */
@media (max-width: 767.98px) {
  body[class*="login"] { background-attachment: scroll !important; }
}

A armadilha da herança: porque o login fica sem tema

Aqui está o detalhe que só aparece quando se opera: o ecrã de login corre antes de qualquer autenticação, logo não existe entidade ativa nesse momento. O GLPI resolve o aspeto pré-login pela entidade raiz (id 0). Se aplicou o CSS numa entidade filha - a do cliente, por exemplo - o painel interno até fica com a marca, mas a página de login continua padrão, porque nunca "entra" nessa entidade. A regra prática que adotamos: o tema de login vai na entidade raiz; a personalização por cliente que só precisa de aparecer depois do login pode ficar na entidade filha, herdada para baixo. Como o campo tem herança, o que puser na raiz desce para todas as filhas, a menos que uma delas sobreponha.

Checklist de produção

  1. Versione o CSS anterior antes de qualquer alteração (guarde o texto do campo).
  2. Aplique o tema de login na entidade raiz; a personalização pós-login pode ir na entidade filha.
  3. Ative enable_custom_css antes de colar - senão o editor fica bloqueado.
  4. Aloje a imagem de fundo localmente (um Documento no GLPI ou um ficheiro servido pelo próprio host); um URL externo parte por CSP, mixed-content ou indisponibilidade.
  5. Teste com perfil de técnico e de requerente, em desktop e em telemóvel.
  6. Confirme o contraste do formulário e do botão (acessibilidade); tenha a reversão pronta.

Armadilhas de campo

Três coisas custaram-nos tempo em cliente e viraram FAQ interno. Primeira: a cor sem !important não pega - a folha de estilo do Tabler carrega com especificidade alta, e a sua sobreposição precisa de vencer. Segunda: a imagem de fundo por URL externo é frágil; num ambiente com Content-Security-Policy restritiva ou sem saída para a internet, o fundo simplesmente não carrega e o login fica preto - aloje o ficheiro no próprio servidor. Terceira: não confunda a personalização por entidade com o CSS global do GLPI (Configuração > Geral); os dois existem, e misturá-los vira dor de cabeça de precedência. Documente que camada carrega que regra.

Próximo passo

Padronização de marca em GLPI é rotina na nossa operação - do login ao tema interno, com reversão controlada. Se quer o parque do seu cliente com a identidade certa sem tocar no core, fale com a equipa.


Revisto pela equipa NexTool Solutions.

Perguntas Frequentes

O GLPI tem um campo nativo de CSS por entidade. Em Administração > Entidades > [entidade], ative 'Enable CSS customization' (enable_custom_css) e cole o CSS no editor custom_css_code. Não é preciso editar o core nem instalar um plugin de tema. Para o login, aplique o CSS na entidade raiz, porque o ecrã de login corre antes de haver uma entidade ativa.

Não. O CSS por entidade é nativo do GLPI 10 e 11. É mais robusto do que um plugin de tema porque sobrevive a atualizações, permite reverter colando o CSS anterior e alcança qualquer seletor da interface, sem depender do ciclo de atualização de um plugin de terceiros.

Três causas comuns: o enable_custom_css não foi ativado (o editor fica bloqueado com 'Custom CSS is disabled'); o CSS foi aplicado numa entidade filha, mas o login corre sem entidade ativa e usa a entidade raiz; ou as regras de cor estão sem !important e perdem para a folha do Tabler. Ative a lista pendente, use a entidade raiz e acrescente !important.

Sim. Os campos enable_custom_css e custom_css_code existem no GLPI 10 e 11. No GLPI 11 o front-end usa Tabler sobre Bootstrap 5, portanto a forma limpa de recolorir é sobrescrever os tokens --tblr-* (como --tblr-primary) em vez de caçar seletores um a um.

Sim, via background-image no CSS da entidade. Mas aloje a imagem localmente (um Documento no GLPI ou um ficheiro no próprio host); um URL externo é frágil e pode ser bloqueado por Content-Security-Policy, mixed-content ou falta de saída para a internet, deixando o login sem fundo.

Sim. O campo enable_custom_css tem herança: o que definir na entidade raiz desce para todas as filhas, a menos que uma delas sobreponha. Por isso o tema de login vai na raiz (para valer antes do login) e a personalização por cliente pode ficar na entidade filha, aplicada após a autenticação.

Precisa de ajuda?