Un reinicio completamente falso [cerrado]

21

Este desafío es simple. Escriba código que produzca lo que se ve exactamente como un reinicio completo de la computadora. No debe mostrar nada en la pantalla que indique que no es un reinicio real y debe finalizar en la pantalla de inicio de sesión normal que obtendría después del reinicio.

Reglas.

  1. Puede elegir cualquier sistema operativo que desee imitar. Por ejemplo, puede reiniciar en Linux desde Windows o cualquier otra combinación que elija.
  2. El código debe mostrar la secuencia completa de apagado / reinicio a pantalla completa sin signos de que no sea real.
  3. Este es un concurso de popularidad, así que cuanto más fresco mejor.
  4. En realidad, el código debe ser completamente inofensivo, no debe reiniciarse y es fácil de abandonar en cualquier momento.
  5. Si necesita usar imágenes externas para hacer que el reinicio se vea más realista, entonces su código debería tomarlas automáticamente de la web.
  6. Su código debe ser autónomo, depender únicamente de las bibliotecas o herramientas estándar disponibles gratuitamente y ser fácilmente ejecutable siguiendo las instrucciones que proporciona.
  7. ¡Buena suerte!

Como es un concurso de popularidad, otorgaré la victoria a la respuesta con el mayor número de votos el 1 de junio de 2014.


Después de una solicitud para limitar la pregunta, aquí hay una regla adicional.

  • El sistema debe imitar cualquier versión de Windows o las distribuciones Mint, Ubuntu, Debian, Fedora, Archlinux o Mageia de Linux u OS X. Para una frescura adicional, debe cerrar en una y abrir en la otra.

Es posible que las personas interesadas quieran ver Pitch dark (recuerdo de la Hora del Planeta), donde se sugieren varias formas de usar la pantalla completa incluso cuando se comienza en una xterm.

Comunidad
fuente
2
Tal como está, esta pregunta es demasiado amplia. Al no restringir el sistema que debe falsificarse, se encuentra con (al menos, esta lista puede no ser exhaustiva) problemas: a) con sistemas antiguos basados ​​en ROM que se reinician instantáneamente y pueden falsificarse mostrando una imagen; b) con la determinación de si una falsificación cumple o no con los criterios de aceptación cuando, por ejemplo, la computadora en la que la estoy ejecutando es de múltiples cabezales y el sistema operativo falso no era compatible con múltiples cabezas (o ninguna cabeza).
Peter Taylor
@PeterTaylor Esperaba que las respuestas del tipo a) obtuvieran votos bajos y, como es un concurso de popularidad, estaría bien. Si pudiera ayudarme a refinarlo para manejar el punto b) estaría muy agradecido.
La solución obvia al problema b) es acotar la pregunta diciendo que su solución solo necesita funcionar bajo el sistema que imita, y restringiendo los sistemas que pueden ser imitados. Pero incluso entonces, muchos intentos están condenados al fracaso por la variedad de BIOS disponibles para máquinas compatibles con IBM.
Peter Taylor
@PeterTaylor Gracias. He reducido mucho el alcance. ¿Cómo está ahora?
Gah, casi tuve una solución perfecta para ArchLinux puro (sin salpicaduras de arranque, solo mensajes del kernel y BIOS). Debo decir que nunca entendí el punto de desperdiciar los ciclos de CPU en el arranque solo para mostrar algunos gráficos bonitos.
semi-extrínseco

Respuestas:

18

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

Tomé la respuesta de @TheDoctor y corrí con ella. Esta versión tiene muchas mejoras y es 99% convincente para un usuario experimentado (yo) en mi sistema Arch Linux. Uso Zsh ya que tiene una buena matriz y soporte de números de punto flotante.
Dependencias: feh, unclutter, amixer, zsh, xterm

Mejoras:

1) Use el número impreso en la primera columna por dmesg, que es el tiempo transcurrido desde el arranque (por ejemplo, [0.000000]) para determinar el tiempo para dormir. Sin esto, se ve muy poco realista en mi máquina. Estos tiempos se analizan antes del ciclo (en una llamada temprana para dormir) ya que el análisis dentro del ciclo es demasiado lento.

2) No imprima líneas donde el tiempo desde el arranque es mayor a 16 segundos. Este número específico depende de la máquina, pero el punto es evitar imprimir más tarde dmesg-material que viene de insertar / quitar memorias USB, etc. y no está relacionado con el arranque.

3) Haga todo esto en una ventana de terminal de pantalla completa con fondo negro y texto blanco. Felicitaciones a Caracol mecánico por este truco utilizado en: Hacer una imagen PNG con "Hello World!" con API de programación, en el código más corto posible

4) Silencia el audio al apagar, restaura el volumen cuando finaliza el script.

5) Ocultar el cursor del mouse, restaurar cuando finalice el script.

6) Mostrar BIOS y pantallas de bienvenida Syslinux.

Corre con: xterm -fu -fg blanco -bg negro -e '/ usr / bin / zsh fake-reboot.sh'

Código:

#!/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
semi-extrínseco
fuente
3
Esto es realmente bueno y, con mucho, el más impresionante que he podido probar hasta ahora.
muy agradable, mucha pantalla de arranque
Claudiu
Jaja, vinculaste mi propia pregunta! Pero ese es un muy buen código allí. Voy a intentarlo
figgycity50
cat /etc/issue | tail -n +2 : uso inútil del gato . tail -n +2 /etc/issuees más simple, especialmente cuando no hay tubería.
Peter Cordes
Buen punto. Lo arregló y arregló los enlaces rotos.
semi-extrínseco
12

Comodoro 64

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

El intérprete BÁSICO mostrará el READY.mensaje automáticamente.

marinus
fuente
2
Sugeriría cambiar la línea 1 a: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... para asegurarse de que los colores sean correctos.
Mark
+1 por traer una lágrima a mi ojo, a pesar de que no cumple con las reglas.
ClickRick
10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome
qwr
fuente
2
En mi Ti-83 Plus muestra "Listo", no sé si esto rompe las reglas ...
Joshua
1
Para evitar el "Listo", debe agregar una línea adicional con una sola cita.
Timtech
Esto no simula un reinicio. Si presiona 2ND + ON y luego ON nuevamente, solo pone el dispositivo en modo de espera y al activarlo se muestra (en la mayoría de los casos) la pantalla que tenía cuando lo puso en modo de espera. Un reinicio real es más difícil de hacer. Hay formas de hacerlo sin quitar la batería, pero esa es la más fácil. Entonces, lo que ves después de cambiar las baterías es lo que el programa debería simular. Eso es más difícil, pero también es posible en 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
TheDoctor
fuente
Esto es bueno si se ejecuta desde una terminal virtual. ¿Hay alguna forma de hacerlo a pantalla completa si se inicia en xterm? Supongo que en ese momento básicamente está implementando un protector de pantalla.
@Lembik xterm -fullscreen?
Lo probé en Mac; no funciona
Jwosty
2
@Jwosty En OS X (Mavericks, 10.9) necesita tener privilegios de superusuario, así que reemplácelo dmesgcon sudo dmesg. Además, el problema / etc / no existe en OS X.
CousinCocaine
5

Windows 8

Intento de mala calidad, no puedo entender cómo auto pantalla completa. Lo intenté.

<!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>
qwr
fuente
3
Puede intentar buscar la 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

Ahora actualizado!

caracteristicas:

  • Pantalla en blanco
  • Pantalla blanca con logotipo de Apple y sonido Bung
  • Activos descargados de GitHub usando urlib
  • Bloquea la Mac del usuario conservando cualquier trabajo utilizando un comando de terminal y os.system()
Harry Beadle
fuente
Agradable. Minipick: las reglas dicen: "Si necesita usar imágenes externas para hacer que el reinicio se vea más realista, entonces su código debería tomarlas automáticamente de la web".
semi-extrínseco
@ semi-extrínseco Analizado, es más molesto de lo que vale, tuve que editar la imagen de todos modos y Pygame no es compatible con ningún tipo de archivo que no sea un Bitmap de Windows, así que creo que lo dejo como está por ahora.
Harry Beadle
1
@ semi-extrínseca Scrap mi comentario anterior, funcionalidad agregada.
Harry Beadle
Esto solo muestra el logotipo de Apple a pantalla completa durante unos segundos. Definitivamente necesita el "Bung" :)
@Lembik He agregado eso ahora, junto con mover los activos a GitHub para mayor confiabilidad :)
Harry Beadle
2

Este hace linux con los parámetros "quiet" y "init = / bin / sh"

#!/bin/sh
echo shutting down
sleep 1
clear
echo Press F12 to enter setup. #everyone forgets the BIOS
sleep 1
clear
technosaurus
fuente
por lo general, los sistemas muestran una imagen o salida de la consola. y no la biografía de todos está en f12: P
masterX244
1
@ masterX244: la imagen es una opción de compilación configurable en Linux. con quiet no hay salida del kernel y con init = / bin / sh no hay salida de inicio porque el init es simplemente iniciar un shell. Debería intentarlo en algún momento y ver exactamente lo que se necesita para iniciar X. con devtmfs + automount habilitado Puedo llegar a X en <0.2seg con un liner.
technosaurus
Ahh, no una configuración común es por eso que comento
masterX244