Reboot yang sepenuhnya palsu [ditutup]


21

Tantangan ini sederhana. Tulis kode yang menghasilkan apa yang tampak persis seperti reboot penuh komputer. Itu tidak boleh menunjukkan apa pun pada layar yang menunjukkan itu bukan reboot nyata dan harus selesai pada layar login normal yang akan Anda dapatkan setelah reboot.

Aturan

  1. Anda dapat memilih OS yang ingin Anda tiru. Misalnya Anda dapat reboot ke Linux dari Windows atau kombinasi lain yang Anda pilih.
  2. Kode harus menampilkan urutan pemadaman penuh / boot ulang layar penuh tanpa tanda bahwa itu tidak nyata.
  3. Ini adalah kontes popularitas sehingga semakin dingin semakin baik.
  4. Pada kenyataannya kode harus benar-benar tidak berbahaya, tidak melakukan boot ulang, dan b mudah untuk berhenti kapan saja.
  5. Jika Anda perlu menggunakan gambar eksternal untuk membuat reboot terlihat lebih realistis maka kode Anda harus mengambilnya secara otomatis dari web.
  6. Kode Anda harus mandiri, hanya mengandalkan perpustakaan atau alat standar yang tersedia secara bebas, dan mudah dieksekusi dengan mengikuti instruksi yang Anda berikan.
  7. Semoga berhasil!

Karena ini adalah kontes popularitas, saya akan menghadiahkan kemenangan pada jawaban dengan jumlah suara tertinggi pada 1 Juni 2014.


Mengikuti permintaan untuk mempersempit pertanyaan, berikut adalah aturan tambahan.

  • Sistem harus meniru versi Windows atau distribusi Mint, Ubuntu, Debian, Fedora, Archlinux atau Mageia dari Linux atau OS X. Untuk kesejukan ekstra, Anda harus mematikan satu dan membuka yang lain.

Orang yang tertarik mungkin ingin melihat Pitch dark (peringatan Earth Hour) di mana sejumlah cara disarankan untuk menggunakan layar penuh bahkan ketika memulai dalam xterm.


2
Seperti berdiri, pertanyaan ini terlalu luas. Dengan tidak membatasi sistem yang seharusnya dipalsukan, ia akan mengalami masalah (setidaknya - daftar ini mungkin tidak lengkap): a) dengan sistem berbasis ROM lama yang melakukan boot ulang secara instan, dan dapat dipalsukan dengan menampilkan satu gambar; b) dengan menentukan apakah palsu memenuhi kriteria penerimaan ketika misalnya komputer yang saya jalankan multi-head dan OS palsu tidak mendukung multi-head (atau semua head sama sekali).
Peter Taylor

@PeterTaylor Saya berharap bahwa jawaban dari tipe a) hanya akan mendapatkan suara rendah dan karena ini adalah kontes popularitas yang tidak masalah. Jika Anda dapat membantu saya memperbaikinya untuk menangani poin b) saya akan sangat berterima kasih.

Solusi yang jelas untuk masalah b) adalah mempersempit pertanyaan dengan mengatakan bahwa solusi Anda hanya perlu bekerja di bawah sistem yang ditiru, dan dengan membatasi sistem yang dapat ditiru. Tetapi bahkan kemudian banyak upaya yang gagal karena berbagai BIOS yang tersedia untuk mesin yang kompatibel dengan IBM.
Peter Taylor

@PeterTaylor Terima kasih. Saya telah sangat mempersempit ruang lingkup. Bagaimana sekarang?

Gah, saya hampir memiliki solusi sempurna untuk ArchLinux murni (tanpa boot splash, hanya pesan-pesan kernel dan BIOS). Saya harus mengatakan, saya tidak pernah mengerti titik membuang siklus CPU saat boot hanya untuk menampilkan beberapa gambar cantik.
semi-ekstrinsik

Jawaban:


18

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

Saya mengambil jawabannya oleh @TheDoctor dan berlari dengannya. Versi ini memiliki banyak peningkatan, dan 99% meyakinkan untuk pengguna berpengalaman (saya) di sistem Linux Arch saya. Saya menggunakan Zsh karena memiliki array yang baik dan dukungan angka floating-point.
Ketergantungan: feh, unclutter, amixer, zsh, xterm

Perbaikan:

1) Gunakan nomor yang dicetak di kolom pertama oleh dmesg, yang merupakan waktu sejak boot, (misalnya [0,000000]) untuk menentukan waktu tidur. Tanpa ini, ini terlihat sangat tidak realistis pada mesin saya. Waktu ini diuraikan sebelum loop (dalam panggilan awal untuk tidur) karena penguraian di dalam loop terlalu lambat.

2) Jangan cetak garis di mana waktu sejak boot lebih besar dari 16 detik. Nomor khusus ini bergantung pada mesin, tetapi intinya adalah untuk menghindari pencetakan nanti dmesg-hal yang berasal dari memasukkan / melepas stik usb, dll. Dan tidak terkait dengan booting.

3) Lakukan semua ini di jendela terminal layar penuh dengan latar belakang hitam dan teks putih. Kudos to Mechanical Snail untuk trik ini digunakan dalam: Membuat gambar PNG dengan "Hello World!" dengan pemrograman API, dalam kode sesingkat mungkin

4) Bungkam audio saat mati, kembalikan volume ketika skrip selesai.

5) Sembunyikan kursor mouse, pulihkan saat skrip selesai.

6) Tampilkan layar splash BIOS dan Syslinux.

Jalankan dengan: xterm -fu -fg putih -bg hitam -e '/ usr / bin / zsh fake-reboot.sh'

Kode:

#!/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
Ini sangat bagus dan sejauh ini yang paling mengesankan yang saya dapat uji sejauh ini.

sangat bagus, banyak layar boot
Claudiu

Haha, Anda menautkan pertanyaan saya sendiri! Tapi itu kode yang sangat bagus di sana. Saya akan mencobanya.
figgycity50

cat /etc/issue | tail -n +2 : penggunaan kucing tidak berguna . tail -n +2 /etc/issuelebih sederhana, terutama ketika tidak ada saluran pipa.
Peter Cordes

Poin bagus. Memperbaikinya, dan memperbaiki tautan yang rusak.
semi-ekstrinsik

12

Commodore 64

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

Intepreter BASIC akan menampilkan READY.prompt secara otomatis.


2
Saya sarankan mengganti baris 1 ke: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... untuk memastikan warnanya benar.
Tandai

1 untuk membuat saya menangis, meskipun tidak memenuhi aturan.
ClickRick

10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
Pada Ti-83 Plus saya itu menunjukkan "Selesai", tidak tahu apakah ini melanggar aturan ...
Joshua

1
Untuk menghindari "Selesai" Anda harus menambahkan baris tambahan dengan satu kutipan.
Timtech

Ini tidak mensimulasikan reboot. Jika Anda hanya menekan 2ND + ON dan kemudian ON lagi, Anda hanya menempatkan perangkat dalam keadaan siaga dan membangunkannya menunjukkan (dalam kebanyakan kasus) layar yang Anda miliki saat Anda meletakkannya dalam keadaan siaga. Reboot nyata lebih sulit dilakukan. Ada cara untuk melakukannya tanpa melepas baterai, tetapi itu yang paling mudah. Jadi apa yang Anda lihat setelah mengganti baterai adalah apa yang harus disimulasikan oleh program. Itu lebih sulit, tetapi juga mungkin di 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

Ini bagus jika dijalankan dari terminal virtual. Apakah ada cara untuk menjadikannya layar penuh jika dimulai dalam xterm? Saya kira pada titik itu Anda pada dasarnya menerapkan screensaver.

@Lembik xterm -fullscreen?


Mencobanya di Mac; tidak bekerja
Jwosty

2
@Jwosty Pada OS X (Mavericks, 10.9) Anda harus memiliki hak pengguna super, jadi gantikan dmesgdengan sudo dmesg. Futhermore / etc / issue tidak ada pada OS X.
CousinCocaine

5

Windows 8

Upaya buruk, saya tidak tahu cara auto layar penuh. Saya mencoba.

<!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
Anda dapat mencoba mencari API HTML5 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

Sekarang Diperbarui!

Fitur:

  • Layar Kosong
  • Layar Putih dengan Logo Apple dan Bung Sound
  • Aset yang diunduh dari GitHub menggunakan urlib
  • Mengunci Mac pengguna yang menyimpan pekerjaan apa pun menggunakan perintah terminal dan os.system()

Bagus. Minor nitpick - aturannya mengatakan: "Jika Anda perlu menggunakan gambar eksternal untuk membuat reboot terlihat lebih realistis maka kode Anda harus ambil secara otomatis dari web."
semi-ekstrinsik

@ semi-ekstrinsik Melihat ke dalamnya, ini lebih merepotkan daripada nilainya, saya tetap harus mengedit gambar dan Pygame tidak ramah dengan jenis file apa pun yang bukan Windows Bitmap, jadi saya pikir saya membiarkannya seperti sekarang.
Harry Beadle

1
@ semi-ekstrinsik Memo komentar saya sebelumnya, fungsionalitas ditambahkan.
Harry Beadle

Ini hanya menampilkan layar penuh logo apel selama beberapa detik. Ini pasti membutuhkan "Bung" :)

@Lembik Saya telah menambahkan itu sekarang, bersama dengan memindahkan aset ke GitHub untuk keandalan :)
Harry Beadle

2

Yang ini menggunakan linux dengan parameter "quiet" dan "init = / bin / sh"

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

biasanya sistem menunjukkan output gambar atau konsol. dan tidak semua BIOS menggunakan f12: P
masterX244

1
@ masterX244 - gambar adalah opsi build yang dapat dikonfigurasi di linux. dengan tenang tidak ada kernel ouput dan dengan init = / bin / sh tidak ada output startup karena init hanya memulai sebuah shell. Anda harus mencobanya kapan-kapan dan melihat dengan tepat apa yang diperlukan untuk memulai X. dengan devtmfs + automount diaktifkan, saya bisa mendapatkan X dalam <0,2sec dengan 1-liner.
technosaurus

ahh, bukan konfigurasi umum itu sebabnya saya berkomentar
masterX244
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.