Un riavvio completamente falso [chiuso]


21

Questa sfida è semplice. Scrivi il codice che produce esattamente quello che sembra un riavvio completo del computer. Non deve mostrare nulla sullo schermo che indica che non è un vero riavvio e dovrebbe terminare alla normale schermata di accesso che si otterrebbe dopo il riavvio.

Regole.

  1. Puoi scegliere qualsiasi sistema operativo che desideri imitare. Ad esempio puoi riavviare Linux da Windows o qualsiasi altra combinazione tu scelga.
  2. Il codice dovrebbe visualizzare l'intera sequenza di spegnimento / riavvio a schermo intero senza segni che non sia reale.
  3. Questo è un concorso di popolarità, quindi più fresco è, meglio è.
  4. Il codice deve in realtà essere completamente innocuo, non eseguire alcun riavvio ed è facile uscire in qualsiasi momento.
  5. Se è necessario utilizzare immagini esterne per rendere il riavvio più realistico, il codice dovrebbe catturarle automaticamente dal Web.
  6. Il codice deve essere autonomo, basandosi solo su librerie o strumenti standard liberamente disponibili e facilmente eseguibile seguendo le istruzioni fornite.
  7. In bocca al lupo!

Trattandosi di un concorso di popolarità, assegnerò la vittoria alla risposta con il maggior numero di voti il ​​1 ° giugno 2014.


A seguito di una richiesta di restringere la domanda, ecco una regola aggiuntiva.

  • Il sistema dovrebbe imitare qualsiasi versione di Windows o le distribuzioni Mint, Ubuntu, Debian, Fedora, Archlinux o Mageia di Linux o OS X. Per una maggiore raffinatezza, si dovrebbe chiudere in uno e aprire nell'altro.

Le persone interessate potrebbero voler guardare Pitch dark (ricordo di Earth Hour) in cui sono suggeriti diversi modi per utilizzare lo schermo intero anche quando si inizia in un xterm.


2
Allo stato attuale, questa domanda è troppo ampia. Non limitando il sistema che dovrebbe essere simulato, si verificano problemi (almeno - questo elenco potrebbe non essere esaustivo): a) con vecchi sistemi basati su ROM che si riavviano all'istante e possono essere simulati visualizzando un'immagine; b) determinare se un falso soddisfa o meno i criteri di accettazione quando, ad esempio, il computer sul quale lo sto eseguendo è multi-head e il sistema operativo contraffatto non supportava multi-head (o nessuna testa).
Peter Taylor,

@PeterTaylor Speravo che le risposte di tipo a) avrebbero ottenuto voti bassi e dato che è un concorso di popolarità che sarebbe OK. Se potessi aiutarmi a perfezionarlo per gestire il punto b), sarei molto grato.

La soluzione ovvia al problema b) è restringere la domanda dicendo che la soluzione deve funzionare solo con il sistema che imita e limitando i sistemi che possono essere imitati. Ma anche in questo caso molti tentativi sono destinati a fallire dalla varietà di BIOS disponibili per macchine compatibili con IBM.
Peter Taylor,

@PeterTaylor Grazie. Ho notevolmente ridotto il campo di applicazione. Com'è adesso?

Gah, avevo quasi una soluzione perfetta per ArchLinux puro (nessun avvio, solo messaggi del kernel e BIOS). Devo dire che non ho mai capito il punto di sprecare i cicli della CPU all'avvio solo per visualizzare una grafica carina.
semi-estrinseco

Risposte:


18

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

Ho preso la risposta di @TheDoctor e ho corso con esso. Questa versione ha molti miglioramenti ed è convincente al 99% per un utente esperto (me) sul mio sistema Arch Linux. Uso Zsh poiché ha un buon supporto di array e numeri in virgola mobile.
Dipendenze: feh, disordine, amixer, zsh, xterm

miglioramenti:

1) Utilizzare il numero stampato nella prima colonna da dmesg, che è il tempo trascorso dall'avvio (ad es. [0.000000]) per determinare il tempo di sospensione. Senza questo sembra molto irrealistico sulla mia macchina. Questi tempi vengono analizzati prima del loop (in una chiamata anticipata in modalità sleep) poiché l'analisi all'interno del loop è troppo lenta.

2) Non stampare linee in cui il tempo trascorso dall'avvio è maggiore di 16 secondi. Questo numero specifico dipende dalla macchina, ma il punto è evitare di stampare successivamente dmesg-stuff che proviene dall'inserimento / rimozione di chiavette USB, ecc. E non è correlato all'avvio.

3) Fai tutto questo in una finestra terminale a schermo intero con sfondo nero e testo bianco. Complimenti a Mechanical Snail per questo trucco usato in: Crea un'immagine PNG con "Hello World!" con API di programmazione, nel codice più breve possibile

4) Disattiva l'audio allo spegnimento, ripristina il volume al termine dello script.

5) Nascondi il cursore del mouse, ripristina al termine dello script.

6) Mostra schermate iniziali BIOS e Syslinux.

Esegui con: xterm -fu -fg white -bg black -e '/ usr / bin / zsh fake-reboot.sh'

Codice:

#!/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
Questo è davvero buono e di gran lunga il più impressionante che ho potuto testare finora.

schermata di avvio molto bella, molto
Claudiu,

Haha, hai collegato la mia stessa domanda! Ma questo è un ottimo codice lì. Lo proverò.
figgycity50,

cat /etc/issue | tail -n +2 : uso inutile del gatto . tail -n +2 /etc/issueè più semplice, soprattutto quando non c'è pipeline.
Peter Cordes,

Buon punto. Risolto il problema e corretti i collegamenti interrotti.
semi-estrinseco

12

Commodoro 64

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

L'interprete BASIC visualizzerà READY.automaticamente il prompt.


2
Suggerirei di cambiare la linea 1 in: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... per essere sicuro che i colori siano corretti.
Segna

+1 per avermi portato una lacrima agli occhi, anche se non soddisfa le regole.
ClickRick,

10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
Sul mio Ti-83 Plus mostra "Fatto", non so se questo infrange le regole ...
Joshua,

1
Per evitare "Fine", è necessario aggiungere una riga aggiuntiva con una singola citazione.
Timtech,

Questo non simula un riavvio. Se si preme 2ND + ON e poi di nuovo ON, si mette in standby il dispositivo e si riattiva mostrando (nella maggior parte dei casi) lo schermo che si aveva quando lo si metteva in standby. Un vero riavvio è più difficile da fare. Ci sono modi per farlo senza rimuovere la batteria, ma è il più semplice. Quindi ciò che vedi dopo aver cambiato le batterie è ciò che il programma dovrebbe simulare. È più difficile, ma anche possibile in 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

Questo è utile se eseguito da un terminale virtuale. C'è un modo per renderlo a schermo intero se viene avviato in un xterm? Suppongo che a quel punto stai fondamentalmente implementando uno screensaver.

@Lembik xterm -fullscreen?


Provato su Mac; non funziona
Jwosty,

2
@Jwosty Su OS X (Mavericks, 10.9) devi avere i privilegi di superutente, quindi sostituiscili dmesgcon sudo dmesg. Inoltre, il problema / etc / non esiste su OS X.
CousinCocaine

5

Windows 8

Timido tentativo, non riesco a capire come auto schermo intero. Provai.

<!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
Puoi provare a cercare l'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

Ora aggiornato!

Caratteristiche:

  • Schermo nero
  • Schermo bianco con logo Apple e suono Bung
  • Risorse scaricate da GitHub utilizzando urlib
  • Blocca il Mac dell'utente conservando qualsiasi lavoro utilizzando un comando terminale e os.system()

Bello. Piccolo nitpick - le regole dicono: "Se devi usare immagini esterne per rendere il riavvio più realistico, il tuo codice dovrebbe catturarle automaticamente dal web".
semi-estrinseco,

@ semi-estrinseco Ci siamo guardati dentro, è più fastidioso di quanto valga la pena, ho dovuto comunque modificare l'immagine e Pygame non è amichevole con nessun tipo di file che non sia una bitmap di Windows, quindi penso di lasciarla così com'è per ora.
Harry Beadle,

1
@ semi-estrinseco Scrap il mio commento precedente, funzionalità aggiunta.
Harry Beadle,

Questo mostra il logo Apple a schermo intero per alcuni secondi. Ha sicuramente bisogno del "Bung" :)

@Lembik L'ho aggiunto ora, oltre a spostare le risorse su GitHub per affidabilità :)
Harry Beadle,

2

Questo fa Linux con i parametri "quiet" e "init = / bin / sh"

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

di solito i sistemi mostrano un'immagine o l'output della console. e non il bios di tutti è su f12: P
masterX244,

1
@ masterX244 - l'immagine è un'opzione di configurazione configurabile in linux. con quiet non c'è kernel in uscita e con init = / bin / sh non c'è output di avvio perché init deve semplicemente avviare una shell. Dovresti provarlo qualche volta e vedere esattamente cosa è necessario per avviare X. con devtmfs + automount abilitato Posso arrivare a X in <0.2sec con un 1-liner.
technosaurus,

ahh, non una configurazione comune è per questo che ho commentato
masterX244,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.