1 điểm bởi GN⁺ 2025-04-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trên Windows 7 và Windows Server 2008 R2, khi dùng hình nền đơn sắc, màn hình Welcome trong lúc đăng nhập có thể giữ nguyên tới 30 giây, và nguyên nhân là do thiếu tín hiệu báo đã sẵn sàng
  • Hệ thống đăng nhập chỉ chuyển khỏi màn hình Welcome khi thanh tác vụ, các thành phần dịch vụ hệ thống, cửa sổ desktop, việc hiển thị hình nền, v.v. đều báo đã sẵn sàng, hoặc khi đã qua 30 giây
  • Mã xử lý hình nền chỉ gọi Report(WallpaperReady) khi có hình nền bitmap, nên với nền đơn sắc không có bitmap, điều kiện chờ bị treo cho đến hết thời gian
  • Chính sách nhóm “Hide desktop icons” cũng có thể gặp cùng mẫu lỗi nếu lời gọi Report(DesktopIconsReady) bị đặt bên trong câu lệnh điều kiện
  • Điều này không có nghĩa là thời gian đăng nhập thực tế luôn tăng thêm 30 giây; hiện tượng là màn hình Welcome bị giữ đến mốc timeout 30 giây bất kể quá trình chuẩn bị vốn dĩ có thể đã xong ở giây thứ 5 hay 25

Vì sao màn hình Welcome giữ quá lâu với nền đơn sắc

  • Sau khi xác thực đăng nhập xong, Windows sẽ thiết lập môi trường desktop của người dùng
    • Tạo thanh tác vụ
    • Tải và khởi tạo các thành phần phụ trách nhiều dịch vụ hệ thống
    • Tạo cửa sổ desktop và hiển thị biểu tượng
    • Tải hình nền trong cửa sổ nền desktop và vẽ lên màn hình
  • Hệ thống đăng nhập sẽ chờ cho đến khi từng thành phần báo là đã sẵn sàng
    • Khi mọi thành phần đều báo hoàn tất chuẩn bị, nó sẽ chuyển khỏi màn hình Welcome
    • Hoặc khi đã qua 30 giây, nó cũng sẽ chuyển khỏi màn hình Welcome
  • Vấn đề với nền đơn sắc xảy ra vì tín hiệu báo hình nền đã sẵn sàng nằm bên trong mã tải bitmap
    • Nếu có hình nền bitmap được định nghĩa, hệ thống sẽ tìm tệp, nạp vào bộ nhớ, vẽ lên màn hình rồi gọi Report(WallpaperReady)
    • Nếu không có bitmap, như với nền đơn sắc, nhánh mã đó sẽ không chạy nên không phát sinh báo cáo WallpaperReady
    • Hệ thống đăng nhập sẽ chờ một tín hiệu không bao giờ đến cho tới khi chạm mốc giới hạn 30 giây

Việc thiếu tín hiệu sẵn sàng cũng lặp lại trong Group Policy

  • Tài liệu hỗ trợ liên quan cho biết khi bật chính sách nhóm “Hide desktop icons”, người dùng cũng có thể gặp độ trễ 30 giây
  • Group Policy thường được bổ sung chồng lên mã hiện có ở giai đoạn sau, nên rất dễ bị bọc trong các điều kiện kiểu “nếu chính sách cho phép thì thực thi”
    • Ban đầu, mã khởi tạo biểu tượng desktop sẽ bind tới thư mục desktop, liệt kê các biểu tượng, thêm chúng lên màn hình rồi gọi Report(DesktopIconsReady)
    • Nếu khi thêm hỗ trợ Group Policy mà toàn bộ khối này bị đưa vào trong điều kiện chính sách, thì khi chính sách ẩn biểu tượng được bật, báo cáo hoàn tất chuẩn bị cũng sẽ không chạy
  • Hiện tượng này không có nghĩa là bản thân tác vụ đăng nhập mất thêm đúng 30 giây
    • Tùy theo hiệu năng hệ thống, thời điểm mọi tín hiệu sẵn sàng hoàn tất vốn có thể là 5 giây hoặc 25 giây
    • Khi lỗi xảy ra, màn hình Welcome sẽ bị giữ đến mốc timeout 30 giây bất kể thời gian chuẩn bị thực tế
  • Theo dấu thời gian của tài liệu, lỗi này được sửa vào tháng 11 năm 2009, vài tháng sau khi Windows 7 phát hành vào tháng 7 năm 2009
  • Một lý do trước đây khiến người ta tránh dùng hình nền bitmap là trong môi trường bộ nhớ 4MB hoặc 8MB, chỉ riêng hình nền đã có thể tiêu tốn khoảng 0.75MB

1 bình luận

 
GN⁺ 2025-04-29
Các ý kiến trên Hacker News
  • Với tư cách là người thích nền đơn sắc, tôi luôn ngạc nhiên khi một sở thích đơn giản như vậy lại thường dẫn vào những “hang thỏ” kỳ lạ
    Trên macOS mới nhất, nếu cố đặt nền đơn sắc tùy chỉnh thì chỉ hiện một màn hình trắng chói: https://discussions.apple.com/thread/256029958?sortBy=rank
    GNOME đã loại bỏ toàn bộ UI để đặt nền đơn sắc, nhưng về mặt kỹ thuật vẫn còn làm được nếu tự đổi nhiều khóa thiết lập; có vẻ các khóa đó cũng thay đổi ngẫu nhiên theo từng phiên bản: https://www.tc3.dev/posts/2021-09-04-gnome-3-solid-color-bac...
    Rốt cuộc nó giống một tính năng được giữ lại nửa vời cho một nhóm nhỏ người dùng; hoặc hỗ trợ cho đàng hoàng, hoặc gỡ bỏ sạch sẽ thì tốt hơn. Tôi chỉ muốn nhập giá trị RGB, nhưng với tình trạng hiện tại, tôi nghĩ một hệ thống hình nền duy nhất được quản lý tốt còn hơn logic màu nền chập chờn

    • Tôi kiểm tra trên KDE thì thấy trong phần thiết lập hình nền, nếu chọn wallpaper type: plain color thì có thể chỉ định bằng bộ chọn màu
      Nó cũng hiển thị màn hình sẽ áp dụng, và có cả tùy chọn boolean để áp dụng một lần cho tất cả màn hình
    • Lần cuối tôi dùng điện thoại Android Galaxy, để dùng nền đen hoàn toàn thì phải tải một ảnh màu đen từ nơi như Galaxy Store
      Trên màn hình điện thoại hiện đại, điều đó hợp lý cả về điện năng lẫn vẻ ngoài, vậy mà một việc lẽ ra phải là tùy chọn mặc định hoặc một công tắc chạm một lần trong cài đặt lại trở thành việc lặt vặt phải trải qua nghi ngờ, tìm kiếm rồi cam chịu
    • Việc GNOME bỏ UI nền đơn sắc và chỉ để lại cách chỉnh khóa thiết lập thủ công đúng là đỉnh cao của trải nghiệm rất GNOME
    • Gần đây trên macOS tôi cũng đã đặt màu đơn sắc, vậy mà vài lần nó lại quay về ảnh rừng mặc định
      Trên OS X cũ, tính năng này đã hoạt động tốt hơn 20 năm, nên có vẻ liên quan đến việc viết lại System Preferences
    • Tôi cũng thích nền đơn sắc, nhưng cảm thấy việc đổi không còn nhiều ý nghĩa
      Do các lối tắt trên desktop đã bị lạm dụng qua nhiều thế hệ, việc hiển thị màn hình nền trở thành lãng phí không gian màn hình, và dù cẩn thận đến đâu cuối cùng nó cũng thành một vùng hoang tàn bừa bộn. Trên Windows thì đặc biệt như vậy, và tôi đã quen với việc đơn giản là không dùng desktop cho bất cứ việc gì, luôn để các cửa sổ mở trên nhiều màn hình
  • Sau 25 năm tránh xa thế giới Windows rồi vài năm gần đây quay lại môi trường doanh nghiệp, tôi liên tục thấy kiểu mẫu này trong các công cụ của Microsoft
    Vì vấn đề bảo mật, Teams không tải được nhưng thông báo lại hiện toàn bộ nội dung tin nhắn; hoặc trên bản Word đám mây, kiểm tra bảo mật chỉ chạy theo sau sau khi bạn gõ vài từ hoặc dán cả tài liệu, rồi yêu cầu đặt nhãn độ nhạy
    Điều đó trông như dấu hiệu cho thấy kiến trúc phần mềm ứng dụng web của Microsoft rất tệ, và có vẻ ứng dụng desktop cũng không ngoại lệ

    • Đây không chỉ là vấn đề của Microsoft. Tôi nhớ Google Photos ngày trước cũng từng gửi thông báo xem trước album do AI tạo từ ảnh của tôi, dù ứng dụng không có quyền truy cập ảnh
      Sau đó lời nhắc xin quyền mới xuất hiện, và nếu từ chối thì phần xem trước biến mất
    • Tôi hay đùa rằng sản phẩm Microsoft lúc nào cũng hoàn thành 80%
      Chúng hoạt động rất tốt trong các trường hợp sử dụng hiển nhiên, nhưng gặp một trường hợp biên chưa được bao phủ là lập tức đâm vào vấn đề kỳ quặc. Vì các lập trình viên của họ không có tiếng là kém, có thể nguyên nhân nằm ở văn hóa doanh nghiệp hoặc cách làm việc; với cơ sở người dùng khổng lồ, 80% cũng có thể là tối ưu về mặt kinh doanh. Dù vậy, ở góc nhìn lập trình viên bên ngoài, tôi vẫn tránh sản phẩm Microsoft nếu có thể
    • Điều khó chịu nhất là các máy Windows đã mất khả năng ngủ sâu
      Những chiếc laptop 5 năm trước còn ngủ hoàn hảo nay đã thành zombie 24 giờ với CPU, quạt và ổ cứng cứ chạy mãi
      Một thay đổi ngu ngốc giống như trong bài đã phá hỏng một tính năng đang chạy tốt, và tôi tin chắc không ai sửa vì sợ cản trở những ý tưởng viển vông mới nhất kiểu khiến laptop 10 năm tuổi vẫn chạy AI trong lúc ngủ để đề xuất quảng cáo dựa trên nội dung nghe lén được
  • Điều này liên quan đến một thực hành có lẽ bắt đầu vào khoảng thời đó: chỉ hiển thị màn hình splash trong một khoảng thời gian nhất định, rồi đưa môi trường người dùng lên trước khi phần mềm khởi động xong hoàn toàn
    Tôi nghi cả hệ điều hành lẫn ứng dụng đều làm vậy để tránh cảm giác “ứng dụng mất quá lâu”. Giờ thì trước khi dùng, ta phải đoán xem phần mềm đã thật sự tải xong chưa

    • Trong môi trường hệ thống thông tin doanh nghiệp, phải chờ nhiều hệ thống bảo mật/giám sát quét và chặn bộ nhớ, đồng thời ghi log chi li lên đám mây
      Sau đó mới thấy một UI thread không phản hồi đang đờ ra chờ toàn bộ phần mềm bên dưới tải xong
    • Ý định của thời hạn 30 giây này có vẻ rõ ràng
      Một desktop dù hỏng dở nhưng vẫn dùng được còn hơn bị kẹt mãi ở màn hình tải rồi phải khởi động sang OS khác để sửa
    • Cách “hiển thị môi trường người dùng trước khi phần mềm khởi động hoàn toàn” nay đã chuyển sang ứng dụng web
      Khi bạn làm gì đó, UI hiển thị vòng tròn tải/tiến trình nhưng thực tế có thể kéo dài vô tận; khi trang web khởi động thì hiện màn hình trống với các thanh giữ chỗ hoặc ảnh màu bị làm mờ. Thế mà người ta gọi đây là thiết kế đáp ứng
    • Trong những trường hợp như vậy, nếu không có thời hạn sau 30 giây để “coi như đã tải”, người dùng gặp lỗi sẽ bị kẹt mãi ở màn hình tải
      Đôi khi việc hệ thống xử lý lạc quan rằng nó thật sự đã tải lại tốt hơn cho người dùng
  • Tôi đã học được cách dùng thiết lập mặc định ở gần như mọi nơi
    Duy trì các tùy chỉnh quá phiền phức, nên dễ nhất là cứ không bận tâm. Ngoại lệ là khoảng 50 dòng thiết lập VS Code được đồng bộ vào một tệp bí ẩn nào đó, có lẽ nằm trên máy chủ GitHub, nhưng không ở nơi tôi có thể thấy

    • Vì các công cụ tôi phụ thuộc chỉ có vài cái như emacs, vim, lf, mpv, fish, foot, nên tôi bỏ thời gian cấu hình chúng rồi đưa vào kho Git để đồng bộ ở mọi nơi
      Trên máy cá nhân thì dùng stow, còn trên máy từ xa thì sao chép-dán. Tôi thích ở chỗ các công cụ này ổn định đến mức chuyển sang Debian stable vẫn ổn
    • Duy trì tùy chỉnh thật sự phiền phức đến vậy sao? Phần lớn là sau khi thiết lập theo ý muốn, tôi để nguyên đúng nghĩa trong nhiều năm
      Ngay cả khi khôi phục thẳng bản sao lưu Sublime Text từ vài năm trước, thiết lập người dùng của tôi vẫn hoạt động
    • Cấu hình có thể tái lập và tự chứa cũng mang lại hầu hết lợi ích tương tự khi báo lỗi
      Nói như một lời nhắc định kỳ thì, nix thực sự tốt
      Có thể nói: “Có một lỗi, có thể lấy VM tái hiện bằng nixos-rebuild build-vm --flake "github:user/repo#test-vm" && ./result/bin/run-*-vm”. Mã tạo ra VM đó cũng không phải một cục nhị phân như ác mộng bảo mật, mà là một biểu thức nix bình thường ai cũng đọc được, và áp dụng lên máy mới cũng xong bằng một lệnh duy nhất
    • Dùng các giá trị mặc định tệ cũng phiền phức, và còn gặp thường xuyên hơn nhiều so với việc duy trì tùy chỉnh
    • Tôi từng có một giáo sư nói rằng “giá trị mặc định có lẽ được đặt bởi những người hiểu phần mềm đó hơn bạn”
      Nếu bạn hiểu các giá trị mặc định làm gì, thì việc đụng vào mọi tùy chọn trên đời thường phiền hơn
  • Cụm “món ăn an ủi” nghe buồn cười. Từ sau khi chuyển từ AIX sang Linux, tôi vẫn dùng motif window manager với desktop steelblue4 và nền xterm màu wheat
    Đó là các giá trị mặc định tôi gặp lần đầu thời đại học năm 1989, và tôi cảm thấy từ đó đến nay chẳng có gì tốt hơn. Những thứ như GNOME, KDE làm tôi buồn nôn

    • “Món ăn an ủi” trong bài này là nhận ra rằng dù là đội ngũ lớn và cao cấp đến đâu, tất cả vẫn đưa những thay đổi thật sự ngu ngốc lên production
      Một wrapper if() vá thêm với phạm vi hơi quá rộng là ví dụ kinh điển
    • Tôi hoài niệm về bb4win. Tôi biết đến nó hồi đại học, và đó là cơ duyên khiến tôi lần đầu tiếp xúc Linux
      Hoài niệm là một thứ thuốc mạnh
    • Tôi tò mò nếu muốn dùng màn hình 4K thì sẽ làm thế nào
      Không mỉa mai đâu, tôi thật sự tò mò liệu HiDPI có hoạt động thực tế trong motif không
  • Rất lâu trước đây, hồi còn dùng Windows như một thú vui, tôi đã chỉnh giá trị của một khóa Windows Registry cụ thể để đổi explorer.exe thành cmd.exe
    Khi đó Windows không chạy explorer.exe để mở desktop có hình nền và biểu tượng nữa, mà trở thành một môi trường giống trình quản lý cửa sổ UNIX, nơi từng cửa sổ hiện lên trên nền đơn sắc dưới dạng shell Microsoft cmd.exe. Nó có dạng hộp đen Windows cổ điển với thanh tiêu đề màu xanh và viền xám mảnh, và từ Command Prompt có thể chạy các ứng dụng như taskmgr.exe trong C:\windows\system32
    Với tôi, nó nhanh và chắc chắn hơn nhiều so với dùng explorer.exe, và rõ ràng nhẹ hơn. Sau này tôi thấy trong ảnh của một bài viết về Arthur Whitney có cảnh trên desktop Windows chỉ mở đúng một cửa sổ cmd.exe; không có ý ám chỉ gì, nhưng cảnh đó luôn đọng lại trong trí nhớ
    Gần đây tôi cũng thấy điều này trong tài liệu Microsoft: https://learn.microsoft.com/en-us/windows/configuration/shel...

    • Windows Server có, hoặc từng có, một chế độ như vậy
      Tôi nhớ là các bản Windows giá rẻ/miễn phí dành cho IoT hoặc nhúng cũng từng có phiên bản hoạt động kiểu chỉ cmd, không có explorer
  • Những chuyện như thế này thuộc nhóm mà tôi gọi là lỗi mang tính hệ thống hoặc “lỗi kiểu”
    Nếu họ truyền một token cho thành phần đăng nhập, và để destructor của token tự động đánh dấu quá trình đã hoàn tất, thì lỗi này gần như không thể viết ra được
    Thay vào đó, runtime lại biến nó thành chuyện “các thành phần phải nhớ điều này”, nên chính cấu trúc mã đã cho phép lỗi xảy ra
    Vài năm trước Facebook cũng có một lỗi tương tự: số thông báo hiển thị là có thông báo, nhưng bấm vào thì không có gì. Đường cập nhật số đếm và đường chèn vào danh sách khác nhau nên bị lệch; khi đổi để cùng một phần của hệ thống quản lý cả hai, lỗi đó biến mất vĩnh viễn

    • Trên Reddit cũng luôn xuất hiện biểu tượng thông báo sai
      Tôi vẫn luôn nghĩ là do caching tệ
  • Hơi meta một chút, nhưng tôi đã bắt đầu mong chờ những tiêu đề kiểu “Why did happen with” báo hiệu một bài của Raymond Chen
    Lúc nào cũng thú vị

    • The Old New Thing là một bộ sưu tập tuyệt vời về những điều kỳ quặc của Windows
      Đó là blog duy nhất giải đáp được các mê tín máy tính liên quan đến Windows mà tôi đã mang theo từ nhỏ
  • Đoạn mã đó gợi tôi nhớ đến rất nhiều lỗi Kubernetes mà tôi thích
    if (request.authenticationData) { ok := validate(etc); if (!ok) { return authenticationFailure; } }
    Có thể nói cùng một meme đã kéo dài qua nhiều thập kỷ

    • Đây là một ví dụ hay cho nguyên tắc “đừng xác thực, hãy phân tích cú pháp
      Nếu mọi hàm cần một quyền nào đó đều nhận quyền đó làm đối số, chẳng hạn viết như void doFoo(PermissionToDoFoo permission, ...){...}, và chỉ có thể gọi qua đường lấy quyền từ dữ liệu xác thực, thì trạng thái sai là thực hiện Foo khi không có quyền sẽ trở nên không thể biểu diễn
    • Có thể đọc về lỗi đó ở đâu? Tôi cũng tò mò chính xác lỗi đó là gì
      Có phải nếu không có authenticationData thì mặc định được xử lý là đã xác thực không?
    • Cách làm phần mềm đã không thay đổi suốt nhiều thập kỷ
  • Hơi lạc đề một chút, nhưng tôi từng rất thích hình nền Windows Spotlight tự động làm mới trên màn hình đăng nhập
    Vì vậy tôi cũng đã dùng một script để đồng bộ nó làm hình nền desktop. Nhưng trên Windows 10 của tôi, nó dừng lại không rõ lý do, nên thay vào đó tôi đã viết một script tải Bing Image of the Day: https://blog.est.im/2025/stdout-03

    • Trên Windows 11 có thể đặt Spotlight làm hình nền desktop
    • Có ứng dụng Bing Wallpaper App chính thức cho việc này (https://www.bing.com/apps/wallpaper), nhưng nó có đủ kiểu yếu tố phiền phức và dark pattern nhằm cố đổi trình duyệt mặc định sang Edge
    • Trong KDE Plasma thì đây là tính năng tích hợp sẵn