Tamamen sahte bir yeniden başlatma [kapalı]


21

Bu meydan okuma basittir. Bilgisayarın tam olarak yeniden başlatılması gibi görünen bir kod yazın. Ekranda gerçek bir yeniden başlatma olmadığını belirten hiçbir şey göstermemelidir ve yeniden başlattıktan sonra alacağınız normal giriş ekranında bitmesi gerekir.

Kurallar.

  1. Taklit etmek istediğiniz herhangi bir işletim sistemi seçebilirsiniz. Örneğin, Linux’tan Windows’tan veya seçtiğiniz herhangi bir kombinasyondan yeniden başlatabilirsiniz.
  2. Kod, gerçek olmadığına dair hiçbir işaret olmadan tam kapatma / yeniden başlatma sırasını tam ekran olarak göstermelidir.
  3. Bu bir popülerlik yarışmasıdır, bu yüzden daha iyi.
  4. Kodun gerçekte tamamen zararsız olması, yeniden başlatma işlemi yapmaması ve herhangi bir noktada bırakması kolay olması gerekir.
  5. Yeniden başlatmanın daha gerçekçi görünmesi için harici görüntüleri kullanmanız gerekiyorsa, kodunuz web'den otomatik olarak bunları almalıdır.
  6. Kodunuz kendi içinde bulunmalı, yalnızca standart olarak ücretsiz sunulan kütüphanelere veya araçlara dayanmalı ve sağladığınız talimatları izleyerek kolayca çalıştırılabilir olmalıdır.
  7. İyi şanslar!

Popülerlik yarışması olduğu için 1 Haziran 2014'te en yüksek oyu alan cevabı kazanacağım.


Soruyu daraltma isteğinin ardından, burada ek bir kural var.

  • Sistem, herhangi bir Windows sürümünü veya Linux veya OS X'in Nane, Ubuntu, Debian, Fedora, Archlinux veya Mageia dağıtımlarını taklit etmeli.

İlgilenen kişiler, bir xterm ile başlarken bile tam ekranı kullanmanın birkaç yolunun önerildiği Pitch dark'a (Dünya Saati anma) bakmak isteyebilir .


2
Halbuki bu soru çok geniş. Sahte olması gereken sistemi kısıtlamamak suretiyle, (en azından - bu liste ayrıntılı olmayabilir) sorunlara yol açar: a) anında yeniden başlatılan ve tek bir resmi göstererek sahte olabilen eski ROM tabanlı sistemlerde; b) Sahte bir işletim sisteminin çok kafalı olduğu ve sahte işletim sisteminin çok kafalı (veya hiç bir kafayı) desteklemediği durumlarda, örneğin sahte çalıştığını belirleme kriterleri yerine getirip getirmediğinin belirlenmesi ile.
Peter Taylor

@PeterTaylor a) tipindeki cevapların sadece düşük oy alacağını ve bunun iyi olacağını söyleyen bir popülerlik yarışması olmasını umuyordum. Eğer b) konusunu ele almam için iyileştirmeme yardım edersen çok minnettar olurum.

Sorunun b) bariz çözümü, çözümünüzün sadece taklit ettiği sistemde çalışması gerektiğini ve taklit edilebilecek sistemleri kısıtlayarak söyleyerek soruyu daraltmaktır. Ancak o zaman bile, IBM uyumlu makineler için mevcut olan çeşitli BIOS'lar başarısızlıkla sonuçlanmaya çalışılıyor.
Peter Taylor

@PeterTaylor Teşekkürler. Kapsamı büyük ölçüde daralttım. Şimdi nasıl?

Gah, saf ArchLinux için neredeyse mükemmel bir çözüm buldum (açılış sıçraması yok, sadece çekirdek mesajları ve BIOS). Söylemeliyim ki, sadece güzel grafikler görüntülemek için açılışta CPU çevrimlerini boşa harcayacağımı hiç anlamadım.
yarı dışsal

Yanıtlar:


18

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

Cevabı @TheDoctor tarafından aldım ve onunla koştum. Bu sürüm birçok geliştirmeye sahip ve% 99'u Arch Linux sistemimde deneyimli bir kullanıcıyı (beni) ikna ediyor. İyi dizi ve kayan nokta sayı desteği olduğundan Zsh kullanıyorum.
Bağımlılıklar: feh, unclutter, amixer, zsh, xterm

İyileştirmeler:

1) İlk sütunda yazdırılan sayıyı önyüklemeden sonraki zaman olan dmesg ile kullanın (örneğin, [0.000000]), uyku zamanını belirlemek için. Bu olmadan makinemde çok gerçekçi görünüyor. Bu zamanlar döngüden önce ayrıştırılır (erken arama çağrısı sırasında) çünkü döngü içinde ayrıştırma çok yavaş olur.

2) Önyüklemenin 16 saniyeden daha uzun olduğu yerlerde çizgiler yazdırmayın. Bu özel sayı makineye bağlıdır, ancak mesele daha sonra usb çubukları, vb. Takmak / çıkarmaktan gelen dmesg-materyallerini yazdırmaktan kaçınmaktır ve önyükleme ile ilgisi yoktur.

3) Bütün bunları, siyah arkaplan ve beyaz yazı içeren tam ekran bir terminal penceresinde yapın. Bu hile için Mekanik Salyangoz için Kudos: "Hello World!" İle bir PNG görüntüsü hazırlayın programlama API'leri ile mümkün olan en kısa kod

4) Kapatma sırasında sesi kapatın, komut dosyası bittiğinde sesi yeniden açın.

5) Fare imlecini gizleyin, komut dosyası tamamlandığında geri yükleyin.

6) BIOS ve Syslinux açılış ekranlarını gösterin.

Çalıştır: xterm -fu -fg beyaz -bg siyah -e '/ usr / bin / zsh fake-reboot.sh'

Kod:

#!/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
Bu gerçekten çok iyi ve bugüne kadar test edebildiğim en etkileyici olanı.

çok güzel, çok açılış ekranı
Claudiu

Haha, kendi soruma bağladın! Ama bu orada çok iyi bir kod. Ben deneyeceğim.
figgycity50

cat /etc/issue | tail -n +2 : işe yaramaz kedi kullanımı . tail -n +2 /etc/issueözellikle boru hattı olmadığında daha basittir.
Peter Cordes

İyi bir nokta. Sabitledi ve kırılan bağlantıları düzeltti.
yarı-extrinsik

12

Commodore 64

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

BASIC işlemcisi, READY.istemi otomatik olarak görüntüler.


2
1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) Renklerin doğru olduğundan emin olmak için 1. satırı değiştirmeyi öneririm .
Mark,

Kurallara uymasa da gözüme göz yaşarttığın için +1.
ClickRick

10

TI-Temel

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
Ti-83 Plus'ımda "Tamamlandı" yazıyor, bu kurallara uymadığı takdirde
Joshua

1
"Tamam" ı önlemek için, tek bir alıntı ile fazladan bir satır eklemelisiniz.
Timtech

Bu bir yeniden başlatmayı simüle etmez. Sadece 2ND + ON tuşlarına ve ardından tekrar AÇIK tuşuna basarsanız, cihazı yalnızca beklemeye alırsınız ve uyandırdığınızda (çoğu durumda) beklemeye aldığınızda sahip olduğunuz ekran gösterilir. Gerçek bir yeniden başlatma yapmak daha zordur. Pili çıkarmadan bunu yapmanın yolları var, ama en kolay olanı bu. Yani pilleri değiştirdikten sonra gördüğünüz programın simüle etmesi gereken şeydir. Bu daha zor, ama TI-Basic'te de mümkün.
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

Sanal bir terminalden çalıştırıyorsanız bu iyidir. Bir xterm'de başlatıldığında tam ekran yapmanın bir yolu var mı? Sanırım bu noktada temel olarak bir ekran koruyucu uyguluyorsunuz.

@Lembik xterm -fullscreen?


Mac üzerinde denedim; çalışmıyor
Jwosty

2
@Jwosty On OS X (Mavericks, 10.9) bunu değiştirmek süper kullanıcı yetkileri olması gerekir dmesgile sudo dmesg. Diğerleri / etc / issue OS X'te mevcut değil.
CousinCocaine

5

Windows 8

Hızlı girişimi, tam ekran otomatik nasıl yapabileceğimi anlayamıyorum. Denedim.

<!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
HTML5 API'sini aramayı deneyebilirsiniz 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

Şimdi güncellendi!

Özellikler:

  • Boş ekran
  • Apple Logo ve Bung Sesi ile Beyaz Ekran
  • Kullanarak GitHub’tan indirilen varlıklar urlib
  • Terminal komutunu kullanarak herhangi bir çalışmayı koruyan kullanıcının Mac'ini kilitler ve os.system()

Güzel. Küçük nitpick - kurallar şöyle der: "Yeniden başlatmayı daha gerçekçi göstermek için harici görüntüleri kullanmanız gerekirse, kodunuz web'den otomatik olarak bunları almalıdır."
yarı-extrinsik

@ semi-extrinsic İçine baktım, değerinden daha zahmetli, görüntüyü yine de düzenlemek zorunda kaldım ve Pygame, Windows Bitmap olmayan bir dosya türüyle uyumlu değil, sanırım şu an olduğu gibi bırakıyorum.
Harry Beadle

1
@ semi-extrinsic Scrap önceki yorumum, işlevsellik eklendi.
Harry Beadle

Bu sadece birkaç saniye için elma logosunun tam ekranını gösterir. Kesinlikle "Bung" a ihtiyacı var :)

@Lembik Ben şimdi şunu da ekledim, varlıkların güvenilirliği için GitHub'a taşınmasıyla birlikte :)
Harry Beadle

2

Bu, "quiet" ve "init = / bin / sh" parametrelerini içeren linux işlevini yerine getirir.

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

genellikle sistemler bir görüntü veya konsol çıktısı gösterir. ve herkesin
bios'u f12'de değil

1
@ masterX244 - görüntü linux'ta yapılandırılabilir bir yapı seçeneğidir. quiet ile çekirdek çıkmazı yoktur ve init = / bin / sh ile bir başlangıç ​​çıktısı yoktur, çünkü init basit bir kabuk başlatmaktır. Bir süre denemelisiniz ve X'i başlatmak için tam olarak neye ihtiyacınız olduğunu görmelisiniz.
technosaurus

ahh, ortak bir yapılandırma değil yorumladı neden
masterX244
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.