Ein völlig gefälschter Neustart [geschlossen]


21

Diese Herausforderung ist einfach. Schreiben Sie Code, der genau so aussieht wie ein vollständiger Neustart des Computers. Es darf auf dem Bildschirm nichts angezeigt werden, was darauf hinweist, dass es sich nicht um einen echten Neustart handelt, und es sollte beim normalen Anmeldebildschirm enden, den Sie nach dem Neustart erhalten würden.

Regeln.

  1. Sie können jedes Betriebssystem auswählen, das Sie nachahmen möchten. Beispielsweise können Sie Linux von Windows oder einer anderen von Ihnen gewählten Kombination aus neu starten.
  2. Der Code sollte den Vollbildmodus zum Herunterfahren / Neustarten ohne Anzeichen dafür anzeigen, dass dies nicht der Fall ist.
  3. Dies ist ein Beliebtheitswettbewerb. Je cooler, desto besser.
  4. Der Code muss in Wirklichkeit völlig harmlos sein, keinen Neustart durchführen und jederzeit einfach zu beenden sein.
  5. Wenn Sie externe Images verwenden müssen, um den Neustart realistischer zu gestalten, sollte Ihr Code diese automatisch aus dem Web abrufen.
  6. Ihr Code sollte eigenständig sein, sich nur auf frei verfügbare Standardbibliotheken oder -tools stützen und durch Befolgen der von Ihnen angegebenen Anweisungen leicht ausführbar sein.
  7. Viel Glück!

Da es sich um einen Beliebtheitswettbewerb handelt, werde ich den Gewinn für die Antwort mit der höchsten Stimmenzahl am 1. Juni 2014 vergeben.


Nach einer Bitte, die Frage einzugrenzen, ist hier eine zusätzliche Regel.

  • Das System sollte alle Windows-Versionen oder die Mint-, Ubuntu-, Debian-, Fedora-, Archlinux- oder Mageia-Distributionen von Linux oder OS X imitieren.

Interessenten sollten sich Pitch Dark (Earth Hour Remembrance) ansehen, wo eine Reihe von Möglichkeiten vorgeschlagen werden, um den Vollbildmodus auch dann zu nutzen, wenn sie mit einem xterm beginnen.


2
Diese Frage ist derzeit zu weit gefasst. Wenn Sie das System, das gefälscht werden soll, nicht einschränken, treten (zumindest - diese Liste ist möglicherweise nicht vollständig) folgende Probleme auf: a) bei alten ROM-basierten Systemen, die sofort neu gestartet werden und durch Anzeigen eines Bildes gefälscht werden können; b) mit der Feststellung, ob eine Fälschung die Akzeptanzkriterien erfüllt oder nicht, wenn z. B. der Computer, auf dem ich sie laufen lasse, Multikopf ist und das gefälschte Betriebssystem Multikopf nicht unterstützt (oder überhaupt keine Köpfe).
Peter Taylor

@PeterTaylor Ich hatte gehofft, dass Antworten vom Typ a) nur niedrige Stimmen bekommen würden und da es sich um einen Beliebtheitswettbewerb handelt, wäre das in Ordnung. Wenn Sie mir helfen könnten, es zu verfeinern, um Punkt b) zu behandeln, wäre ich sehr dankbar.

Die offensichtliche Lösung für Problem b) besteht darin, die Frage einzugrenzen, indem Sie sagen, dass Ihre Lösung nur unter dem System funktionieren muss, das sie imitiert, und indem Sie die Systeme einschränken, die imitiert werden können. Aber selbst dann scheitern viele Versuche an der Vielzahl der BIOS, die für IBM-kompatible Maschinen verfügbar sind.
Peter Taylor

@ PeterTaylor Vielen Dank. Ich habe den Umfang stark eingeengt. Wie ist es jetzt?

Gah, ich hatte fast eine perfekte Lösung für reines ArchLinux (kein Boot-Splash, nur Kernelmeldungen und BIOS). Ich muss sagen, ich habe es nie verstanden, CPU-Zyklen beim Booten zu verschwenden, nur um ein paar hübsche Grafiken anzuzeigen.
Semi-Extrinsic

Antworten:


18

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

Ich nahm die Antwort von @TheDoctor und lief damit. Diese Version hat viele Verbesserungen und überzeugt einen erfahrenen Benutzer (mich) auf meinem Arch Linux-System zu 99%. Ich benutze Zsh, da es eine gute Unterstützung für Arrays und Gleitkommazahlen hat.
Abhängigkeiten: feh, unclutter, amixer, zsh, xterm

Verbesserungen:

1) Verwenden Sie die in der ersten Spalte von dmesg aufgedruckte Zahl, die die Zeit seit dem Start angibt (z. B. [0.000000]), um die Ruhezeit zu bestimmen. Ohne das sieht es auf meinem Rechner sehr unrealistisch aus. Diese Zeiten werden vor der Schleife analysiert (bei einem frühen Aufruf zum Schlafen), da das Parsen innerhalb der Schleife zu langsam ist.

2) Drucken Sie keine Zeilen, deren Startzeit mehr als 16 Sekunden beträgt. Diese spezifische Nummer ist maschinenabhängig, aber der Punkt ist, zu vermeiden, dass später dmesg-Zeug gedruckt wird, das vom Einsetzen / Entfernen von USB-Sticks usw. stammt und nicht mit dem Booten zusammenhängt.

3) Führen Sie all dies in einem Vollbild-Terminalfenster mit schwarzem Hintergrund und weißem Text durch. Ein großes Lob an Mechanical Snail für diesen Trick in: Erstelle ein PNG-Bild mit "Hello World!" mit Programmierschnittstellen, in kürzester Zeit möglich

4) Schalten Sie den Ton beim Herunterfahren stumm und stellen Sie die Lautstärke wieder her, wenn das Skript beendet ist.

5) Den Mauszeiger ausblenden und nach Beendigung des Skripts wiederherstellen.

6) BIOS- und Syslinux-Begrüßungsbildschirme anzeigen.

Führen Sie Folgendes aus : xterm -fu -fg white -bg black -e '/ usr / bin / zsh fake-reboot.sh'

Code:

#!/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
Das ist wirklich gut und mit Abstand das beeindruckendste, das ich bisher testen konnte.

Sehr schön, viel Startbildschirm
Claudiu

Haha, du hast meine eigene Frage verlinkt! Aber das ist dort sehr guter Code. Ich werde es versuchen.
figgycity50

cat /etc/issue | tail -n +2 : nutzloser Gebrauch von Katze . tail -n +2 /etc/issueist einfacher, besonders wenn es keine Pipeline gibt.
Peter Cordes

Guter Punkt. Reparierte es und reparierte die defekten Verbindungen.
Semi-Extrinsic

12

Commodore 64

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

Der BASIC-Interpreter zeigt die READY.Eingabeaufforderung automatisch an.


2
Ich würde vorschlagen, Zeile 1 zu ändern in: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... um sicherzustellen, dass die Farben korrekt sind.
Markieren Sie

+1 für eine Träne, die mir ins Auge fällt, obwohl sie nicht den Regeln entspricht.
ClickRick

10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
Auf meinem Ti-83 Plus wird "Done" angezeigt, keine Ahnung, ob dies gegen die Regeln verstößt ...
Joshua

1
Um das "Fertig" zu vermeiden, sollten Sie eine zusätzliche Zeile mit einem einfachen Anführungszeichen hinzufügen.
Timtech

Dies simuliert keinen Neustart. Wenn Sie nur 2ND + ON und dann ON drücken, wird das Gerät nur in den Standby-Modus versetzt und beim Aufwecken wird (in den meisten Fällen) der Bildschirm angezeigt, den Sie hatten, als Sie es in den Standby-Modus versetzten. Ein echter Neustart ist schwieriger. Es gibt Möglichkeiten, dies zu tun, ohne die Batterie zu entfernen, aber das ist die einfachste. Nach dem Batteriewechsel wird also angezeigt, was das Programm simulieren soll. Das ist schwieriger, aber auch in TI-Basic möglich.
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

Dies ist gut, wenn Sie von einem virtuellen Terminal ausgeführt werden. Gibt es eine Möglichkeit, es als Vollbild anzuzeigen, wenn es in einem xterm gestartet wird? Ich nehme an, dass Sie zu diesem Zeitpunkt im Grunde einen Bildschirmschoner implementieren.

@Lembik xterm -fullscreen?


Versuchte es auf dem Mac; funktioniert nicht
Jwosty

2
@Jwosty Unter OS X (Mavericks, 10.9) müssen Sie über Superuser-Berechtigungen verfügen. Ersetzen Sie diese dmesgdurch sudo dmesg. Weitere / etc / issue gibt es unter OS X nicht.
CousinCocaine

5

Windows 8

Shoddy Versuch, ich kann nicht herausfinden, wie man Vollbild automatisch. Ich habe es versucht.

<!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
Sie können versuchen, nach der HTML5-API zu suchen 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

Jetzt aktualisiert!

Eigenschaften:

  • Leerer Bildschirm
  • Weißer Bildschirm mit Apple Logo und Bung Sound
  • Assets, die von GitHub mit heruntergeladen wurden urlib
  • Sperrt den Mac des Benutzers und behält die Arbeit mit einem Terminalbefehl und bei os.system()

Nett. Kleiner Trottel - die Regeln besagen: "Wenn Sie externe Images verwenden müssen, um den Neustart realistischer zu gestalten, sollte Ihr Code diese automatisch aus dem Web holen."
Semi-Extrinsic

@ semi-extrinsic Ich habe es mir angeschaut, es ist mehr Mühe als es wert ist, ich musste das Bild trotzdem bearbeiten und Pygame ist mit keinem Dateityp kompatibel, der keine Windows-Bitmap ist, also lasse ich es wie es ist.
Harry Beadle

1
@ semi-extrinsic Scrap mein vorheriger Kommentar, Funktionalität hinzugefügt.
Harry Beadle

Hiermit wird nur für einige Sekunden das Apple-Logo im Vollbildmodus angezeigt. Es braucht definitiv den "Bung" :)

@Lembik Ich habe das jetzt hinzugefügt, zusammen mit dem Verschieben der Assets zu GitHub für Zuverlässigkeit :)
Harry Beadle

2

Dieser macht Linux mit den Parametern "quiet" und "init = / bin / sh"

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

Normalerweise zeigen Systeme entweder eine Image- oder eine Konsolenausgabe. und nicht jedermanns BIOS ist auf F12: P
MasterX244

1
@ masterX244 - Das Image ist eine konfigurierbare Build-Option unter Linux. mit quiet gibt es keine Kernelausgabe und mit init = / bin / sh gibt es keine Startausgabe, weil das init einfach eine Shell starten soll. Sie sollten es irgendwann versuchen und genau sehen, was zum Starten von X erforderlich ist. Mit aktiviertem devtmfs + automount kann ich mit einem 1-Liner in <0,2 Sekunden zu X gelangen.
Technosaurus

ahh, keine alltägliche Konfiguration deswegen habe ich kommentiert
masterX244
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.