1 points par GN⁺ 2025-04-29 | 1 commentaires | Partager sur WhatsApp
  • Sous Windows 7 et Windows Server 2008 R2, l’utilisation d’un fond d’écran uni pouvait laisser l’écran Welcome affiché pendant jusqu’à 30 secondes lors de la connexion, à cause d’un signal d’état prêt manquant
  • Le système de connexion ne quittait l’écran Welcome que lorsque la barre des tâches, les composants des services système, la fenêtre du bureau, l’affichage du fond d’écran, etc. avaient tous signalé qu’ils étaient prêts, ou au bout de 30 secondes
  • Le code du fond d’écran n’appelait Report(WallpaperReady) que lorsqu’un fond bitmap était présent, si bien qu’avec un fond uni sans bitmap, la condition d’attente n’était jamais totalement remplie
  • La stratégie de groupe “Hide desktop icons” pouvait provoquer le même problème si l’appel à Report(DesktopIconsReady) se retrouvait lui aussi à l’intérieur d’une condition
  • Le temps réel de connexion n’était pas forcément allongé de 30 secondes : l’écran Welcome restait simplement affiché jusqu’au timeout de 30 secondes, indépendamment d’une préparation qui aurait normalement pu se terminer en 5 ou 25 secondes

Pourquoi l’écran Welcome restait affiché plus longtemps avec un fond uni

  • Une fois l’authentification terminée, Windows configure l’environnement de bureau de l’utilisateur
    • création de la barre des tâches
    • chargement et initialisation de composants chargés de divers services système
    • création de la fenêtre du bureau et affichage des icônes
    • chargement du fond d’écran par la fenêtre du fond du bureau, puis affichage à l’écran
  • Le système de connexion attend que chaque composant signale qu’il est prêt
    • il quitte l’écran Welcome lorsque tous les composants ont signalé qu’ils sont prêts
    • ou lorsque 30 secondes se sont écoulées
  • Le problème du fond uni venait du fait que le signal indiquant que le fond d’écran était prêt se trouvait à l’intérieur du code de chargement du bitmap
    • si un fond bitmap était défini, le système cherchait le fichier, le chargeait en mémoire, l’affichait à l’écran, puis appelait Report(WallpaperReady)
    • s’il n’y avait pas de bitmap, comme avec un fond uni, ce chemin de code n’était pas exécuté, donc aucun signal WallpaperReady n’était envoyé
    • le système de connexion attendait alors un signal qui n’arriverait jamais, jusqu’à atteindre la limite des 30 secondes

Le même oubli de signal d’état prêt s’est reproduit dans la stratégie de groupe

  • La documentation de support associée indiquait que l’activation de la stratégie de groupe “Hide desktop icons” pouvait elle aussi provoquer un délai de 30 secondes
  • Comme la prise en charge des stratégies de groupe est souvent ajoutée après coup sur du code existant, elle se retrouve facilement enveloppée dans une condition du type « exécuter si la stratégie l’autorise »
    • à l’origine, le code d’initialisation des icônes du bureau se liait au dossier du bureau, énumérait les icônes, les ajoutait à l’écran, puis appelait Report(DesktopIconsReady)
    • si l’ajout de la prise en charge de cette stratégie déplaçait tout ce bloc à l’intérieur de la condition de stratégie, alors, lorsque la stratégie de masquage des icônes était activée, le signal d’état prêt n’était plus envoyé lui non plus
  • Ce phénomène ne signifie pas que l’opération de connexion elle-même prenait 30 secondes de plus
    • selon les performances du système, tous les signaux de préparation pouvaient normalement arriver au bout de 5 secondes ou de 25 secondes
    • en présence du bug, l’écran Welcome restait affiché jusqu’au timeout de 30 secondes, indépendamment du temps de préparation réel
  • D’après l’horodatage du document, le problème a été corrigé en novembre 2009, quelques mois après la sortie de Windows 7 en juillet 2009
  • L’une des raisons d’éviter les fonds bitmap à l’époque était qu’avec des environnements disposant de seulement 4 ou 8 Mo de mémoire, consacrer environ 0,75 Mo au seul fond d’écran représentait une charge notable

1 commentaires

 
GN⁺ 2025-04-29
Avis de Hacker News
  • En tant que personne qui préfère les fonds unis, je suis toujours étonné de voir à quel point une préférence aussi simple mène souvent à d’étranges terriers de lapin.
    Dans les versions récentes de macOS, lorsqu’on essaie de définir un fond uni personnalisé, on n’obtient qu’un écran blanc éblouissant : https://discussions.apple.com/thread/256029958?sortBy=rank
    GNOME a supprimé toute l’UI de réglage des fonds unis, mais c’est techniquement encore possible si l’on modifie manuellement plusieurs clés de configuration, lesquelles semblent en plus changer aléatoirement d’une version à l’autre : https://www.tc3.dev/posts/2021-09-04-gnome-3-solid-color-bac...
    Au final, cela ressemble à une fonctionnalité à moitié conservée pour une minorité d’utilisateurs, et il vaudrait mieux soit la prendre correctement en charge, soit la supprimer proprement. J’aimerais simplement saisir des valeurs RGB, mais dans l’état actuel, je préfère un système unique de fonds d’écran bien maintenu à une logique de couleur de fond instable.

    • J’ai vérifié dans KDE : dans les paramètres de fond d’écran, en choisissant wallpaper type: plain color, on peut définir la couleur avec un sélecteur de couleur.
      L’écran auquel cela s’applique est aussi affiché, et il existe une option booléenne pour l’appliquer à tous les écrans d’un coup.
    • La dernière fois que j’ai utilisé un téléphone Android Galaxy, pour avoir un fond complètement noir, il fallait télécharger une image noire quelque part comme le Galaxy Store.
      C’est pourtant logique en matière de consommation d’énergie sur les écrans de téléphone modernes, et visuellement tout à fait correct ; mais ce qui devrait être une option par défaut ou un interrupteur accessible d’un seul tap dans les réglages est devenu une corvée faite de méfiance, de recherche et de résignation.
    • Le fait que GNOME ait supprimé l’UI des fonds unis pour ne laisser que la modification manuelle de clés de configuration est vraiment le sommet de l’expérience typiquement GNOME.
    • Même sur macOS récemment, après avoir défini une couleur unie, le système est revenu plusieurs fois à la photo de forêt par défaut.
      Comme c’était une fonction qui marchait bien depuis plus de 20 ans dans l’ancien OS X, cela semble lié à la réécriture de System Preferences.
    • Moi aussi je préfère les fonds unis, mais j’ai fini par trouver que ça ne valait pas vraiment la peine de les changer.
      Les raccourcis du bureau ont été tellement malmenés au fil des générations qu’afficher le bureau est devenu un gaspillage d’espace à l’écran, et même en faisant attention, ça finit par devenir un terrain vague en désordre. C’est particulièrement vrai sous Windows, et je me suis simplement habitué à ne pas utiliser le bureau du tout, en gardant toujours des fenêtres ouvertes sur plusieurs moniteurs.
  • Après avoir évité l’univers Windows pendant les 25 dernières années, puis y être revenu ces dernières années dans un environnement d’entreprise, je vois constamment ce type de schéma dans les outils Microsoft.
    Pour des raisons de sécurité, Teams refuse de se charger, mais les notifications affichent le contenu complet des messages ; ou bien, dans la version cloud de Word, le contrôle de sécurité n’arrive qu’après avoir saisi quelques mots ou collé tout un document, pour exiger ensuite la définition d’une étiquette de sensibilité.
    Cela ressemble à un signe d’une très mauvaise architecture logicielle pour les apps web de Microsoft, et les applications desktop ne semblent pas faire exception.

    • Ce n’est pas propre à Microsoft. Je me souviens que l’ancien Google Photos envoyait des notifications avec un aperçu d’album généré par IA à partir de mes photos, alors que l’application n’avait pas l’autorisation d’accéder à mes photos.
      La demande d’autorisation arrivait ensuite, et si je la refusais, l’aperçu disparaissait.
    • Je plaisante souvent en disant que les produits Microsoft sont toujours finis à 80 %.
      Ils fonctionnent très bien pour les cas d’usage évidents, mais dès qu’on tombe sur un cas limite non couvert, on rencontre immédiatement des problèmes bizarres. Les développeurs de Microsoft n’ont pas la réputation d’être mauvais, donc cela vient peut-être de la culture d’entreprise ou de la façon de travailler ; et avec une base d’utilisateurs gigantesque, 80 % est peut-être l’optimum commercial. Mais du point de vue d’un développeur externe, cela donne quand même envie d’éviter les produits Microsoft dès que possible.
    • Le plus agaçant, c’est que les machines Windows ont perdu leur capacité de veille profonde.
      Des ordinateurs portables qui s’endormaient parfaitement il y a cinq ans sont maintenant devenus des zombies 24 h/24, avec CPU, ventilateurs et disque dur qui continuent de tourner.
      Je suis convaincu qu’un changement stupide du genre de celui décrit dans l’article a cassé une fonction qui marchait très bien, et que personne ne la corrige parce que cela pourrait gêner la dernière idée fumeuse consistant à faire tourner de l’IA sur un portable vieux de 10 ans pendant sa veille pour proposer des pubs basées sur ce qu’il a entendu.
  • Cela rejoint une pratique qui a probablement commencé à cette époque : afficher un écran de démarrage pendant une durée fixe, puis montrer l’environnement utilisateur avant que le logiciel ait complètement démarré.
    Je soupçonnais les systèmes d’exploitation comme les apps de faire cela pour éviter que les utilisateurs aient l’impression que « l’application prend trop de temps ». Maintenant, il faut deviner si le logiciel est vraiment chargé avant de l’utiliser.

    • Dans un environnement de systèmes d’information d’entreprise, il faut attendre que plusieurs systèmes de sécurité et de monitoring scannent la mémoire, bloquent ce qu’ils doivent bloquer et consignent minutieusement les événements dans le cloud.
      Ce n’est qu’ensuite qu’on se retrouve devant un thread d’UI qui ne répond pas, attendant bêtement que tout le logiciel sous-jacent ait fini de se charger.
    • L’intention de cette limite de 30 secondes semble claire.
      Mieux vaut un bureau à moitié cassé mais quand même utilisable qu’une situation où l’on reste bloqué éternellement sur l’écran de chargement et où il faut démarrer sur un autre OS pour réparer.
    • Cette approche consistant à « montrer l’environnement utilisateur avant que le logiciel ait complètement démarré » s’est aujourd’hui déplacée vers les apps web.
      Quand on fait quelque chose, l’UI affiche une roue de chargement/progression, mais en réalité cela peut durer indéfiniment ; au démarrage d’une page web, on voit un écran vide avec des barres de substitution ou des images colorées floues. Et c’est ce qu’on appelle du design réactif.
    • Dans ce genre de cas, sans limite de temps qui déclare le système « chargé » au bout de 30 secondes, les utilisateurs touchés par un bug resteraient bloqués éternellement sur l’écran de chargement.
      Parfois, traiter optimistiquement le système comme chargé est préférable pour l’utilisateur.
  • J’ai appris à utiliser les réglages par défaut presque partout
    Maintenir des personnalisations est tellement pénible que le plus simple est tout simplement de ne pas s’en soucier. L’exception, c’est une cinquantaine de lignes de configuration VS Code synchronisées dans un mystérieux fichier quelque part, probablement sur les serveurs de GitHub, mais pas à un endroit où je puisse le voir

    • Les seuls outils dont je dépends sont emacs, vim, lf, mpv, fish, foot, etc. ; j’ai donc pris le temps de les configurer, puis je les ai mis dans un dépôt Git pour les synchroniser partout
      Sur mes machines personnelles, j’utilise stow, et sur les machines distantes je fais du copier-coller. J’aime le fait que ces outils soient tellement stables que je peux passer à Debian stable sans problème
    • Maintenir des personnalisations est-il vraiment si pénible ? La plupart du temps, une fois les choses réglées comme on le souhaite, on les laisse littéralement telles quelles pendant des années
      Si je restaure directement une sauvegarde de Sublime Text d’il y a quelques années, mes préférences utilisateur fonctionnent encore
    • Une configuration reproductible et autonome apporte en grande partie les mêmes avantages pour les rapports de bug
      Comme le rappel périodique le dit, nix est vraiment bien
      On peut dire : « il y a un bug, et on peut obtenir une VM de reproduction avec nixos-rebuild build-vm --flake "github:user/repo#test-vm" && ./result/bin/run-*-vm ». Le code qui crée cette VM n’est pas non plus un amas binaire cauchemardesque côté sécurité, mais une expression nix ordinaire lisible par tout le monde, et l’appliquer à une nouvelle machine se fait en une seule commande
    • Utiliser de mauvais réglages par défaut est aussi pénible, et cela arrive bien plus souvent que de maintenir des personnalisations
    • J’avais un professeur qui disait : « les valeurs par défaut ont probablement été mises là par des gens qui connaissent ce logiciel mieux que toi »
      Si l’on comprend ce que font les réglages par défaut, toucher à toutes les options du monde est souvent plus pénible
  • L’expression « comfort food » me fait rire. Même après être passé d’AIX à Linux, j’utilise toujours motif window manager avec un bureau steelblue4 et un fond wheat pour xterm
    C’étaient les réglages par défaut que j’ai découverts pour la première fois à l’université en 1989, et j’ai le sentiment que rien ne s’est amélioré depuis. Des choses comme GNOME ou KDE me donnent la nausée

    • Dans cet article, la « comfort food », c’est la prise de conscience que même les équipes les plus grandes et les plus sophistiquées envoient en production des changements vraiment stupides
      Le wrapper if() ajouté avec une portée un peu trop large en est un exemple classique
    • J’ai de la nostalgie pour bb4win. Je l’ai découvert à l’université, et c’est ce qui m’a fait découvrir Linux
      La nostalgie est une drogue puissante
    • Je me demande ce que tu feras si tu as envie d’utiliser un moniteur 4K
      Ce n’est pas du sarcasme : je me demande sincèrement si le HiDPI fonctionne réellement avec motif
  • Il y a très longtemps, quand j’utilisais Windows comme passe-temps, j’avais modifié la valeur d’une certaine clé du registre Windows pour remplacer explorer.exe par cmd.exe
    Windows ne lançait alors pas explorer.exe pour afficher un bureau avec fond d’écran et icônes ; à la place, on obtenait un environnement où chaque fenêtre, sur un fond uni, était un shell Microsoft cmd.exe, comme avec un gestionnaire de fenêtres UNIX. Cela ressemblait à la boîte noire Windows classique, avec une barre de titre bleue et une fine bordure grise, et l’on pouvait lancer depuis l’invite de commandes des applis comme taskmgr.exe dans C:\windows\system32
    Pour moi, c’était beaucoup plus rapide et solide qu’avec explorer.exe, et clairement plus léger. Plus tard, dans une photo d’un article sur Arthur Whitney, j’ai vu une scène où la seule fenêtre ouverte sur le bureau Windows était cmd.exe ; je ne veux pas suggérer quoi que ce soit, mais ça m’est toujours resté en tête
    Je l’ai aussi vu récemment dans la documentation Microsoft : https://learn.microsoft.com/en-us/windows/configuration/shel...

    • Windows Server a, ou a eu, un mode de ce genre
      Je me souviens aussi qu’il existait pour l’IoT ou l’embarqué des versions Windows peu coûteuses/gratuites qui fonctionnaient uniquement avec cmd, sans explorer
  • Ce genre de chose entre dans la catégorie de ce que j’appelle des bugs systémiques, ou des « bugs de type »
    Si l’on avait passé un jeton au composant de connexion et fait en sorte que le destructeur du jeton indique automatiquement la fin du processus, ce bug aurait été quasiment impossible à écrire
    À la place, comme le runtime a fait reposer cela sur « les composants doivent s’en souvenir », la structure même du code autorise le bug
    Facebook a eu un bug similaire il y a quelques années : le compteur de notifications indiquait qu’il y en avait, mais quand on cliquait il n’y avait rien. Le chemin de mise à jour du compteur et le chemin d’insertion dans la liste étaient différents et divergeaient ; quand les deux ont été confiés à la même partie du système, ce bug a définitivement disparu

    • Sur Reddit aussi, il y a tout le temps une icône de notification erronée
      J’ai toujours pensé que c’était dû à un mauvais cache
  • C’est un peu méta, mais j’en suis venu à attendre les titres du style « Why did happen with » qui annoncent un article de Raymond Chen
    C’est toujours intéressant

    • The Old New Thing est une excellente collection de bizarreries de Windows
      C’est le seul blog qui ait dissipé les superstitions informatiques liées à Windows que j’avais depuis l’enfance
  • Ce code me rappelle beaucoup de mes bugs Kubernetes préférés
    if (request.authenticationData) { ok := validate(etc); if (!ok) { return authenticationFailure; } }
    Le même mème traverse donc les décennies

    • C’est un bon exemple du principe « ne validez pas, parsez »
      Si l’on fait en sorte que toute fonction nécessitant une permission prenne cette permission en argument, par exemple void doFoo(PermissionToDoFoo permission, ...){...}, et que les appels ne puissent passer que par le chemin qui obtient la permission à partir des données d’authentification, alors l’état invalide consistant à exécuter Foo sans permission devient tout simplement impossible à représenter
    • Où peut-on lire ce bug ? Je suis aussi curieux de savoir quel était exactement le bug
      Est-ce que l’absence de authenticationData faisait que c’était traité par défaut comme authentifié ?
    • La façon dont on fabrique du logiciel n’a pas changé depuis des décennies
  • C’est un peu hors sujet, mais j’adorais les fonds d’écran Windows Spotlight qui se rafraîchissent automatiquement sur l’écran de connexion
    J’avais donc aussi écrit un script pour les synchroniser comme fond d’écran du bureau. Mais sur mon Windows 10, ça s’est arrêté sans raison, alors j’ai plutôt écrit un script qui télécharge la Bing Image of the Day : https://blog.est.im/2025/stdout-03

    • Dans Windows 11, on peut définir Spotlight comme fond d’écran du bureau
    • Il existe une Bing Wallpaper App officielle pour cela (https://www.bing.com/apps/wallpaper), mais elle intègre de toutes sortes de manières des éléments agaçants qui tentent de faire passer le navigateur par défaut à Edge, ainsi que des dark patterns
    • Dans KDE Plasma, c’est une fonctionnalité intégrée