완전히 가짜 재부팅 [닫힘]


21

이 도전은 간단합니다. 컴퓨터를 완전히 재부팅하는 것과 똑같이 보이는 코드를 작성하십시오. 실제 재부팅이 아님을 나타내는 화면에는 아무것도 표시되어서는 안되며 재부팅 후 얻을 수있는 일반 로그인 화면에서 완료되어야합니다.

규칙.

  1. 모방하려는 OS를 선택할 수 있습니다. 예를 들어, Windows 또는 선택한 다른 조합에서 Linux로 재부팅 할 수 있습니다.
  2. 코드는 실제 종료 표시가없는 전체 종료 / 재부팅 전체 화면을 표시해야합니다.
  3. 이것은 인기 콘테스트이므로 시원할수록 좋습니다.
  4. 실제로 코드는 완전히 무해하고 재부팅을 수행하지 않고 언제라도 쉽게 종료 할 수 있어야합니다.
  5. 재부팅이보다 사실적으로 보이도록 외부 이미지를 사용해야하는 경우 코드가 웹에서 자동으로 이미지를 가져와야합니다.
  6. 코드는 독립적으로 제공되며 자유롭게 사용할 수있는 표준 라이브러리 나 도구에만 의존해야하며 제공 한 지침에 따라 쉽게 실행 가능해야합니다.
  7. 행운을 빕니다!

인기 콘테스트이므로 2014 년 6 월 1 일에 가장 많은 표를 얻은 답변으로 승리를 거둘 것입니다.


질문을 좁 히라는 요청에 따라 추가 규칙이 있습니다.

  • 시스템은 모든 버전의 Windows 또는 Linux 또는 OS X의 Mint, Ubuntu, Debian, Fedora, Archlinux 또는 Mageia 배포판을 모방해야합니다.

관심있는 사람들은 xterm에서 시작할 때에도 전체 화면을 사용하기 위해 여러 가지 방법이 제안되는 피치 다크 (지구 시간 기억) 를보고 싶을 수 있습니다 .


2
이 질문은 너무 광범위합니다. 위조되어야하는 시스템을 제한하지 않으면 (적어도이 목록은 완전하지 않을 수 있음) 문제가 발생합니다. a) 즉시 재부팅하고 하나의 이미지를 표시하여 위조 될 수있는 오래된 ROM 기반 시스템의 경우 b) 예를 들어 컴퓨터를 실행중인 컴퓨터가 멀티 헤드이고 가짜 OS가 멀티 헤드 (또는 헤드를 전혀 지원하지 않음) 인 경우, 가짜가 허용 기준을 충족하는지 여부를 결정합니다.
피터 테일러

@PeterTaylor 나는 a) 유형의 답변이 낮은 투표권을 얻길 원했고 인기 콘테스트이므로 괜찮을 것으로 기대했습니다. 점 b)를 처리하도록 수정하는 데 도움이된다면 매우 감사 할 것입니다.

문제 b)에 대한 명백한 해결책은 솔루션이 모방 한 시스템에서만 작동하고 모방 될 수있는 시스템을 제한함으로써 해결책을 제시함으로써 문제를 좁히는 것입니다. 그러나 IBM 호환 시스템에 사용 가능한 다양한 BIOS로 인해 많은 시도가 실패 할 수 있습니다.
피터 테일러

@PeterTaylor 감사합니다. 범위를 크게 좁혔습니다. 지금 어때요?

Gah, 나는 순수한 ArchLinux (부팅 스플래시, 커널 메시지 및 BIOS)를위한 완벽한 솔루션을 거의 얻었습니다. 나는 단지 예쁜 그래픽을 표시하기 위해 부팅시 CPU 사이클을 낭비하는 시점을 결코 이해하지 못했다.
세미 외부

답변:


18

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

나는 @TheDoctor의 대답을 받아 그것을 달렸습니다. 이 버전은 많은 개선 사항을 가지고 있으며, Arch Linux 시스템의 숙련 된 사용자에게 99 %의 확신을줍니다. Zsh는 배열과 부동 소수점 숫자가 잘 지원되므로 사용합니다.
종속성 : feh, unclutter, amixer, zsh, xterm

개량:

1) 잠긴 시간을 결정하려면 부팅 이후의 시간 인 dmesg로 첫 번째 열에 인쇄 된 번호 (예 : [0.000000])를 사용하십시오. 이것이 없으면 내 컴퓨터에서 매우 비현실적으로 보입니다. 루프 내부의 구문 분석이 너무 느리기 때문에이 시간은 루프 전에 구문 분석됩니다 (조기 대기 호출시).

2) 부팅 이후 시간이 16 초보다 큰 라인은 인쇄하지 마십시오. 이 특정 번호는 시스템에 따라 다르지만 요점은 USB 스틱 등을 삽입 / 제거하는 등의 부팅 및 부팅과 관련이없는 dmesg 파일의 인쇄를 피하는 것입니다.

3) 검정색 배경과 흰색 텍스트가있는 전체 화면 터미널 창에서이 작업을 모두 수행하십시오. 이 트릭에 사용되는 Mechanical Snail의 장점 : "Hello World!"로 PNG 이미지 만들기 가장 짧은 코드로 프로그래밍 API 사용

4) 종료시 오디오를 음소거하고 스크립트가 완료되면 볼륨을 복원하십시오.

5) 스크립트가 완료되면 마우스 커서를 숨기고 복원하십시오.

6) BIOS 및 Syslinux 시작 화면을 표시하십시오.

다음으로 실행 : xterm -fu -fg white -bg black -e '/ usr / bin / zsh fake-reboot.sh'

암호:

#!/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
이것은 정말 좋으며 지금까지 테스트 할 수 있었던 가장 인상적인 것입니다.

아주 멋지고 많은 부팅 화면
Claudiu

하하, 당신은 내 자신의 질문을 연결했습니다! 그러나 그것은 매우 좋은 코드입니다. 나는 그것을 시도 할 것입니다.
figgycity50

cat /etc/issue | tail -n +2 : 쓸모없는 고양이 사용 . tail -n +2 /etc/issue특히 파이프 라인이 없을 때 더 간단합니다.
Peter Cordes

좋은 지적. 문제를 해결하고 끊어진 링크를 수정했습니다.
semi-exrinsic

12

코모도 64

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

기본 정수기는 READY.프롬프트를 자동으로 표시합니다 .


2
1 줄을 다음과 같이 변경 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) 하여 색상이 올바른지 확인하는 것이 좋습니다 .
Mark

규칙에 맞지 않더라도 눈물을 흘리기 위해 +1.
ClickRick

10

TI 기본

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
내 Ti-83 Plus에서 "완료"를 표시합니다. 이것이 규칙을 어기면 dunno입니다.
Joshua

1
"완료"를 피하려면 작은 따옴표로 줄을 추가해야합니다.
Timtech

이것은 재부팅을 시뮬레이션하지 않습니다. 2ND + ON을 눌렀다가 다시 ON을 누르면 장치가 대기 모드로 전환되고 대기 모드로 전환했을 때의 화면 (대부분의 경우) 만 표시됩니다. 실제 재부팅은 더 어렵습니다. 배터리를 제거하지 않고 할 수있는 방법이 있지만 가장 쉬운 방법입니다. 따라서 배터리를 교체 한 후 프로그램이 시뮬레이션해야합니다. 그것은 어렵지만 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

가상 터미널에서 실행하면 좋습니다. xterm에서 시작된 경우 전체 화면으로 만들 수있는 방법이 있습니까? 그 시점에서 기본적으로 스크린 세이버를 구현한다고 가정합니다.

@Lembik xterm -fullscreen?

마찬가지로 @professorfish codegolf.stackexchange.com/questions/26697/...

Mac에서 시도했습니다. 작동하지 않습니다.
Jwosty

2
@Jwosty에 OS X (매버릭스, 10.9) 그렇게 교체, 슈퍼 유저 권한이 필요 dmesgsudo dmesg. 또한 / etc / issue는 OS X에 존재하지 않습니다.
CousinCocaine

5

윈도우 8

Shoddy 시도, 전체 화면을 자동으로 만드는 방법을 알 수 없습니다. 나는 노력했다.

<!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 Element.RequestFullScreen()( developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/… ) 를 찾아보십시오.
Ismael Miguel

4

파이썬 / 파이 게임 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

이제 업데이트되었습니다!

풍모:

  • 빈 화면
  • Apple 로고 및 Bung Sound가 포함 된 흰색 화면
  • 다음을 사용하여 GitHub에서 다운로드 한 자산 urlib
  • 터미널 명령을 사용하여 작업을 보존하는 사용자의 Mac을 잠그고 os.system()

좋은. 사소한 nitpick-규칙에 따르면 "재부팅을보다 사실적으로 보이기 위해 외부 이미지를 사용해야하는 경우 웹에서 자동으로 코드를 가져와야합니다."
세미 외부

@ semi-extrinsic 그것으로 보아, 그것은 가치보다 더 귀찮았습니다. 어쨌든 이미지를 편집해야했고 Pygame은 Windows Bitmap이 아닌 파일 형식에 익숙하지 않으므로 지금은 그대로 둡니다.
Harry Beadle

1
@ semi-extrinsic 이전 코멘트를 삭제하고 기능을 추가했습니다.
Harry Beadle

몇 초 동안 애플 로고가 전체 화면으로 표시됩니다. 확실히 "Bung"이 필요합니다 :)

@Lembik 나는 신뢰성을 위해 자산을 GitHub로 옮기는 것과 함께 지금 추가했습니다 :)
Harry Beadle

2

이것은 "quiet"과 "init = / bin / sh"매개 변수로 리눅스를 수행합니다.

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

일반적으로 시스템은 이미지 또는 콘솔 출력을 보여줍니다. 그리고 모든 사람의 바이오스가 f12에있는 것은 아닙니다 : p
masterX244

1
@ masterX244-이미지는 리눅스에서 구성 가능한 빌드 옵션입니다. 조용한 경우 커널 출력이없고 init = / bin / sh이면 초기화는 단순히 셸을 시작하기 때문에 시작 출력이 없습니다. devtmfs + automount가 활성화 된 상태에서 X를 시작하는 데 필요한 것을 정확히 확인해야합니다 .1 라이너로 <0.2 초 안에 X에 도달 할 수 있습니다.
technosaurus

ahh, 일반적인 구성이 아닙니다. 내가 언급 한 이유
masterX244
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.