การรีบู๊ตปลอมโดยสมบูรณ์ [ปิด]


21

ความท้าทายนี้ง่ายมาก เขียนโค้ดที่สร้างสิ่งที่ดูเหมือนว่ารีบูตคอมพิวเตอร์เต็มรูปแบบ ต้องไม่แสดงอะไรบนหน้าจอที่บ่งบอกว่าไม่ใช่การรีบูทจริงและควรจบที่หน้าจอการเข้าสู่ระบบปกติที่คุณจะได้รับหลังจากรีบูตเครื่อง

กฎระเบียบ

  1. คุณสามารถเลือกระบบปฏิบัติการใดก็ได้ที่คุณต้องการเลียนแบบ ตัวอย่างเช่นคุณสามารถรีบูตเข้าสู่ Linux จาก Windows หรือชุดค่าผสมอื่น ๆ ที่คุณเลือก
  2. รหัสควรแสดงลำดับการปิด / รีบูตแบบเต็มหน้าจอโดยไม่มีสัญญาณว่าไม่ใช่ของจริง
  3. นี่คือการประกวดความนิยมเพื่อให้ดีกว่า
  4. รหัสในความเป็นจริงจะต้องไม่เป็นอันตรายอย่างสมบูรณ์ดำเนินการไม่รีบูตและ b ง่ายต่อการออกจากจุดใดก็ได้
  5. หากคุณต้องการใช้ภาพภายนอกเพื่อให้การรีบูตดูสมจริงยิ่งขึ้นรหัสของคุณควรจะจับภาพเหล่านั้นโดยอัตโนมัติจากเว็บ
  6. รหัสของคุณควรมีอยู่ในตัวเองอาศัยเฉพาะไลบรารีหรือเครื่องมือที่มีให้ใช้งานฟรีและสามารถดำเนินการได้ง่ายโดยทำตามคำแนะนำที่คุณให้ไว้
  7. โชคดี!

เนื่องจากเป็นการประกวดความนิยมฉันจะให้รางวัลชนะคำตอบด้วยคะแนนโหวตสูงสุดในวันที่ 1 มิถุนายน 2014


การติดตามคำขอเพื่อ จำกัด คำถามนี่คือกฎเพิ่มเติม

  • ระบบควรลอกเลียนแบบ Windows หรือ Mint, Ubuntu, Debian, Fedora, Archlinux หรือ Mageia ของ Linux หรือ OS X เพื่อความเย็นที่ยอดเยี่ยมคุณควรปิดในที่เดียวและเปิดอีกอัน

ผู้ที่สนใจอาจต้องการดูPitch dark (Earth Hour Remembrance)ซึ่งแนะนำให้ใช้หลายวิธีในการใช้งานเต็มหน้าจอแม้ว่าจะเริ่มใน xterm


2
คำถามนี้กว้างเกินไป โดยการไม่ จำกัด ระบบที่ควรแกล้งทำให้เกิดปัญหา (อย่างน้อย - รายการนี้อาจไม่ครบถ้วน): a) กับระบบที่ใช้ ROM แบบเก่าซึ่งรีบูตทันทีและสามารถปลอมได้ด้วยการแสดงภาพเดียว; b) ด้วยการพิจารณาว่าของปลอมมีคุณสมบัติตรงตามเกณฑ์การยอมรับหรือไม่เมื่อคอมพิวเตอร์ที่ฉันใช้งานนั้นเป็นแบบหลายหัวและระบบที่ปลอมไม่สนับสนุนหลายหัว (หรือหัวใด ๆ เลย)
Peter Taylor

@PeterTaylor ฉันหวังว่าคำตอบของแบบ a) จะได้รับคะแนนต่ำและเนื่องจากเป็นการประกวดความนิยมที่จะตกลง หากคุณสามารถช่วยฉันปรับแต่งเพื่อจัดการจุด b) ฉันจะขอบคุณมาก

ทางออกที่ชัดเจนสำหรับปัญหา b) คือการ จำกัด คำถามโดยบอกว่าโซลูชันของคุณต้องการทำงานภายใต้ระบบที่เลียนแบบเท่านั้นและโดยการ จำกัด ระบบที่สามารถลอกเลียนแบบได้ แต่ถึงกระนั้นก็มีหลายครั้งที่ความล้มเหลวเกิดขึ้นกับความหลากหลายของ BIOS ที่มีให้สำหรับเครื่องที่เข้ากันได้กับ IBM
Peter Taylor

@ PeterTaylor ขอบคุณ ฉันได้ จำกัด ขอบเขตอย่างมาก ตอนนี้เป็นอย่างไร

ใช่ฉันเกือบจะมีโซลูชั่นที่สมบูรณ์แบบสำหรับ ArchLinux แท้ๆ (ไม่มีบู๊ตสาดแค่ข้อความเคอร์เนลและไบออส) ฉันต้องบอกว่าฉันไม่เคยเข้าใจถึงจุดที่สิ้นเปลือง CPU ในการบู๊ตเพียงเพื่อแสดงกราฟิกที่สวยงาม
- extrinsic

คำตอบ:


18

zsh + coreutils + unclutter + amixer + xterm (Arch Linux)

ฉันตอบโดย @TheDoctor แล้วก็วิ่งไปด้วย รุ่นนี้มีการปรับปรุงมากมายและเชื่อมั่น 99% ต่อผู้ใช้ที่มีประสบการณ์ (ฉัน) ในระบบ Arch Linux ของฉัน ฉันใช้ Zsh เพราะมีอาเรย์ที่ดีและรองรับจำนวนจุดลอยตัว
การพึ่งพา: feh, unclutter, amixer, zsh, xterm

การปรับปรุง:

1) ใช้หมายเลขที่พิมพ์ในคอลัมน์แรกโดย dmesg ซึ่งเป็นเวลาตั้งแต่การบู๊ต (เช่น [0.000000]) เพื่อกำหนดเวลาเข้านอน ถ้าไม่มีสิ่งนี้มันก็ดูไม่สมจริงในเครื่องของฉัน เวลาเหล่านี้ถูกวิเคราะห์คำก่อนลูป (ในการโทรก่อนนอน) เนื่องจากการแจงภายในลูปช้าเกินไป

2) อย่าพิมพ์บรรทัดที่เวลาตั้งแต่การบู๊ตใหญ่กว่า 16 วินาที หมายเลขเฉพาะนี้ขึ้นอยู่กับเครื่อง แต่ประเด็นก็คือเพื่อหลีกเลี่ยงการพิมพ์ในภายหลัง dmesg-stuff ที่มาจากการแทรก / ถอด usb sticks ฯลฯ และไม่เกี่ยวข้องกับการบูท

3) ทำทั้งหมดนี้ในหน้าต่างเทอร์มินัลเต็มหน้าจอที่มีพื้นหลังสีดำและข้อความสีขาว รุ่งโรจน์ถึง Mechanical Snail สำหรับเคล็ดลับนี้ที่ใช้ใน: สร้างภาพ PNG ด้วย "Hello World!" ด้วย API การเขียนโปรแกรมในรหัสที่สั้นที่สุดที่เป็นไปได้

4) ปิดเสียงเมื่อปิดเครื่องเรียกคืนระดับเสียงเมื่อสคริปต์เสร็จสิ้น

5) ซ่อนเคอร์เซอร์เมาส์เรียกคืนเมื่อสคริปต์เสร็จสิ้น

6) แสดงหน้าจอ BIOS และ Syslinux

ทำงานด้วย: xterm -fu -fg white -bg black -e '/ usr / bin / zsh fake-reboot.sh'

รหัส:

#!/usr/bin/zsh
# Remove (undisplay) the mouse pointer
unclutter -idle 0 -jitter 255 &
# Since there is no easily-accessible (i.e. without being root) shutdown log, we
# fake these messages.
echo "The system is going down for maintenance NOW."
sleep 2.0
echo "[21656.404742] systemd[1]: Shutting down."
echo "[21656.404742] systemd[1]: Stopping Session 1 of user `id -u -n`."
echo "[21656.404742] systemd[1]: Stopped Session 1 of user `id -u -n`."
echo "[21656.404742] systemd[1]: Stopping Sound Card."
# For added effect, store volume and then mute sound
volume=`amixer -- sget Master | awk -F'[][]' 'END{print $2}'`
amixer -- sset Master 0% &> /dev/null
echo "[21656.404742] systemd[1]: Stopped target Sound Card."
sleep 0.5
echo "[21656.919792] systemd[1]: Stopping system-systemd\x2dfsck.slice."
echo "[21656.919792] systemd[1]: Removed slice system-systemd\x2dfsck.slice."
echo "[21656.919792] systemd[1]: Stopping system-netctl\x2difplugd.slice."
echo "[21656.919793] systemd[1]: Removed slice system-netctl\x2difplugd.slice."
echo "[21656.919793] systemd[1]: Stopping User Manager for UID `id -u`..."
sleep 0.7
echo "[21657.624741] systemd[1]: Stopping Graphical Interface."
echo "[21657.624742] systemd[1]: Stopped target Graphical Interface."
echo "[21657.624745] systemd[1]: Stopping Multi-User System."
sleep 0.9
echo "[21658.606561] systemd[1]: Stopped target Multi-User System."
echo "[21658.606562] systemd[1]: Stopping Paths."
echo "[21658.606562] systemd[1]: Stopped D-Bus System Message Bus."
echo "[21658.606562] systemd[1]: Stopped target Paths."
echo "[21658.606568] systemd[1]: Stopping Timers."
echo "[21658.606568] systemd[1]: Stopped target Timers."
echo "[21658.606568] systemd[1]: Stopping Sockets."
echo "[21658.606568] systemd[1]: Stopped target Sockets."
echo "[21658.606568] systemd[1]: Starting Shutdown."
echo "[21658.606571] systemd[1]: Reached target Shutdown."
echo "[21658.606571] systemd[1]: Starting Exit the Session..."
echo "[21658.606571] systemd[1]: Received SIGRTMIN+26 from PID 10988 (kill)."
echo "[21658.606571] systemd[1]: Deactivated swap."
sleep 0.4
echo "[21659.001741] systemd[1]: Starting Unmount All Filesystems."
echo "[21659.001742] systemd[1]: Unmounted /home."
echo "[21659.001742] systemd[1]: Reached target Unmount All Filesystems."
echo "[21659.001742] systemd[1]: Stopping Remount Root and Kernel File Systems..."
echo "[21659.001742] systemd[1]: Stopped Remount Root and Kernel File Systems."
echo "[21659.001743] systemd[1]: Reached target Shutdown."
echo "[21659.001743] systemd[1]: Starting Final Step."
echo "[21659.001743] systemd[1]: Reached target Final Step."
echo "[21659.001754] systemd[1]: Shutting down."
sleep 0.3
echo "[21659.304341] systemd-journal[250]: Journal stopped"
sleep 0.2
echo "System halted."
sleep 2
clear
sleep 1
# Get the BIOS splash screen and display it
wget http://pvv.ntnu.no/~asmunder/bios.jpg  &> /dev/null
feh -Z -x -F -N --force-aliasing bios.jpg &
pid=$! # Store PID of Feh, so we can kill it later
# While showing the BIOS splash, use the time to parse dmesg output into arrays
tim=`dmesg | awk '{print $2}' | sed 's/]//' | grep "[0-9][0-9][0-9][0-9][0-9]"`
tim=($=tim)
dmsg=("${(@f)$(dmesg)}")
sleep 2.5
kill $pid
sleep 0.5
# Get the Syslinux splash and display it
wget http://pvv.ntnu.no/~asmunder/syslinux.png  &> /dev/null
feh -Z -x -F -N --force-aliasing syslinux.png &
pid=$!
sleep 1.3
kill $pid
# Loop through the arrays we created. Calculate the time we have to wait before
# displaying this line. If the wait time is less than 0.1 sec, we skip waiting.
T1=0.0
T2=0.0
n=0
for d in $dmsg; do
  T1=$T2
  T2=${tim[$n]}
  ((dT = $T2-$T1))
  if (( $dT > 0.1));then
    sleep $dT
  fi
  echo $d
  if (( $T2 > 16.0 )); then
    break
  fi
  ((n=$n+1))
done
sleep 1
clear
# It's normally agetty that parses /etc/issue and handles escape codes in a 
# special way. Thus we skip the first line of /etc/issue and do that manually.
echo "Arch Linux "`uname -r`" (tty1)"
tail -n +2 /etc/issue 
echo `hostname`" login:"
sleep 10
# Reset the mouse pointer so it is visible again
unclutter -idle 5 -jitter 0 &
# Reset the audio volume
amixer -- sset Master $volume &> /dev/null

3
นี่เป็นสิ่งที่ดีและน่าประทับใจที่สุดที่ฉันสามารถทดสอบได้

ดีมากหน้าจอบูตมาก
Claudiu

ฮ่าฮ่าคุณเชื่อมโยงคำถามของฉันเอง! แต่นั่นเป็นรหัสที่ดีมาก ๆ ฉันจะลองดู
figgycity50

cat /etc/issue | tail -n +2 : การใช้งานที่ไร้ประโยชน์ของแมว tail -n +2 /etc/issueง่ายกว่าโดยเฉพาะเมื่อไม่มีท่อส่ง
Peter Cordes

จุดดี. แก้ไขและแก้ไขลิงก์ที่เสียหาย
- extrinsic

12

พลเรือจัตวา 64

1?CHR$(147)
2?"    **** COMMODORE 64 BASIC V2 ****"
3?
4?" 64K RAM SYSTEM  38911 BASIC BYTES FREE"

ตัวแบ่งสัญญาณรบกวนพื้นฐานจะแสดงREADY.พรอมต์โดยอัตโนมัติ


2
ฉันขอแนะนำให้เปลี่ยนบรรทัด 1 เป็น: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... เพื่อให้แน่ใจว่าสีถูกต้อง
ทำเครื่องหมาย

+1 สำหรับน้ำตาฉันแม้ว่าจะไม่เป็นไปตามกฎ
ClickRick

10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
บน Ti-83 ของฉันพลัสจะแสดง "เสร็จสิ้น" dunno ถ้าแบ่งนี้กฎ ...
โจชัว

1
เพื่อหลีกเลี่ยง "เสร็จสิ้น" คุณควรเพิ่มบรรทัดพิเศษด้วยเครื่องหมายคำพูดเดี่ยว
Timtech

นี่ไม่ได้จำลองการรีบูต หากคุณเพียงกด 2ND + เปิดแล้วเปิดใหม่อีกครั้งคุณจะทำให้อุปกรณ์เข้าสู่โหมดสแตนด์บายและแสดงขึ้นมา (ในกรณีส่วนใหญ่) หน้าจอที่คุณมีเมื่อคุณใส่ไว้ในโหมดสแตนด์บาย การรีบูตจริงทำได้ยากกว่า มีวิธีที่จะทำโดยไม่ต้องถอดแบตเตอรี่ออก แต่นั่นเป็นวิธีที่ง่ายที่สุด ดังนั้นสิ่งที่คุณเห็นหลังจากเปลี่ยนแบตเตอรี่คือสิ่งที่โปรแกรมควรจำลอง มันยากขึ้น แต่ก็เป็นไปได้ใน TI-Basic
Fabian Röling

10

Bash + Coreutils (Linux)

echo "The system is going down for maintenance NOW."
clear
sleep 5
dmesg|while read i; do echo "$i"; sleep 0.1; done
cat /etc/issue
login

สิ่งนี้จะดีถ้าเรียกใช้จากเทอร์มินัลเสมือน มีวิธีทำให้เต็มหน้าจอไหมถ้ามันเริ่มต้นใน xterm? ฉันคิดว่า ณ จุดนี้คุณมักจะติดตั้งสกรีนเซฟเวอร์

@ เลมติกxterm -fullscreen?

@professorfish เช่นเดียวกับในcodegolf.stackexchange.com/questions/26697/…

ลองใช้งานบน Mac; ไม่ทำงาน
Jwosty

2
@Jwosty บน OS X (Mavericks 10.9) คุณจะต้องมีสิทธิ์ของผู้ใช้ซุปเปอร์ดังนั้นแทนที่ด้วยdmesg sudo dmesgไม่มี Futhermore / etc / ปัญหาใน OS X
CousinCocaine

5

วินโดว์ 8

ความพยายามต่ำฉันไม่สามารถหาวิธีเต็มหน้าจออัตโนมัติ ฉันเหนื่อย.

<!DOCTYPE html>
<html>
<body>

<iframe width="1600" height="900" src="http://www.youtube.com/embed/VgQ87b7muWs?start=510&end=524&autoplay=1" frameborder="0" allowfullscreen></iframe> 

</body>
</html>

3
คุณสามารถลองหา HTML5 API Element.RequestFullScreen()( developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/ … )
Ismael Miguel

4

Python / Pygame OSX

import pygame, time, os, urllib # Import Modules
pygame.init() # Initalise Pygame
pygame.mouse.set_visible(0) # Hide the Cursor
stdscr = pygame.display.set_mode((1280,800),pygame.FULLSCREEN) # Set up the display
stdscr.fill((255,255,255)) # Fill the screen white
urllib.urlretrieve("http://harrybeadle.github.io/FakeRestart/apple.bmp", "apple.bmp") # Get Apple Logo
urllib.urlretrieve("http://harrybeadle.github.io/FakeRestart/startup.wav", "startup.wav") # Get Startup Sound
time.sleep(1) # Wait for 1 second, screen still black
applelogo = pygame.image.load('apple.bmp').convert() # Load the Logo
pygame.mixer.music.load('startup.wav') # Load the Bung
stdscr.blit(applelogo,(580, 340)) # Blit the logo
pygame.mixer.music.play(1) # Play the sound
pygame.display.flip() # Flip the buffers
time.sleep(5) # Wait 5 seconds
pygame.quit() # Quit the pygame window
os.remove('apple.bmp') # Delete logo
os.remove('startup.wav') # Delete bung
os.system('/System/Library/CoreServices/"Menu Extras"/User.menu/Contents/Resources/CGSession -suspend') # Lock the Mac

อัปเดตทันที!

คุณสมบัติ:

  • หน้าจอว่างเปล่า
  • หน้าจอสีขาวพร้อมโลโก้ Apple และ Bung Sound
  • เนื้อหาที่ดาวน์โหลดจาก GitHub โดยใช้ urlib
  • ล็อค Mac ของผู้ใช้โดยใช้คำสั่ง terminal และ os.system()

ดี nitpick เล็กน้อย - กฎบอกว่า: "หากคุณต้องการใช้ภาพภายนอกเพื่อให้การรีบูตดูสมจริงยิ่งขึ้นรหัสของคุณควรจะจับภาพเหล่านั้นโดยอัตโนมัติจากเว็บ"
กึ่งนอกเวลา

@ semi-extrinsic ดูแล้วมันน่ารำคาญกว่ามันคุ้มค่าฉันต้องแก้ไขภาพต่อไปและ Pygame ไม่เป็นมิตรกับไฟล์ประเภทใด ๆ ที่ไม่ใช่ Windows Bitmap ดังนั้นฉันคิดว่าฉันทิ้งมันไว้เหมือนตอนนี้
Harry Beadle

1
@ semi-extrinsic เรื่องที่สนใจก่อนหน้านี้ของฉันเพิ่มฟังก์ชันการทำงาน
Harry Beadle

นี่แสดงโลโก้ Apple แบบเต็มหน้าจอเพียงไม่กี่วินาที ต้องใช้ "Bung" :)

@Lembik ฉันได้เพิ่มว่าตอนนี้พร้อมกับการเคลื่อนย้ายทรัพย์สินที่ GitHub สำหรับความน่าเชื่อถือ :)
แฮร์รี่พิธีการ

2

อันนี้ทำลินุกซ์พร้อมพารามิเตอร์ "เงียบ" และ "init = / bin / sh"

#!/bin/sh
echo shutting down
sleep 1
clear
echo Press F12 to enter setup. #everyone forgets the BIOS
sleep 1
clear

โดยปกติแล้วระบบจะแสดงภาพหรือคอนโซลเอาต์พุต และไม่ใช่ประวัติของทุกคนที่อยู่ใน f12: P
masterX244

1
@ masterX244 - รูปภาพเป็นตัวเลือกบิลด์ที่สามารถกำหนดค่าได้ใน linux ด้วยความเงียบไม่มีเคอร์เนล ouput และด้วย init = / bin / sh ไม่มีเอาต์พุตเริ่มต้นเนื่องจาก init คือการเริ่มต้นเชลล์ คุณควรลองบางครั้งและดูสิ่งที่จำเป็นในการเริ่มต้น X. ด้วยการเปิดใช้งาน devtmfs + automount ฉันสามารถไปที่ X ใน <0.2sec ด้วย 1-liner
technosaurus

อ่าไม่ใช่การตั้งค่าทั่วไปที่ทำไมฉันแสดงความคิดเห็น
masterX244
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.