เหตุผลที่หน้าจอเข้าสู่ระบบ Windows 7 ค้างอยู่ 30 วินาทีเมื่อใช้พื้นหลังสีล้วน
(devblogs.microsoft.com)- ใน Windows 7 และ Windows Server 2008 R2 หากใช้ พื้นหลังเดสก์ท็อปสีล้วน หน้าจอ Welcome ระหว่างการเข้าสู่ระบบอาจค้างอยู่นานสูงสุด 30 วินาที โดยสาเหตุคือสัญญาณแจ้งว่าพร้อมแล้วขาดหายไป
- ระบบเข้าสู่ระบบจะเปลี่ยนออกจากหน้าจอ Welcome ก็ต่อเมื่อทาสก์บาร์, คอมโพเนนต์ของบริการระบบ, หน้าต่างเดสก์ท็อป, การแสดงวอลล์เปเปอร์ ฯลฯ ทั้งหมดรายงานว่า พร้อมแล้ว หรือเวลาผ่านไป 30 วินาที
- โค้ดวอลล์เปเปอร์เรียก
Report(WallpaperReady)เฉพาะเมื่อมี พื้นหลังแบบบิตแมป ทำให้พื้นหลังสีล้วนที่ไม่มีบิตแมปต้องรอจนเงื่อนไขครบเวลาสุดท้าย - Group Policy “Hide desktop icons” ก็เป็นแพตเทิร์นเดียวกัน หากการเรียก
Report(DesktopIconsReady)ถูกผูกไว้ในเงื่อนไข ก็อาจพลาดการรายงานว่าไอคอนพร้อมแล้วได้ - ไม่ได้หมายความว่าการเข้าสู่ระบบจริงยืดออกไป 30 วินาทีเสมอไป แต่เป็นปรากฏการณ์ที่หน้าจอ Welcome ยังคงอยู่จนถึง timeout 30 วินาที โดยไม่เกี่ยวกับกระบวนการเตรียมพร้อมที่เดิมอาจเสร็จใน 5 หรือ 25 วินาที
เหตุผลที่หน้าจอ Welcome ค้างนานเมื่อใช้พื้นหลังสีล้วน
- หลังจากการยืนยันตัวตนเข้าสู่ระบบเสร็จ Windows จะจัดเตรียม สภาพแวดล้อมเดสก์ท็อป ของผู้ใช้
- สร้างทาสก์บาร์
- โหลดและเริ่มต้นคอมโพเนนต์ที่รับผิดชอบบริการระบบหลายรายการ
- สร้างหน้าต่างเดสก์ท็อปและแสดงไอคอน
- โหลดวอลล์เปเปอร์ในหน้าต่างพื้นหลังเดสก์ท็อปและวาดลงบนหน้าจอ
- ระบบเข้าสู่ระบบจะรอจนกว่าแต่ละคอมโพเนนต์จะรายงานว่าพร้อมแล้ว
- หากคอมโพเนนต์ทั้งหมดรายงานว่าพร้อมแล้ว ก็จะเปลี่ยนออกจากหน้าจอ Welcome
- หรือหากผ่านไป 30 วินาที ก็จะเปลี่ยนออกจากหน้าจอ Welcome
- ปัญหาพื้นหลังสีล้วนเกิดขึ้นเพราะการรายงานว่าวอลล์เปเปอร์พร้อมแล้วอยู่ ภายในโค้ดโหลดบิตแมป
- หากมีการกำหนดพื้นหลังแบบบิตแมปไว้ ระบบจะหาไฟล์ โหลดเข้าเมโมรี วาดลงบนหน้าจอ แล้วเรียก
Report(WallpaperReady) - หากไม่มีบิตแมป เช่น พื้นหลังสีล้วน เส้นทางโค้ดดังกล่าวจะไม่ถูกเรียก จึงไม่เกิดการรายงาน
WallpaperReady - ระบบเข้าสู่ระบบจึงรอรายงานที่จะไม่มีวันมา จนถึงขีดจำกัด 30 วินาที
- หากมีการกำหนดพื้นหลังแบบบิตแมปไว้ ระบบจะหาไฟล์ โหลดเข้าเมโมรี วาดลงบนหน้าจอ แล้วเรียก
การขาดสัญญาณพร้อมแล้วที่เกิดซ้ำใน Group Policy
- เอกสารซัพพอร์ตที่เกี่ยวข้องระบุว่า หากเปิด Group Policy “Hide desktop icons” ก็อาจพบความล่าช้า 30 วินาทีได้เช่นกัน
- Group Policy มักถูกเสริมเข้าไปภายหลังบนโค้ดเดิม จึงมักถูกครอบด้วยเงื่อนไขอย่าง “ถ้านโยบายอนุญาตจึงทำงาน”
- เดิมโค้ดเริ่มต้นไอคอนเดสก์ท็อปจะ bind กับโฟลเดอร์เดสก์ท็อป, enumerate ไอคอน, เพิ่มลงบนหน้าจอ แล้วเรียก
Report(DesktopIconsReady) - เมื่อเพิ่มการรองรับ Group Policy แล้วทั้งบล็อกนี้ถูกย้ายเข้าไปอยู่ในเงื่อนไขของนโยบาย หากนโยบายซ่อนไอคอนเปิดใช้งานอยู่ การรายงานว่าพร้อมแล้วก็จะไม่ถูกเรียกด้วย
- เดิมโค้ดเริ่มต้นไอคอนเดสก์ท็อปจะ bind กับโฟลเดอร์เดสก์ท็อป, enumerate ไอคอน, เพิ่มลงบนหน้าจอ แล้วเรียก
- ปรากฏการณ์นี้ไม่ได้หมายความว่างานเข้าสู่ระบบเองใช้เวลาเพิ่มอีก 30 วินาที
- ขึ้นอยู่กับประสิทธิภาพของระบบ เวลาที่รายงานความพร้อมทั้งหมดเสร็จแต่เดิมอาจเป็น 5 วินาที หรือ 25 วินาที ก็ได้
- หากมีปัญหา หน้าจอ Welcome จะคงอยู่จนถึง timeout 30 วินาที โดยไม่เกี่ยวกับเวลาพร้อมจริง
- อ้างอิงจาก timestamp ของเอกสาร ปัญหานี้ถูกแก้ใน พฤศจิกายน 2009 ซึ่งเป็นเวลาหลายเดือนหลังจาก Windows 7 เปิดตัวใน กรกฎาคม 2009
- เหตุผลหนึ่งที่หลีกเลี่ยงพื้นหลังแบบบิตแมปคือ ในอดีตที่สภาพแวดล้อมมีหน่วยความจำ 4MB หรือ 8MB การใช้วอลล์เปเปอร์เพียงอย่างเดียวกินประมาณ 0.75MB ซึ่งถือเป็นภาระ
1 ความคิดเห็น
ความคิดเห็นจาก 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 ตรง ๆ แต่ถ้าเป็นสภาพตอนนี้ ระบบวอลเปเปอร์เดียวที่ดูแลดีน่าจะดีกว่าลอจิกสีพื้นหลังที่ไม่นิ่ง
wallpaper type: plain colorในการตั้งค่าวอลเปเปอร์ จะกำหนดด้วย ตัวเลือกสี ได้มีการแสดงหน้าจอที่จะนำไปใช้ให้ดูด้วย และมีตัวเลือกแบบบูลีนเพื่อใช้กับทุกหน้าจอในครั้งเดียว
ทั้งที่บนจอโทรศัพท์สมัยใหม่มันสมเหตุสมผลในแง่การใช้พลังงานและก็ดูโอเค แต่สิ่งที่ควรเป็นตัวเลือกพื้นฐานหรือสวิตช์แตะครั้งเดียวในการตั้งค่า กลับกลายเป็นงานจุกจิกที่ต้องผ่านความไม่ไว้ใจ การค้นหา และการยอมจำนน
ใน OS X สมัยก่อน ฟีเจอร์นี้ใช้งานได้ดีมานานกว่า 20 ปี เลยดูเหมือนจะเกี่ยวกับ การเขียน System Preferences ใหม่
เพราะชอร์ตคัตบนเดสก์ท็อปถูกใช้เกินพอดีมาหลายยุค การโชว์เดสก์ท็อปจึงกลายเป็นการเปลืองพื้นที่หน้าจอ และต่อให้ระวัง สุดท้ายก็กลายเป็นแดนรกร้างรก ๆ อยู่ดี โดยเฉพาะบน Windows ผม/ฉันเลยชินกับการไม่ใช้เดสก์ท็อปทำอะไรเลย และเปิดหน้าต่างค้างไว้บนหลายจอตลอดเวลาแทน
หลังจากหลีกเลี่ยงโลก Windows มาตลอด 25 ปี แล้วเพิ่งกลับมาอยู่ในสภาพแวดล้อมองค์กรช่วงไม่กี่ปีนี้ ผม/ฉันเห็นแพตเทิร์นแบบนี้ซ้ำ ๆ ในเครื่องมือของ Microsoft
เช่น Teams โหลดไม่ได้เพราะปัญหาความปลอดภัย แต่ในแจ้งเตือนกลับแสดงเนื้อหาข้อความทั้งหมด หรือใน Word เวอร์ชันคลาวด์ ต้องพิมพ์ไปสองสามคำหรือวางทั้งเอกสารก่อน การตรวจสอบความปลอดภัยถึงค่อยตามมาและขอให้ตั้งป้ายกำกับความละเอียดอ่อน
มันดูเป็นสัญญาณว่าสถาปัตยกรรมซอฟต์แวร์เว็บแอปของ Microsoft แย่มาก และแอปเดสก์ท็อปก็ดูจะไม่ใช่ข้อยกเว้น
หลังจากนั้นค่อยมีคำขอสิทธิ์ตามมา และถ้าปฏิเสธ พรีวิวก็หายไป
ใน use case ที่ชัดเจนมันทำงานได้ดีมาก แต่พอเจอ edge case ที่ไม่ได้ครอบคลุม ก็จะชนปัญหาแปลก ๆ ทันที นักพัฒนาไม่ได้มีชื่อเสียงว่าไร้ฝีมือ ดังนั้นอาจเป็นเพราะวัฒนธรรมองค์กรหรือวิธีทำงาน และสำหรับฐานผู้ใช้ขนาดมหึมา 80% อาจเหมาะที่สุดในเชิงธุรกิจก็ได้ แต่ในฐานะนักพัฒนาภายนอก ก็ยังทำให้พยายามเลี่ยงผลิตภัณฑ์ Microsoft ถ้าทำได้
แล็ปท็อปที่เมื่อ 5 ปีก่อนเคยหลับได้สมบูรณ์ ตอนนี้กลายเป็นซอมบี้ 24 ชั่วโมงที่ CPU พัดลม และฮาร์ดดิสก์ยังหมุนตลอด
ผม/ฉันมั่นใจว่าการเปลี่ยนแปลงโง่ ๆ คล้ายกับที่บทความพูดถึงได้ทำลายฟีเจอร์ที่เคยใช้ได้ดี และไม่มีใครแก้ เพราะกลัวจะไปขัดขวางไอเดียเพ้อเจ้อใหม่ ๆ ที่จะทำให้แล็ปท็อปอายุ 10 ปีรัน AI ระหว่างหลับเพื่อเสนอ广告จากสิ่งที่มันแอบฟัง
เรื่องนี้เชื่อมโยงกับแนวปฏิบัติที่น่าจะเริ่มขึ้นช่วงนั้น: การแสดง splash screen แค่ระยะเวลาหนึ่ง แล้วแสดงสภาพแวดล้อมผู้ใช้ก่อนที่ซอฟต์แวร์จะเริ่มทำงานสมบูรณ์
สงสัยว่าทั้งระบบปฏิบัติการและแอปทำแบบนั้นเพื่อเลี่ยงความรู้สึกว่า “แอปใช้เวลานานเกินไป” ตอนนี้ผู้ใช้ต้องเดาเองว่าซอฟต์แวร์โหลดจริง ๆ เสร็จหรือยังก่อนจะใช้งาน
จากนั้นถึงจะได้เห็น UI thread ที่ไม่ตอบสนอง ซึ่งนั่งรอซอฟต์แวร์ชั้นล่างทั้งหมดโหลดจนเสร็จอย่างเหม่อลอย
เดสก์ท็อปที่ถึงจะพังไปครึ่งหนึ่งแต่ก็ยังพอใช้ได้ ย่อมดีกว่าสถานการณ์ที่ติดอยู่บนหน้าจอโหลดตลอดกาลจนต้องบูตเข้า OS อื่นเพื่อแก้
พอทำอะไรสักอย่าง UI จะแสดงวงล้อโหลด/ความคืบหน้า แต่จริง ๆ แล้วค้างยาวไม่รู้จบ และตอนเริ่มหน้าเว็บก็ขึ้นจอว่างพร้อมแถบ placeholder หรือภาพสีเบลอ ๆ นี่แหละที่เขาเรียกกันว่า responsive design
บางครั้งการที่ระบบ จัดการแบบมองโลกในแง่ดี ว่าโหลดเสร็จแล้วจริง ๆ อาจดีกว่าสำหรับผู้ใช้
ได้เรียนรู้วิธีใช้ค่าตั้งต้นแทบทุกที่
การดูแลการปรับแต่งเองมันยุ่งยากเกินไป ดังนั้นวิธีที่ง่ายที่สุดคือไม่ต้องไปใส่ใจ ข้อยกเว้นคือการตั้งค่า VS Code ประมาณ 50 บรรทัดที่ซิงก์อยู่ในไฟล์ลึกลับที่ไหนสักแห่ง น่าจะอยู่บนเซิร์ฟเวอร์ GitHub แต่ไม่มีที่ไหนที่ฉันมองเห็นได้
บนคอมพิวเตอร์ส่วนตัวใช้ stow ส่วนบนเครื่องระยะไกลก็ copy-paste ชอบตรงที่เครื่องมือพวกนี้เสถียรมากจนย้ายไป Debian stable ก็ยังใช้ได้ดี
แม้จะกู้คืนแบ็กอัป Sublime Text จากเมื่อหลายปีก่อนทันที การตั้งค่าผู้ใช้ของฉันก็ยังทำงานได้
ถ้าจะพูดเหมือนการเตือนเป็นระยะๆ ก็คือ nix ดีจริงๆ
สามารถพูดได้ว่า “มีบั๊กอยู่ และรับ VM สำหรับจำลองปัญหาได้ด้วย
nixos-rebuild build-vm --flake "github:user/repo#test-vm" && ./result/bin/run-*-vm” โค้ดที่สร้าง VM นั้นก็ไม่ใช่ก้อน binary ที่เหมือนฝันร้ายด้านความปลอดภัย แต่เป็นนิพจน์ nix ธรรมดาที่ใครๆ ก็อ่านได้ และการนำไปใช้กับเครื่องใหม่ก็จบด้วยคำสั่งเดียวถ้าเข้าใจว่าค่าตั้งต้นทำอะไรอยู่ การไปแตะทุกตัวเลือกในโลกมักจะยุ่งยากกว่า
สำนวน “comfort food” นี่ตลกดี หลังจากย้ายจาก AIX มา Linux แล้วก็ยังใช้ motif window manager กับเดสก์ท็อปสี steelblue4 และพื้นหลัง xterm สี wheat อยู่
มันเป็นค่าตั้งต้นที่ได้เจอครั้งแรกตอนอยู่มหาวิทยาลัยในปี 1989 และรู้สึกว่าหลังจากนั้นก็ยังไม่มีอะไรดีขึ้นเลย ของอย่าง GNOME, KDE ทำให้รู้สึกคลื่นไส้
wrapper
if()ที่แปะเพิ่มมาแล้วขอบเขตกว้างเกินไปเล็กน้อยเป็นกรณีคลาสสิกความคิดถึงอดีต เป็นยาที่ทรงพลัง
ไม่ได้ประชดนะ แต่อยากรู้จริงๆ ว่า HiDPI บน motif ใช้งานได้จริงหรือเปล่า
เมื่อนานมาแล้วสมัยใช้ Windows เป็นงานอดิเรก เคยแก้ค่าของ คีย์ Windows Registry บางตัวเพื่อเปลี่ยน
explorer.exeเป็นcmd.exeแบบนั้น Windows จะไม่รัน
explorer.exeเพื่อเปิดเดสก์ท็อปที่มีวอลเปเปอร์และไอคอน แต่จะกลายเป็นสภาพแวดล้อมที่แต่ละหน้าต่างเปิดเป็นเชลล์ Microsoftcmd.exeบนพื้นหลังสีล้วน คล้ายตัวจัดการหน้าต่างของ UNIX เป็นกล่องดำ Windows แบบคลาสสิกที่มีแถบชื่อเรื่องสีน้ำเงินและขอบสีเทาบางๆ และจาก command prompt ก็เรียกแอปอย่างtaskmgr.exeในC:\windows\system32ได้สำหรับฉันมันรู้สึกเร็วและทนทานกว่าใช้
explorer.exeมาก และเบากว่าแน่นอน ต่อมาฉันเห็นภาพในบทความของ Arthur Whitney ที่บนเดสก์ท็อป Windows มีหน้าต่างที่เปิดอยู่แค่cmd.exeอันเดียว ไม่ได้จะสื่ออะไรเป็นพิเศษ แต่มันติดอยู่ในความทรงจำเสมอเมื่อไม่นานมานี้ก็เห็นสิ่งนี้ในเอกสารของ Microsoft ด้วย: https://learn.microsoft.com/en-us/windows/configuration/shel...
จำได้ว่า Windows รุ่นราคาถูก/ฟรีสำหรับ IoT หรือ embedded ก็เคยมีเวอร์ชันที่ทำงานแบบ cmd-only โดยไม่มี
explorerเรื่องแบบนี้จัดอยู่ในหมวดที่ฉันเรียกว่า บั๊กเชิงระบบ หรือ “type bug”
ถ้าส่ง token ให้คอมโพเนนต์ login แล้วให้ destructor ของ token ทำเครื่องหมายว่ากระบวนการเสร็จสิ้นโดยอัตโนมัติ บั๊กนี้แทบจะเขียนขึ้นมาไม่ได้เลย
แต่กลับทำให้ runtime เป็นแบบ “คอมโพเนนต์ต้องจำเรื่องนี้เอง” ดังนั้นโครงสร้างโค้ดเองจึงเปิดทางให้เกิดบั๊ก
เมื่อไม่กี่ปีก่อน Facebook ก็มีบั๊กคล้ายกัน คือจำนวนการแจ้งเตือนแสดงว่ามีแจ้งเตือน แต่พอกดแล้วไม่มีอะไร เส้นทางอัปเดตจำนวนกับเส้นทางเพิ่มรายการลงลิสต์ต่างกันจึงคลาดกัน และเมื่อเปลี่ยนให้ส่วนเดียวกันของระบบจัดการทั้งสองอย่าง บั๊กนั้นก็หายไปถาวร
ฉันคิดมาตลอดว่าเป็นเพราะ caching ที่แย่
ออกจะเมตานิดหน่อย แต่เริ่มคาดหวังชื่อเรื่องสไตล์ “Why did happen with” ที่แจ้งว่าเป็นบทความของ Raymond Chen แล้ว
น่าสนใจเสมอ
เป็นบล็อกเดียวที่ช่วยคลายความเชื่อแบบงมงายเกี่ยวกับ Windows ที่มีมาตั้งแต่เด็กๆ
โค้ดนั้นทำให้นึกถึงบั๊ก Kubernetes ที่ฉันชอบหลายตัว
if (request.authenticationData) { ok := validate(etc); if (!ok) { return authenticationFailure; } }มีมแบบเดียวกันนี้สืบทอดข้ามหลายทศวรรษเลยทีเดียว
ถ้าทำให้ทุกฟังก์ชันที่ต้องการสิทธิ์บางอย่างรับสิทธิ์นั้นเป็น argument เช่นเขียนเป็น
void doFoo(PermissionToDoFoo permission, ...){...}และทำให้การเรียกทำได้ผ่านเส้นทางที่รับสิทธิ์จากข้อมูลการยืนยันตัวตนเท่านั้นแบบนั้นสถานะผิดพลาดที่ทำ Foo โดยไม่มีสิทธิ์ก็จะไม่สามารถแสดงออกมาได้ตั้งแต่แรก
ถ้าไม่มี
authenticationDataก็ถือว่า authenticated โดยปริยายงั้นหรือ?แม้จะออกนอกประเด็นไปเล็กน้อย แต่ผมชอบวอลเปเปอร์พื้นหลัง Windows Spotlight ที่รีเฟรชอัตโนมัติบนหน้าจอเข้าสู่ระบบมาก
เลยเคยเขียนสคริปต์เพื่อซิงก์มันมาเป็นวอลเปเปอร์เดสก์ท็อปด้วย แต่บน Windows 10 ของผมมันหยุดทำงานโดยไม่ทราบสาเหตุ จึงเขียนสคริปต์สำหรับดาวน์โหลด Bing Image of the Day แทน: https://blog.est.im/2025/stdout-03