Pourquoi l’écran de connexion de Windows 7 restait 30 secondes avec un fond uni
(devblogs.microsoft.com)- 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
WallpaperReadyn’était envoyé - le système de connexion attendait alors un signal qui n’arriverait jamais, jusqu’à atteindre la limite des 30 secondes
- si un fond bitmap était défini, le système cherchait le fichier, le chargeait en mémoire, l’affichait à l’écran, puis appelait
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
- à 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
- 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
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.
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.
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.
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.
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.
La demande d’autorisation arrivait ensuite, et si je la refusais, l’aperçu disparaissait.
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.
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.
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.
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.
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.
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
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
Si je restaure directement une sauvegarde de Sublime Text d’il y a quelques années, mes préférences utilisateur fonctionnent encore
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 commandeSi 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
Le wrapper
if()ajouté avec une portée un peu trop large en est un exemple classiqueLa nostalgie est une drogue puissante
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.exeparcmd.exeWindows ne lançait alors pas
explorer.exepour 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 Microsoftcmd.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 commetaskmgr.exedansC:\windows\system32Pour 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 étaitcmd.exe; je ne veux pas suggérer quoi que ce soit, mais ça m’est toujours resté en têteJe l’ai aussi vu récemment dans la documentation Microsoft : https://learn.microsoft.com/en-us/windows/configuration/shel...
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
explorerCe 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
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
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
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ésenterEst-ce que l’absence de
authenticationDatafaisait que c’était traité par défaut comme authentifié ?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