एक पूरी तरह से नकली रिबूट [बंद]


21

यह चुनौती सरल है। वह कोड लिखें, जो कंप्यूटर के पूर्ण रीबूट जैसा दिखता है। इसे स्क्रीन पर कुछ भी नहीं दिखाना चाहिए जो इंगित करता है कि यह एक वास्तविक रिबूट नहीं है और स्क्रीन पर सामान्य लॉग में समाप्त होना चाहिए जो आपको रिबूट करने के बाद मिलेगा।

नियम।

  1. आप कोई भी ओएस चुन सकते हैं जिसे आप नकल करना पसंद करते हैं। उदाहरण के लिए आप विंडोज या किसी भी अन्य संयोजन से लिनक्स में रिबूट कर सकते हैं।
  2. कोड को पूर्ण शट डाउन / रिबूट अनुक्रम पूर्ण स्क्रीन प्रदर्शित करना चाहिए जिसमें कोई संकेत नहीं है कि यह वास्तविक नहीं है।
  3. यह एक लोकप्रियता प्रतियोगिता है इसलिए कूलर बेहतर है।
  4. कोड वास्तव में पूरी तरह से हानिरहित होना चाहिए, किसी भी बिंदु पर कोई रिबूटिंग और बी को छोड़ना आसान नहीं है।
  5. यदि आपको रीबूट को अधिक यथार्थवादी बनाने के लिए बाहरी छवियों का उपयोग करने की आवश्यकता है, तो आपके कोड को वेब से स्वचालित रूप से हड़पने चाहिए।
  6. आपका कोड स्वयं होना चाहिए, केवल मानक स्वतंत्र रूप से उपलब्ध पुस्तकालयों या उपकरणों पर निर्भर होना चाहिए, और आपके द्वारा दिए गए निर्देशों का पालन करके आसानी से निष्पादन योग्य होगा।
  7. सौभाग्य!

जैसा कि यह एक लोकप्रियता प्रतियोगिता है, मैं 1 जून 2014 को सबसे अधिक वोटों के साथ जीत का जवाब दूंगा।


प्रश्न को संकीर्ण करने के अनुरोध के बाद, यहां एक अतिरिक्त नियम है।

  • सिस्टम को विंडोज के किसी भी संस्करण या मिंट, उबंटू, डेबियन, फेडोरा, आर्कलिनक्स या मक्सिया के लिनक्स या ओएस एक्स के वितरण का अनुकरण करना चाहिए। अतिरिक्त ठंडक के लिए, आपको एक में बंद होना चाहिए और दूसरे में खुला होना चाहिए।

इच्छुक लोग पिच डार्क (अर्थ आवर रिमेंबरेंस) को देखना चाहते हैं, जहां एक बार में शुरू होने पर भी पूर्ण स्क्रीन का उपयोग करने के लिए कई तरीके सुझाए जाते हैं।


2
जैसा कि यह खड़ा है, यह सवाल बहुत व्यापक है। उस सिस्टम को प्रतिबंधित न करने से जिसे फेक किया जाना चाहिए वह कम से कम चलता है (कम से कम - यह सूची संपूर्ण नहीं हो सकती है) समस्याएं: ए) पुराने रॉम-आधारित सिस्टम के साथ जो तुरंत रिबूट होते हैं, और एक छवि प्रदर्शित करके फेक किया जा सकता है; ख) यह निर्धारित करने के साथ कि क्या नकली स्वीकार करने के मानदंडों को पूरा करता है या नहीं, उदाहरण के लिए जब मैं इसे चला रहा हूं तो कंप्यूटर मल्टी-हेड है और फेक ओएस मल्टी-हेड (या किसी भी हेड) का समर्थन नहीं करता है।
पीटर टेलर

@PeterTaylor मुझे उम्मीद थी कि टाइप ए के उत्तर केवल कम वोट प्राप्त करेंगे और जैसा कि यह एक लोकप्रियता प्रतियोगिता है जो ठीक होगा। यदि आप मुझे बिंदु b को संभालने के लिए इसे परिष्कृत करने में मदद कर सकते हैं) तो मैं बहुत आभारी रहूंगा।

समस्या बी का स्पष्ट समाधान) यह कहकर प्रश्न को संकीर्ण करना है कि आपके समाधान को केवल उस प्रणाली के तहत काम करने की आवश्यकता है जो वह नकल करता है, और उन प्रणालियों को प्रतिबंधित करके जो नकल की जा सकती हैं। लेकिन फिर भी आईबीएम-संगत मशीनों के लिए उपलब्ध विभिन्न प्रकार के BIOS द्वारा विफलता के कई प्रयास किए जाते हैं।
पीटर टेलर

@PeterTaylor साभार मैंने दायरे को बहुत कम कर दिया है। अब यह कैसा है?

Gah, मैं लगभग शुद्ध ArchLinux (कोई बूट छप, बस कर्नेल संदेश और BIOS) के लिए एक सही समाधान था। मुझे कहना होगा, मैंने कभी कुछ सुंदर ग्राफिक्स प्रदर्शित करने के लिए बूट पर सीपीयू साइकिल बर्बाद करने की बात नहीं समझी।
अर्ध-बहिर्मुखी

जवाबों:


18

zsh + कोरुटिल्स + अशुद्ध + एमिक्सर + एक्सटर्म (आर्क लिनक्स)

मैंने @ TheDoctor से जवाब लिया और इसके साथ भाग गया। इस संस्करण में कई सुधार हैं, और मेरे आर्क लिनक्स सिस्टम पर एक अनुभवी उपयोगकर्ता (मुझे) का 99% आश्वस्त है। मैं Zsh का उपयोग करता हूं क्योंकि इसमें अच्छी सरणी और फ्लोटिंग-पॉइंट नंबर समर्थन है।
निर्भरताएँ: feh, अस्पष्टता, अमृत, zsh, xterm

सुधार:

1) पहले कॉलम में छपी संख्या का उपयोग dmesg द्वारा किया जाता है, जो कि बूट के बाद का समय है, (जैसे [0.000000]) सोने का समय निर्धारित करने के लिए। इसके बिना यह मेरी मशीन पर बहुत अवास्तविक लगता है। लूप के अंदर पार्स करने के बाद से ये समय लूप से पहले (सोने के लिए एक शुरुआती कॉल में) पार्स किया जाता है।

2) उन लाइनों को न छापें जहां से बूट 16 सेकंड से बड़ा है। यह विशिष्ट संख्या मशीन-निर्भर है, लेकिन बिंदु बाद में dmesg- सामान को प्रिंट करने से बचना है जो usb की छड़ें डालने / हटाने से आता है और बूटिंग के लिए असंबंधित है।

3) यह सब फुलस्क्रीन टर्मिनल विंडो में काली पृष्ठभूमि और सफेद पाठ के साथ करें। इस ट्रिक के लिए कुडोस टू मैकेनिकल घोंघा: इसमें "हैलो वर्ल्ड!" प्रोग्रामिंग एपीआई के साथ, सबसे कम कोड में संभव है

4) शटडाउन पर ऑडियो म्यूट करें, स्क्रिप्ट के खत्म होने पर वॉल्यूम को पुनर्स्थापित करें।

5) स्क्रिप्ट खत्म होने पर माउस कर्सर को छिपाएं।

6) BIOS और Syslinux स्प्लैश स्क्रीन दिखाएं।

साथ दौड़ो: xterm -fu -fg सफेद -bg काला -e '/ usr / bin / zsh नकली-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
यह वास्तव में अच्छा है और अब तक का सबसे प्रभावशाली मैं अब तक परीक्षण कर सकता हूं।

बहुत अच्छी, ज्यादा बूट स्क्रीन
क्लाउडीयू

हाहा, आपने मेरा अपना प्रश्न जोड़ दिया! लेकिन यह बहुत अच्छा कोड है। मैं इसे आजमाने जा रहा हूं।
अंजीर 5050

cat /etc/issue | tail -n +2 : बिल्ली का बेकार उपयोगtail -n +2 /etc/issueसरल है, खासकर जब कोई पाइपलाइन नहीं है।
पीटर कॉर्डेस

अच्छी बात। इसे ठीक किया, और टूटे हुए लिंक को ठीक किया।
अर्ध-बहिर्मुखी

12

कमोड 64

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

BASIC intepreter READY.प्रॉम्प्ट को स्वचालित रूप से प्रदर्शित करेगा।


2
मेरा सुझाव है कि लाइन 1 से: को बदलना 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... यह सुनिश्चित करने के लिए कि रंग सही हैं।
मार्क

मेरी आंखों में आंसू लाने के लिए +1, हालांकि यह नियमों को पूरा नहीं करता है।
ClickRick

10

TI-बेसिक

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
मेरे टीआई -83 प्लस पर यह "हो गया" दिखाता है, अगर यह नियम तोड़ता है तो डननो ...
जोशुआ

1
"पूर्ण" से बचने के लिए आपको एक उद्धरण के साथ एक अतिरिक्त पंक्ति जोड़नी चाहिए।
तैमुक

यह एक रिबूट का अनुकरण नहीं करता है। यदि आप सिर्फ 2ND + ON दबाते हैं और फिर से ऑन करते हैं, तो आप केवल डिवाइस को स्टैंडबाय में रखते हैं और इसे शो करते हैं (ज्यादातर मामलों में) स्क्रीन जिसे आपने स्टैंडबाय में रखा था। एक असली रिबूट कठिन है। बैटरी को हटाने के बिना इसे करने के तरीके हैं, लेकिन यह सबसे आसान है। तो बैटरी बदलने के बाद आप जो देखते हैं वह वही है जो प्रोग्राम को अनुकरण करना चाहिए। यह कठिन है, लेकिन टीआई-बेसिक में भी संभव है।
फेबियन रोइंग

10

बैश + कोर्यूटिल्स (लिनक्स)

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/...

मैक पर कोशिश की; काम नहीं करता है।
Jwosty

2
@Jwosty पर ओएस एक्स (मावेरिक्स, 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>


4

पायथन / 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

अब अपडेट किया गया!

विशेषताएं:

  • खाली स्क्रीन
  • व्हाइट स्क्रीन w / Apple लोगो और बंग ध्वनि
  • GitHub से डाउनलोड किए गए एसेट्स urlib
  • टर्मिनल कमांड का उपयोग करके किसी भी कार्य को संरक्षित करने वाले उपयोगकर्ता के मैक को बंद कर देता है और os.system()

अच्छा लगा। माइनर नाइटपिक - नियम कहते हैं: "यदि आपको रिबूट को अधिक यथार्थवादी बनाने के लिए बाहरी छवियों का उपयोग करने की आवश्यकता है, तो आपके कोड को वेब से स्वचालित रूप से हथियाना चाहिए।"
अर्ध-बहिर्मुखी

@ सेमी-एक्सट्रिंसिक इस पर ध्यान दिया, यह अधिक परेशान करने योग्य है, मुझे वैसे भी छवि को संपादित करना था और Pygame किसी भी फाइलटेप के साथ अनुकूल नहीं है जो कि विंडोज बिटमैप नहीं है, इसलिए मुझे लगता है कि मैं इसे अभी के लिए छोड़ देता हूं।
हैरी बीडल

1
@ अर्ध-बहिर्मुखी मेरी पिछली टिप्पणी को स्क्रैप करें, कार्यक्षमता जोड़ी गई।
हैरी बीडल

यह केवल कुछ सेकंड के लिए ऐप्पल लोगो पूर्ण स्क्रीन दिखाता है। इसे निश्चित रूप से "बंग" :)

@ लेम्बिक मैंने जोड़ा है कि अब, संपत्ति को विश्वसनीयता के लिए 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 - छवि लिनक्स में एक विन्यास योग्य निर्माण विकल्प है। शांत के साथ कोई कर्नेल नहीं है और init = / bin / sh के साथ कोई स्टार्टअप आउटपुट नहीं है क्योंकि init को केवल एक शेल शुरू करना है। आप इसे कभी-कभी आज़माएं और देखें कि X को शुरू करने के लिए वास्तव में क्या आवश्यक है। devtmfs + automount सक्षम होने के साथ मैं एक लाइनर के साथ <0.2sec में X प्राप्त कर सकता हूं।
टेक्नोसॉरस

आह, एक आम विन्यास नहीं है कि मैंने क्यों टिप्पणी की
मास्टरएक्स 244
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.