Vì sao màn hình đăng nhập Windows 7 dừng lại 30 giây khi dùng nền đơn sắc
(devblogs.microsoft.com)- 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
- 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
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
- 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
- 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
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
wallpaper type: plain colorthì có thể chỉ định bằng bộ chọn màuNó 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
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
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
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ệ
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
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ể
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
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
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
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
Đô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
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
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
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ấtNế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ột wrapper
if()vá thêm với phạm vi hơi quá rộng là ví dụ kinh điểnHoài niệm là một thứ thuốc mạnh
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.exethànhcmd.exeKhi đó 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 Microsoftcmd.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.exetrongC:\windows\system32Vớ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...
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ó
explorerNhữ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
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ị
Đó 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ỷ
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ễnCó phải nếu không có
authenticationDatathì mặc định được xử lý là đã xác thực không?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