Un redémarrage complètement faux [fermé]


21

Ce défi est simple. Écrivez du code qui produit exactement ce qui ressemble à un redémarrage complet de l'ordinateur. Il ne doit rien montrer à l'écran qui indique qu'il ne s'agit pas d'un véritable redémarrage et devrait se terminer à l'écran de connexion normal que vous obtiendriez après le redémarrage.

Règles.

  1. Vous pouvez choisir n'importe quel OS que vous souhaitez imiter. Par exemple, vous pouvez redémarrer Linux sous Windows ou toute autre combinaison que vous choisissez.
  2. Le code doit afficher la séquence complète d'arrêt / redémarrage en plein écran sans signe qu'elle n'est pas réelle.
  3. Il s'agit d'un concours de popularité, donc plus c'est cool, mieux c'est.
  4. Le code doit en réalité être totalement inoffensif, ne pas redémarrer et être facile à quitter à tout moment.
  5. Si vous devez utiliser des images externes pour rendre le redémarrage plus réaliste, votre code devrait les récupérer automatiquement sur le Web.
  6. Votre code doit être autonome, ne s'appuyant que sur des bibliothèques ou des outils standard disponibles gratuitement et facilement exécutable en suivant les instructions que vous fournissez.
  7. Bonne chance!

Comme il s'agit d'un concours de popularité, j'attribuerai la victoire à la réponse avec le plus grand nombre de votes le 1er juin 2014.


Suite à une demande d'affiner la question, voici une règle supplémentaire.

  • Le système doit imiter n'importe quelle version de Windows ou des distributions Mint, Ubuntu, Debian, Fedora, Archlinux ou Mageia de Linux ou OS X. Pour plus de fraîcheur, vous devez fermer dans l'une et ouvrir dans l'autre.

Les personnes intéressées peuvent vouloir regarder Pitch dark (souvenir de l'heure de la Terre) où un certain nombre de façons sont suggérées pour utiliser le plein écran même lors du démarrage dans un xterm.


2
En l'état, cette question est trop large. En ne restreignant pas le système qui doit être falsifié, il rencontre (au moins - cette liste peut ne pas être exhaustive) des problèmes: a) avec d'anciens systèmes basés sur ROM qui redémarrent instantanément, et peuvent être falsifiés en affichant une image; b) déterminer si un faux répond ou non aux critères d'acceptation lorsque, par exemple, l'ordinateur sur lequel je l'exécute est à plusieurs têtes et que le faux système d'exploitation ne prend pas en charge plusieurs têtes (ou aucune tête du tout).
Peter Taylor

@PeterTaylor J'espérais que les réponses de type a) obtiendraient simplement des votes bas et comme c'est un concours de popularité qui serait OK. Si vous pouviez m'aider à l'affiner pour traiter le point b), je vous serais très reconnaissant.

La solution évidente au problème b) est d'affiner la question en disant que votre solution ne doit fonctionner que sous le système qu'elle imite, et en restreignant les systèmes qui peuvent être imités. Mais même alors, de nombreuses tentatives sont vouées à l'échec par la variété des BIOS disponibles pour les machines compatibles IBM.
Peter Taylor

@PeterTaylor Merci. J'ai considérablement réduit la portée. Comment est-ce maintenant?

Gah, j'avais presque une solution parfaite pour ArchLinux pur (pas de démarrage, juste des messages du noyau et du BIOS). Je dois dire que je n'ai jamais compris l'intérêt de perdre des cycles CPU au démarrage juste pour afficher de jolis graphismes.
semi-extrinsèque

Réponses:


18

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

J'ai pris la réponse par @TheDoctor et j'ai couru avec. Cette version a de nombreuses améliorations et convainc à 99% un utilisateur expérimenté (moi) sur mon système Arch Linux. J'utilise Zsh car il prend en charge les tableaux et les nombres à virgule flottante.
Dépendances: feh, unclutter, amixer, zsh, xterm

Améliorations:

1) Utilisez le nombre imprimé dans la première colonne par dmesg, qui est le temps écoulé depuis le démarrage, (par exemple [0.000000]) pour déterminer le temps de sommeil. Sans cela, cela semble très irréaliste sur ma machine. Ces temps sont analysés avant la boucle (lors d'un premier appel au sommeil) car l'analyse à l'intérieur de la boucle est trop lente.

2) N'imprimez pas les lignes où le temps écoulé depuis le démarrage est supérieur à 16 secondes. Ce nombre spécifique dépend de la machine, mais le but est d'éviter d'imprimer des éléments dmesg ultérieurs qui proviennent de l'insertion / du retrait de clés USB, etc. et qui ne sont pas liés au démarrage.

3) Faites tout cela dans une fenêtre de terminal plein écran avec un fond noir et du texte blanc. Félicitations à Mechanical Snail pour cette astuce utilisée dans: Créez une image PNG avec "Hello World!" avec des API de programmation, dans le code le plus court possible

4) Coupez le son à l'arrêt, restaurez le volume une fois le script terminé.

5) Cachez le curseur de la souris, restaurez-le lorsque le script se termine.

6) Affichez les écrans de démarrage du BIOS et de Syslinux.

Fonctionne avec: 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
C'est vraiment bon et de loin le plus impressionnant que j'ai pu tester jusqu'à présent.

très bel écran de démarrage
Claudiu

Haha, tu as lié ma propre question! Mais c'est un très bon code là-bas. Je vais l'essayer.
figgycity50

cat /etc/issue | tail -n +2 : utilisation inutile du chat . tail -n +2 /etc/issueest plus simple, surtout quand il n'y a pas de pipeline.
Peter Cordes

Bon point. Corrigé et corrigé les liens rompus.
2018 semi-extrinsèque

12

Commodore 64

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

L'interpréteur BASIC affichera READY.automatiquement l' invite.


2
Je suggère de changer la ligne 1 en: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... pour vous assurer que les couleurs sont correctes.
Mark

+1 pour avoir apporté une larme à mes yeux, même si elle ne respecte pas les règles.
ClickRick

10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
Sur mon Ti-83 Plus, il affiche "Terminé", ne sais pas si cela enfreint les règles ...
Joshua

1
Pour éviter le "Terminé", vous devez ajouter une ligne supplémentaire avec un seul devis.
Timtech

Cela ne simule pas un redémarrage. Si vous appuyez simplement sur 2ND + ON puis sur ON à nouveau, vous ne mettez l'appareil en veille et le réveiller affiche (dans la plupart des cas) l'écran que vous aviez lorsque vous le mettez en veille. Un vrai redémarrage est plus difficile à faire. Il existe des moyens de le faire sans retirer la batterie, mais c'est le plus simple. Donc, ce que vous voyez après avoir changé les piles, c'est ce que le programme doit simuler. C'est plus difficile, mais également possible dans 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

C'est bien si exécuté à partir d'un terminal virtuel. Existe-t-il un moyen de le faire en plein écran s'il est démarré dans un xterm? Je suppose qu'à ce stade, vous implémentez essentiellement un économiseur d'écran.

@Lembik xterm -fullscreen?


Je l'ai essayé sur Mac; ne fonctionne pas.
Jwosty

2
@Jwosty Sur OS X (Mavericks, 10.9), vous devez disposer de privilèges de super-utilisateur, remplacez-les dmesgpar sudo dmesg. De plus, / etc / issue n'existe pas sur OS X.
CousinCocaine

5

Windows 8

Tentative de mauvaise qualité, je ne sais pas comment utiliser le plein écran automatiquement. J'ai essayé.

<!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
Vous pouvez essayer de rechercher 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

Maintenant mis à jour!

Fonctionnalités:

  • Écran blanc
  • Écran blanc avec logo Apple et son bung
  • Éléments téléchargés depuis GitHub à l'aide de urlib
  • Verrouille le Mac de l'utilisateur en préservant tout travail à l'aide d'une commande de terminal et os.system()

Agréable. Minuscule piqûre - les règles disent: "Si vous devez utiliser des images externes pour rendre le redémarrage plus réaliste, votre code devrait les récupérer automatiquement sur le Web."
semi-extrinsèque

@ semi-extrinsic En y regardant, c'est plus gênant que ça en vaut la peine, j'ai quand même dû éditer l'image et Pygame n'est pas amical avec n'importe quel type de fichier qui n'est pas un bitmap Windows, donc je pense que je le laisse tel qu'il est pour l'instant.
Harry Beadle

1
@ semi-extrinsèque Scrap mon commentaire précédent, fonctionnalité ajoutée.
Harry Beadle

Cela ne montre que le logo Apple en plein écran pendant quelques secondes. Il a définitivement besoin du "Bung" :)

@Lembik Je l'ai ajouté maintenant, en plus de déplacer les actifs vers GitHub pour plus de fiabilité :)
Harry Beadle

2

Celui-ci fait Linux avec les paramètres "quiet" et "init = / bin / sh"

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

les systèmes affichent généralement une image ou une sortie console. et le bios de tout le monde n'est pas sur f12: P
masterX244

1
@ masterX244 - l'image est une option de construction configurable sous linux. avec silencieux il n'y a pas de sortie du noyau et avec init = / bin / sh il n'y a pas de sortie de démarrage car l'init consiste simplement à démarrer un shell. Vous devriez l'essayer un jour et voir exactement ce qui est nécessaire pour démarrer X. avec devtmfs + automount activé, je peux atteindre X en <0,2sec avec une ligne.
technosaurus

ahh, pas une config commune c'est pourquoi j'ai commenté
masterX244
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.