Khởi động lại hoàn toàn giả [đóng]


21

Thử thách này rất đơn giản. Viết mã tạo ra những gì trông giống hệt như khởi động lại toàn bộ máy tính. Nó không được hiển thị bất cứ thứ gì trên màn hình cho thấy nó không phải là khởi động lại thực sự và sẽ kết thúc ở màn hình đăng nhập bình thường mà bạn sẽ nhận được sau khi khởi động lại.

Quy tắc.

  1. Bạn có thể chọn bất kỳ hệ điều hành nào bạn muốn bắt chước. Ví dụ: bạn có thể khởi động lại vào Linux từ Windows hoặc bất kỳ kết hợp nào bạn chọn.
  2. Mã sẽ hiển thị toàn màn hình tắt / khởi động lại toàn màn hình mà không có dấu hiệu cho thấy nó không có thật.
  3. Đây là một cuộc thi phổ biến nên càng mát càng tốt.
  4. Mã trong thực tế phải hoàn toàn vô hại, thực hiện không khởi động lại và b dễ dàng thoát ra bất cứ lúc nào.
  5. Nếu bạn cần sử dụng các hình ảnh bên ngoài để làm cho việc khởi động lại trông thực tế hơn thì mã của bạn sẽ tự động lấy chúng từ web.
  6. Mã của bạn phải được khép kín, chỉ dựa vào các thư viện hoặc công cụ có sẵn miễn phí tiêu chuẩn và dễ dàng thực thi bằng cách làm theo các hướng dẫn bạn cung cấp.
  7. Chúc may mắn!

Vì đây là một cuộc thi phổ biến, tôi sẽ trao giải cho câu trả lời có số phiếu bầu cao nhất vào ngày 1 tháng 6 năm 2014.


Sau một yêu cầu để thu hẹp câu hỏi, đây là một quy tắc bổ sung.

  • Hệ thống nên bắt chước bất kỳ phiên bản Windows hoặc Mint, Ubuntu, Debian, Fedora, Archlinux hoặc Mageia của Linux hoặc OS X. Để có thêm sự mát mẻ, bạn nên tắt cái này và mở cái kia.

Những người quan tâm có thể muốn nhìn vào Bóng tối (hồi tưởng Giờ Trái đất) trong đó một số cách được đề xuất để sử dụng toàn màn hình ngay cả khi bắt đầu trong xterm.


2
Khi nó đứng, câu hỏi này là quá rộng. Bằng cách không hạn chế hệ thống bị làm giả, nó chạy vào (ít nhất - danh sách này có thể không đầy đủ): a) với các hệ thống dựa trên ROM cũ khởi động lại ngay lập tức và có thể được làm giả bằng cách hiển thị một hình ảnh; b) với việc xác định liệu một kẻ giả mạo có đáp ứng các tiêu chí chấp nhận hay không, ví dụ như máy tính tôi đang chạy trên đó là đa đầu và hệ điều hành giả mạo không hỗ trợ nhiều đầu (hoặc bất kỳ đầu nào).
Peter Taylor

@PeterTaylor Tôi đã hy vọng rằng câu trả lời loại a) sẽ chỉ nhận được số phiếu thấp và vì đây là một cuộc thi phổ biến sẽ ổn. Nếu bạn có thể giúp tôi tinh chỉnh nó để xử lý điểm b) Tôi sẽ rất biết ơn.

Giải pháp rõ ràng cho vấn đề b) là thu hẹp câu hỏi bằng cách nói rằng giải pháp của bạn chỉ cần hoạt động theo hệ thống mà nó bắt chước và bằng cách hạn chế các hệ thống có thể được bắt chước. Nhưng ngay cả sau đó, nhiều nỗ lực đã thất bại bởi nhiều loại BIOS có sẵn cho các máy tương thích IBM.
Peter Taylor

@PeterTaylor Cảm ơn. Tôi đã thu hẹp rất nhiều phạm vi. Làm thế nào bây giờ?

Gah, tôi gần như đã có một giải pháp hoàn hảo cho ArchLinux thuần túy (không có giật gân khởi động, chỉ có thông điệp kernel và BIOS). Tôi phải nói rằng, tôi chưa bao giờ hiểu điểm lãng phí chu kỳ CPU khi khởi động chỉ để hiển thị một số đồ họa đẹp.
bán bên ngoài

Câu trả lời:


18

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

Tôi lấy câu trả lời của @TheDoctor và chạy theo nó. Phiên bản này có nhiều cải tiến và có sức thuyết phục 99% với người dùng có kinh nghiệm (tôi) trên hệ thống Arch Linux của tôi. Tôi sử dụng Zsh vì nó có hỗ trợ số và dấu phẩy động tốt.
Phụ thuộc: feh, unclutter, amixer, zsh, xterm

Cải tiến:

1) Sử dụng số được in trong cột đầu tiên của dmesg, đó là thời gian kể từ khi khởi động, (ví dụ [0,000000]) để xác định thời gian ngủ. Không có cái này thì nó trông rất phi thực tế trên máy của tôi. Những lần này được phân tích cú pháp trước vòng lặp (trong một cuộc gọi sớm để ngủ) vì phân tích cú pháp bên trong vòng lặp quá chậm.

2) Không in các dòng trong đó thời gian kể từ khi khởi động lớn hơn 16 giây. Con số cụ thể này phụ thuộc vào máy, nhưng vấn đề là tránh in các công cụ dmesg sau này xuất phát từ việc chèn / tháo các thanh usb, v.v. và không liên quan đến việc khởi động.

3) Thực hiện tất cả điều này trong một cửa sổ đầu cuối toàn màn hình với nền đen và văn bản màu trắng. Kudos to Mechanical Snail cho thủ thuật này được sử dụng trong: Tạo hình ảnh PNG với "Hello World!" với các API lập trình, với mã ngắn nhất có thể

4) Tắt âm thanh khi tắt máy, khôi phục âm lượng khi tập lệnh kết thúc.

5) Ẩn con trỏ chuột, khôi phục khi tập lệnh kết thúc.

6) Hiển thị màn hình giật gân BIOS và Syslinux.

Chạy với: xterm -fu -fg trắng -bg đen -e '/ usr / bin / zsh fake-reboot.sh'

Mã số:

#!/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
Điều này thực sự tốt và cho đến nay là ấn tượng nhất mà tôi có thể thử nghiệm cho đến nay.

rất đẹp, màn hình khởi động nhiều
Claudiu

Haha, bạn liên kết câu hỏi của riêng tôi! Nhưng đó là mã rất tốt đó. Tôi sẽ thử nó.
figgycity50

cat /etc/issue | tail -n +2 : sử dụng vô dụng của mèo . tail -n +2 /etc/issueđơn giản hơn, đặc biệt là khi không có đường ống dẫn.
Peter Cordes

Điểm tốt. Đã sửa nó và sửa các liên kết bị hỏng.
bán ngoài

12

Hàng hóa 64

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

Intepreter BASIC sẽ READY.tự động hiển thị lời nhắc.


2
Tôi khuyên bạn nên thay đổi dòng 1 thành: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ... để đảm bảo màu sắc chính xác.
Đánh dấu

+1 để mang lại một giọt nước mắt cho tôi, mặc dù nó không đáp ứng các quy tắc.
ClickRick

10

TI-Basic

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
Trên Ti-83 Plus của tôi, nó hiển thị "Xong", dunno nếu điều này phá vỡ quy tắc ...
Joshua

1
Để tránh "Xong", bạn nên thêm một dòng bổ sung với một trích dẫn.
Timtech

Điều này không mô phỏng khởi động lại. Nếu bạn chỉ cần nhấn 2ND + BẬT rồi BẬT lại, bạn chỉ đặt thiết bị ở chế độ chờ và đánh thức thiết bị (trong hầu hết các trường hợp) màn hình mà bạn có khi đặt thiết bị ở chế độ chờ. Một khởi động lại thực sự là khó khăn hơn để làm. Có nhiều cách để làm điều đó mà không cần tháo pin, nhưng đó là cách dễ nhất. Vì vậy, những gì bạn thấy sau khi thay đổi pin là những gì chương trình nên mô phỏng. Điều đó khó hơn, nhưng cũng có thể có trong 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

Điều này là tốt nếu chạy từ một thiết bị đầu cuối ảo. Có cách nào để làm cho nó toàn màn hình nếu nó được bắt đầu trong xterm không? Tôi cho rằng tại thời điểm đó bạn đang thực hiện một trình bảo vệ màn hình.

@Lembik xterm -fullscreen?


Đã thử nó trên Mac; không hoạt động.
Jwosty

2
@Jwosty Trên OS X (Mavericks, 10.9) bạn cần có các đặc quyền siêu người dùng, vì vậy hãy thay thế dmesgbằng sudo dmesg. Futhermore / etc / vấn đề không tồn tại trên OS X.
CousinCocaine

5

Windows 8

Nỗ lực kém chất lượng, tôi không thể tìm ra cách tự động toàn màn hình. Tôi đã thử.

<!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
Bạn có thể thử tìm kiếm API HTML5 Element.RequestFullScreen()( developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/
mẹo

4

OSX Python / Pygame

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

Bây giờ cập nhật!

Tính năng, đặc điểm:

  • Màn hình trống
  • Màn hình trắng với Logo Apple và Âm thanh Bung
  • Tài sản được tải xuống từ GitHub bằng urlib
  • Khóa máy Mac của người dùng bảo vệ mọi công việc bằng lệnh đầu cuối và os.system()

Tốt đẹp. Tiểu cảnh - quy tắc nói: "Nếu bạn cần sử dụng hình ảnh bên ngoài để làm cho việc khởi động lại trông thực tế hơn thì mã của bạn sẽ tự động lấy chúng từ web."
bán ngoài

@ semi-extrinsic Nhìn vào nó, nó phiền hơn giá trị của nó, dù sao tôi cũng phải chỉnh sửa hình ảnh và Pygame không thân thiện với bất kỳ loại tệp nào không phải là Windows Bitmap, vì vậy tôi nghĩ bây giờ tôi để nó như vậy.
Harry Beadle

1
@ semi-extrinsic Phế liệu bình luận trước đây của tôi, chức năng được thêm vào.
Harry Beadle

Điều này chỉ hiển thị logo táo toàn màn hình trong vài giây. Nó chắc chắn cần "Bung" :)

@Lembik Tôi đã thêm rằng bây giờ, cùng với việc chuyển tài sản sang GitHub để đảm bảo độ tin cậy :)
Harry Beadle

2

Cái này không có linux với các tham số "quiet" và "init = / bin / sh"

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

thông thường các hệ thống hiển thị hình ảnh hoặc đầu ra giao diện điều khiển. và không phải bios của mọi người là trên f12: P
masterX244

1
@ masterX244 - hình ảnh là một tùy chọn xây dựng cấu hình trong linux. với yên tĩnh không có ouput kernel và với init = / bin / sh không có đầu ra khởi động vì init chỉ đơn giản là khởi động shell. Thỉnh thoảng bạn nên thử nó và xem chính xác những gì cần thiết để bắt đầu X. với devtmfs + automount được bật, tôi có thể truy cập X trong <0,2 giây với 1 lớp lót.
Technosaurus

ahh, không phải là một cấu hình phổ biến mà tại sao tôi nhận xét
masterX244
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.