1 ポイント 投稿者 GN⁺ 2025-04-29 | 1件のコメント | WhatsAppで共有
  • Windows 7 と Windows Server 2008 R2 では、単色のデスクトップ背景を使うと、ログオン中の Welcome 画面が最大 30秒 残ることがあり、原因は準備完了シグナルの欠落だった
  • ログオン システムは、タスク バー、システム サービスの構成要素、デスクトップ ウィンドウ、背景画像の表示などがすべて 準備完了 を報告するか、30秒が経過するまで Welcome 画面を切り替えない
  • 背景画像コードが ビットマップ背景 がある場合にだけ Report(WallpaperReady) を呼び出していたため、ビットマップのない単色背景では待機条件が最後まで満たされなかった
  • 「デスクトップ アイコンを非表示にする」グループ ポリシー も同じパターンで、Report(DesktopIconsReady) の呼び出しが条件文の中に束縛されると、アイコン準備の報告が抜け落ちることがある
  • 実際にログオンが常に30秒長くなったわけではなく、本来なら5秒や25秒で終わっていたはずの準備処理とは無関係に、Welcome 画面が 30秒のタイムアウト まで維持される現象だった

単色背景で Welcome 画面が長く残った理由

  • ログオン認証が終わると、Windows はユーザーの デスクトップ環境 を構成する
    • タスク バーの作成
    • 各種システム サービスを担当する構成要素の読み込みと初期化
    • デスクトップ ウィンドウの作成とアイコン表示
    • デスクトップ背景ウィンドウで背景画像を読み込み、画面に描画
  • ログオン システムは、各構成要素が準備できたと報告するまで待機する
    • すべての構成要素が準備完了を報告すると Welcome 画面から切り替える
    • または 30秒 が経過すると Welcome 画面から切り替える
  • 単色背景の問題は、背景画像の準備報告が ビットマップ読み込みコードの内部 にあったために発生した
    • ビットマップ背景が定義されていれば、ファイルを見つけ、メモリに読み込み、画面に描画したあとで Report(WallpaperReady) を呼び出す
    • 単色背景のようにビットマップがない場合、そのコード パスは実行されず、WallpaperReady の報告が発生しない
    • ログオン システムは来るはずのない報告を待ち続け、30秒の制限に達する

グループ ポリシーでも繰り返された準備シグナルの欠落

  • 関連するサポート文書には、「デスクトップ アイコンを非表示にする」グループ ポリシー を有効にした場合でも、30秒の遅延が発生しうると書かれている
  • グループ ポリシーは既存コードの上に後から追加されることが多く、「ポリシーが許可すれば実行」 のような条件文で包まれやすい
    • 元のデスクトップ アイコン初期化コードは、デスクトップ フォルダーにバインドし、アイコンを列挙し、画面に追加したあとで Report(DesktopIconsReady) を呼び出す
    • グループ ポリシー対応を追加する際に、このブロック全体がポリシー条件文の中に入ると、アイコン非表示ポリシーが有効な場合に準備完了の報告も実行されなくなる
  • この現象は、ログオン処理そのものに追加で30秒かかることを意味しない
    • システム性能によって、もともとすべての準備報告が終わる時間は 5秒 のことも 25秒 のこともある
    • 問題がある場合、Welcome 画面は実際の準備時間とは無関係に30秒のタイムアウトまで維持される
  • 文書のタイムスタンプによれば、この問題は Windows 7 が 2009年7月 にリリースされた数か月後、2009年11月 に修正された
  • ビットマップ背景を避けていた理由としては、過去の 4MB または 8MB メモリ環境では、背景画像だけで約 0.75MB を使うことが負担だった点もある

1件のコメント

 
GN⁺ 2025-04-29
Hacker News のコメント
  • 単色背景を好む立場として、こういう単純な好みがしばしば奇妙なラビットホールにつながるのはいつも驚き
    最新の macOS では、カスタムの単色背景を設定しようとすると、まぶしい白い画面しか表示されない: https://discussions.apple.com/thread/256029958?sortBy=rank
    GNOME は単色背景の設定 UI をすべて削除したが、複数の設定キーを手動で変更すれば技術的にはまだ可能で、そのキーもバージョンごとにランダムに変わっているように見える: https://www.tc3.dev/posts/2021-09-04-gnome-3-solid-color-bac...
    結局、少数のユーザーのために中途半端に残された機能に見えるので、きちんとサポートするか、すっきり削除するほうがよい。RGB 値をそのまま入れたいだけだが、今の状態なら不安定な背景色ロジックより、よく管理された単一の壁紙システムのほうがましだと思う

    • KDE で確認してみたところ、壁紙設定で wallpaper type: plain color を選ぶと カラーピッカー で指定できる
      適用先の画面も表示され、すべての画面に一括適用するブール値オプションもある
    • 最後に Android Galaxy フォンを使っていたとき、完全な黒背景を使うには Galaxy Store のような場所から黒い画像をダウンロードする必要があった
      現代のスマホディスプレイでは電力面でも合理的で見た目も悪くないのに、標準オプションや設定のワンタップ切り替えであるべきことが、不信、検索、諦めを経る雑用になっていた
    • GNOME が単色背景 UI を削除し、設定キーの手動変更だけを残したのは、まさに GNOME らしい体験 の頂点だ
    • 最近の macOS でも単色を設定していたのに、何度もデフォルトの森の写真に戻った
      以前の OS X では 20 年以上ちゃんと動いていた機能なので、System Preferences の書き直し と関係がありそうだ
    • 私も単色を好むが、変える意味はあまりないと感じた
      デスクトップショートカットが世代を経て乱用されたせいで、デスクトップを表示すること自体が画面スペースの無駄になり、気をつけていても結局は散らかった荒れ地になる。Windows では特にそうで、デスクトップを何の用途にも使わず、複数モニターに常にウィンドウを出しておくほうに慣れてしまった
  • この 25 年間 Windows の世界を避けてきて、ここ数年で企業環境に戻ってみると、Microsoft のツールでこういうパターンを何度も見る
    セキュリティ上の問題で Teams は読み込まれないのに通知にはメッセージ全文が表示されたり、Word のクラウド版で数語入力するか文書全体を貼り付けた後になってセキュリティチェックが追いつき、秘密度ラベルの設定を要求したりする
    Microsoft の Web アプリのソフトウェアアーキテクチャが非常に悪いことの兆候に見え、デスクトップアプリも例外ではなさそうだ

    • Microsoft だけの問題ではない。昔の Google Photos も、アプリに写真へのアクセス権限がないのに、私の写真から作った AI 生成アルバム のプレビュー通知を送ってきたのを覚えている
      その後で権限要求が出て、拒否するとプレビューが消えた
    • Microsoft 製品はいつも 80% 完成 だと冗談を言ったりする
      ありきたりなユースケースでは非常にうまく動くが、カバーしていない境界ケースに出くわすとすぐ奇妙な問題にぶつかる。開発者の腕が悪いという評判はないので、企業文化や仕事の進め方のせいかもしれないし、巨大なユーザー基盤では 80% がビジネス的に最適なのかもしれない。それでも外部開発者の立場では、できれば Microsoft 製品を避けたくなる
    • いちばん腹立たしいのは、Windows マシンが 深いスリープ の能力を失ったことだ
      5 年前には完璧にスリープしていたノート PC が、今では CPU、ファン、ハードディスクが回り続ける 24 時間ゾンビになっている
      記事で言われているのと似た愚かな変更が、まともに動いていた機能を壊したのであり、10 年前のノート PC がスリープ中にも AI を動かして盗み聞きした内容に基づく広告を提案できるようにする最新のくだらない構想の邪魔になるから、誰も直さないのだと確信している
  • これはその頃始まったであろう慣行とつながっている: スプラッシュ画面 を一定時間だけ見せた後、ソフトウェアが完全に起動する前にユーザー環境を先に見せる方式
    OS もアプリも、「アプリの起動が遅すぎる」という印象を避けるためにそうしていたのだろうと疑っていた。今では、使う前にソフトウェアが本当に読み込まれたのか推測しなければならない

    • 企業情報システム環境では、複数のセキュリティ・監視システムがメモリをスキャンし、ブロックし、クラウドに細かくログを残すまで待たなければならない
      その後でようやく、下位のソフトウェアがすべて読み込まれるのをぼんやり待っている 応答しない UI スレッド を目にする
    • この 30 秒のタイムアウト の意図は明確に見える
      ローディング画面に永遠に閉じ込められて別の OS で起動して修復しなければならない状況よりは、半分壊れていてもとにかく使えるデスクトップのほうがまし、という判断だ
    • 「ソフトウェアが完全に起動する前にユーザー環境を見せる」方式は、今日では Web アプリ に移った
      何かをすると UI は読み込み中/進行中のホイールを表示するが、実際には延々と時間がかかり、Web ページの起動時には空白画面にプレースホルダーのバーやぼやけた色の画像が出る。これがいわゆるレスポンシブデザインだというのだから
    • こういう場合、30 秒後に「読み込まれたものとみなす」タイムアウトがないと、バグに当たったユーザーはローディング画面に永遠に閉じ込められる
      ときにはシステムが実際に読み込まれたと 楽観的に扱う ほうが、ユーザーにとってよいこともある
  • デフォルト設定をほぼどこでも使うやり方を覚えた
    カスタマイズを保守するのは面倒すぎるので、単に気にしないのがいちばん簡単だ。例外は、どこかの謎のファイルに同期されている VS Code の設定約50行で、おそらく GitHub のサーバー上にあるのだろうが、自分が見られる場所にはない

    • 依存しているツールは emacs、vim、lf、mpv、fish、foot など数個だけなので、時間をかけて設定したあと Git リポジトリに入れて、どこでも同期している
      個人のコンピュータでは stow を使い、リモートマシンではコピー&ペーストしている。これらのツールは非常に安定しているので、Debian stable に移っても問題ないところが気に入っている
    • カスタマイズの保守は本当にそんなに面倒なのか? たいていは望みどおりに設定したら、文字どおり何年もそのままにしておく
      数年前の Sublime Text のバックアップをそのまま復元しても、自分のユーザー設定は今でも動作する
    • 再現可能で自己完結した設定は、バグ報告でもほぼ同じ利点をもたらす
      定期的なリマインダーのように言うなら、nix は実際に良い
      「バグがあり、nixos-rebuild build-vm --flake "github:user/repo#test-vm" && ./result/bin/run-*-vm で再現用 VM を取得できる」と言える。その VM を作るコードも、セキュリティ上の悪夢のようなバイナリの塊ではなく、誰でも読める普通の nix 式で、新しいマシンへの適用も単一コマンドで終わる
    • 悪いデフォルトを使うのも面倒で、カスタマイズを保守するよりずっと頻繁に経験することになる
    • 「デフォルト値は、おそらく君よりそのソフトウェアをよく知っている人たちが入れておいたものだ」と言っていた教授がいた
      デフォルトが何をするのか理解しているなら、世の中のあらゆるオプションをいじるほうが面倒なことが多い
  • 「コンフォートフード」という表現が面白い。AIX から Linux に移ったあとも、いまだに motif window manager に steelblue4 のデスクトップ、wheat の xterm 背景を使っている
    1989年に大学時代に初めて触れたデフォルトで、それ以降それより良くなったものはないと感じている。GNOME や KDE のようなものは吐き気がする

    • この記事でいう「コンフォートフード」は、どれほど大きく高級なチームでも、本当に馬鹿げた変更を本番環境に出してしまうのだという気づきのことだ
      範囲が少し過剰に広がった、後付けの if() ラッパーは古典的な例だ
    • bb4win には郷愁がある。大学時代に知り、Linux に初めて触れるきっかけになった
      ノスタルジアは強力な薬だ
    • 4K モニターを使いたくなったらどうするのか気になる
      皮肉ではなく、motif で HiDPI が実際に動作するのか本気で気になっている
  • かなり昔、趣味で Windows を使っていたころ、特定の Windows レジストリキーの値を編集して explorer.execmd.exe に置き換えた
    すると Windows は explorer.exe を実行して壁紙やアイコンのあるデスクトップを表示せず、UNIX のウィンドウマネージャのように、単色背景の上に各ウィンドウが Microsoft の cmd.exe シェルとして開く環境になった。古典的な Windows の黒い箱に青いタイトルバーと細い灰色の枠が付いた形で、コマンドプロンプトから C:\windows\system32taskmgr.exe のようなアプリを実行できた
    自分には explorer.exe を使うよりはるかに速く堅牢に感じられ、明らかに軽量だった。後に Arthur Whitney の記事の写真で、Windows デスクトップ上に開いているウィンドウが cmd.exe ひとつだけという場面を見た。何かを示唆したいわけではないが、ずっと記憶に残っている
    最近の Microsoft ドキュメントでもこれを見た: https://learn.microsoft.com/en-us/windows/configuration/shel...

    • Windows Server にはこういうモードがある、またはあった
      IoT や組み込み向けの低価格/無料の Windows にも、explorer なしで cmd 専用として動作するバージョンがあったと記憶している
  • こういうものは、自分が システム的バグ、または「型のバグ」と呼ぶ範疇に入る
    ログインコンポーネントにトークンを渡し、そのトークンのデストラクタが自動的にプロセス完了を示すようにしていれば、このバグはほぼ書けなかったはずだ
    代わりにランタイムで「コンポーネントたちがこれを覚えておく必要がある」という形にしたため、コード構造そのものがバグを許容している
    数年前 Facebook にも似たバグがあり、通知数は通知があると表示するのに、クリックすると何もなかった。件数更新経路とリスト挿入経路が別々だったためにずれが生じ、両方を同じシステム部分が管理するように変えると、そのバグは永久に消えた

    • Reddit でも誤った通知アイコンがしょっちゅう出る
      いつも悪いキャッシュのせいだと思っていた
  • 少しメタな話だが、Raymond Chen の記事を知らせる「Why did happen with」式のタイトルを期待するようになった
    いつも興味深い

    • The Old New Thing は Windows の奇妙さの素晴らしいコレクションだ
      子どものころから持っていた Windows 関連のコンピューティング迷信を唯一解いてくれたブログだ
  • そのコードは、私の好きな Kubernetes のバグをたくさん思い出させる
    if (request.authenticationData) { ok := validate(etc); if (!ok) { return authenticationFailure; } }
    同じミームが数十年をまたいで続いているわけだ

    • これは「検証するな、パースせよ」という原則の良い例だ
      ある権限を必要とするすべての関数がその権限を引数として受け取るようにすれば、たとえば void doFoo(PermissionToDoFoo permission, ...){...} のように書き、呼び出しは認証データから権限を得る経路を通じてのみ可能にできる
      そうすれば、権限なしに Foo を実行するという不正な状態を表現すること自体が不可能になる
    • そのバグはどこで読める? バグが正確に何だったのかも気になる
      authenticationData がなければデフォルトで認証済みとして扱われたということ?
    • ソフトウェアの作り方は何十年も変わっていない
  • 話題から少し外れますが、ログイン画面で自動的に更新される Windows Spotlight の壁紙が本当に好きでした。
    そこで、それをデスクトップの壁紙に同期するスクリプトも使っていました。ところが私の Windows 10 では理由もなく止まってしまったので、代わりに Bing Image of the Day をダウンロードするスクリプトを書きました: https://blog.est.im/2025/stdout-03

    • Windows 11 では Spotlight をデスクトップの壁紙に設定できます
    • そのための公式 Bing Wallpaper App(https://www.bing.com/apps/wallpaper)もありますが、既定のブラウザーを Edge に変えさせようとする煩わしい要素や ダークパターン があらゆる形で盛り込まれています
    • KDE Plasma では組み込み機能です