Comment configurer l'écran de connexion GLPI avec du CSS par entité

Personnalisez l'écran de connexion GLPI avec le CSS par entité natif, sans modifier le cœur ni installer un plugin de thème. Découvrez où se trouvent les vrais champs (enable_custom_css et custom_css_code), comment recolorer via les tokens Tabler de GLPI 11, pourquoi la couleur exige !important et le piège d'héritage qui fait disparaître le thème du login si vous l'appliquez sur la mauvaise entité.

Dans cet article7 sections

Personnaliser l'écran de connexion GLPI est la demande de branding la plus fréquente que nous recevons en maintenance - et presque tout le monde commence mal, en modifiant le cœur ou en installant un plugin de thème. Le chemin propre existe déjà dans GLPI : le CSS par entité, un champ natif qui survit aux mises à jour et permet un retour arrière en quelques secondes. Ce guide montre où sont les vrais champs (enable_custom_css et custom_css_code), pourquoi la couleur ne prend pas sans !important, et le piège d'héritage d'entité qui fait disparaître le thème du login même avec le CSS enregistré.

Pourquoi le CSS par entité (et non un plugin de thème ou le cœur)

Modifier les fichiers du cœur marche pour une version et casse à la mise à jour suivante - le correctif est perdu et vous cherchez ce qui a changé. Un plugin de thème marche, mais il lie l'apparence au cycle de mise à jour et à la compatibilité du plugin (au passage à GLPI 11, les thèmes tiers ont été parmi les premiers à casser). Le CSS par entité est natif, versionnable dans votre propre gestion du changement et réversible en collant le CSS précédent. Pour l'identité visuelle - couleurs, logo, fond du login - il offre plus de contrôle que n'importe quel plugin, car vous atteignez n'importe quel sélecteur de l'interface.

ApprocheSurvit à la mise à jourRetour arrièrePortée
Modifier le cœur (CSS/SCSS)Non (le correctif est perdu)Manuel et risquéGlobal
Plugin de thèmeDépend du pluginDésinstaller le pluginGlobal
CSS par entité (natif)OuiColler le CSS précédent et enregistrerPar entité, avec héritage

Où le configurer dans GLPI

Ouvrez le formulaire de l'entité dans Administration > Entités > [votre entité] et repérez la section de personnalisation de l'interface. Deux champs comptent :

  • Enable CSS customization (enable_custom_css) - une liste déroulante avec héritage (héritez du parent, ou forcez activé/désactivé sur l'entité courante).
  • CSS personnalisé (custom_css_code) - l'éditeur où le CSS est collé.

Le premier piège est ici : tant que enable_custom_css n'est pas actif, l'éditeur apparaît bloqué avec la mention "Custom CSS is disabled" et rien n'est appliqué - vous collez le CSS, enregistrez, rechargez et « ça ne marche pas ». Activez d'abord la liste déroulante. Enregistrez et rechargez la page de login pour valider.

CSS prêt à l'emploi : recolorer le login par la marque

Le front-end de GLPI 11 utilise Tabler (sur Bootstrap 5), donc la façon propre de recolorer est de surcharger les design tokens --tblr-* plutôt que de chasser sélecteur par sélecteur. L'exemple ci-dessous applique une palette de marque (rouge et or), gère le fond et couvre les différentes classes de body que l'écran de login utilise entre GLPI 10 et 11 :

/* Login par marque - a coller dans custom_css_code de l'entite.
   GLPI 11 utilise Tabler : surchargez les tokens --tblr-* pour la couleur primaire. */
:root {
  --brand-500: #b11123;
  --brand-700: #7f0e18;
  --brand-gold: #d4a017;
  --tblr-primary: var(--brand-500);
  --tblr-primary-rgb: 177, 17, 35;
}

/* L'ecran de login change de classe de body entre versions - couvrez les deux. */
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; /* hebergez en local, evitez une URL externe */
  background-size: cover !important;
  background-position: center !important;
  background-attachment: fixed !important;
}

/* Les couleurs de GLPI gagnent par specificite : il faut !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;
}

/* Le pied du login est .copyright (pas un id/classe evident). */
body[class*="login"] .copyright { color: #fff6da !important; }

/* fixed pese sur mobile : passez a scroll sur le telephone. */
@media (max-width: 767.98px) {
  body[class*="login"] { background-attachment: scroll !important; }
}

Le piège de l'héritage : pourquoi le login n'a pas de thème

Voici le détail qui n'apparaît qu'à l'exploitation : l'écran de login s'exécute avant toute authentification, il n'y a donc aucune entité active à ce moment. GLPI résout l'apparence pré-login à partir de l'entité racine (id 0). Si vous avez appliqué le CSS sur une entité fille - celle du client, par exemple - le tableau de bord interne prend bien la marque, mais la page de login reste par défaut, car elle n'« entre » jamais dans cette entité. La règle pratique que nous adoptons : le thème de login va sur l'entité racine ; la personnalisation par client qui ne doit apparaître qu'après le login peut vivre sur l'entité fille, héritée vers le bas. Comme le champ a de l'héritage, ce que vous mettez sur la racine descend vers toutes les filles, sauf si l'une la surcharge.

Checklist de production

  1. Versionnez le CSS précédent avant tout changement (sauvegardez le texte du champ).
  2. Appliquez le thème de login sur l'entité racine ; la personnalisation post-login peut aller sur l'entité fille.
  3. Activez enable_custom_css avant de coller - sinon l'éditeur reste bloqué.
  4. Hébergez l'image de fond localement (un Document dans GLPI ou un fichier servi par l'hôte lui-même) ; une URL externe casse via CSP, mixed-content ou indisponibilité.
  5. Testez avec un profil technicien et un profil demandeur, sur ordinateur et mobile.
  6. Vérifiez le contraste du formulaire et du bouton (accessibilité) ; gardez le retour arrière prêt.

Pièges de terrain

Trois choses nous ont coûté du temps chez des clients et sont devenues une FAQ interne. Première : la couleur sans !important ne prend pas - la feuille de style Tabler charge avec une forte spécificité, et votre surcharge doit gagner. Deuxième : une image de fond par URL externe est fragile ; dans un environnement avec une Content-Security-Policy stricte ou sans sortie internet, le fond ne se charge tout simplement pas et le login devient noir - hébergez le fichier sur le serveur lui-même. Troisième : ne confondez pas la personnalisation par entité avec le CSS global de GLPI (Configuration > Général) ; les deux existent, et les mélanger devient un casse-tête de priorité. Documentez quelle couche porte quelle règle.

Étape suivante

La normalisation de marque dans GLPI est une routine dans notre exploitation - du login au thème interne, avec un retour arrière contrôlé. Si vous voulez que le parc de votre client porte la bonne identité sans toucher au cœur, parlez à l'équipe.


Révisé par l'équipe NexTool Solutions.

Questions fréquentes

GLPI dispose d'un champ natif de CSS par entité. Dans Administration > Entités > [entité], activez « Enable CSS customization » (enable_custom_css) et collez le CSS dans l'éditeur custom_css_code. Pas besoin de modifier le cœur ni d'installer un plugin de thème. Pour le login, appliquez le CSS sur l'entité racine, car l'écran de login s'exécute avant qu'il n'y ait une entité active.

Non. Le CSS par entité est natif à GLPI 10 et 11. Il est plus robuste qu'un plugin de thème car il survit aux mises à jour, permet un retour arrière en collant le CSS précédent et atteint n'importe quel sélecteur de l'interface, sans dépendre du cycle de mise à jour d'un plugin tiers.

Trois causes fréquentes : enable_custom_css n'a pas été activé (l'éditeur reste bloqué avec « Custom CSS is disabled ») ; le CSS a été appliqué sur une entité fille, mais le login s'exécute sans entité active et utilise l'entité racine ; ou les règles de couleur n'ont pas !important et perdent face à la feuille Tabler. Activez la liste déroulante, utilisez l'entité racine et ajoutez !important.

Oui. Les champs enable_custom_css et custom_css_code existent dans GLPI 10 et 11. Dans GLPI 11 le front-end utilise Tabler sur Bootstrap 5, donc la façon propre de recolorer est de surcharger les tokens --tblr-* (comme --tblr-primary) plutôt que de chasser les sélecteurs un par un.

Oui, via background-image dans le CSS de l'entité. Mais hébergez l'image localement (un Document dans GLPI ou un fichier sur l'hôte lui-même) ; une URL externe est fragile et peut être bloquée par Content-Security-Policy, mixed-content ou l'absence de sortie internet, laissant le login sans fond.

Oui. Le champ enable_custom_css a de l'héritage : ce que vous définissez sur l'entité racine descend vers toutes les filles, sauf si l'une la surcharge. C'est pourquoi le thème de login va sur la racine (pour valoir avant le login) et la personnalisation par client peut vivre sur l'entité fille, appliquée après l'authentification.

Besoin d'aide ?