完全に偽の再起動[終了]


21

この挑戦は簡単です。コンピューターの完全な再起動のように見えるコードを作成します。実際の再起動ではないことを示す画面に何も表示してはならず、再起動後に表示される通常のログイン画面で終了する必要があります。

ルール。

  1. 模倣したいOSを選択できます。たとえば、Windowsまたは選択した他の組み合わせからLinuxを再起動できます。
  2. このコードは、完全なシャットダウン/再起動シーケンスを全画面で表示する必要があります。
  3. これは人気コンテストなので、涼しいほど良いです。
  4. 実際には、コードは完全に無害で、再起動を行わず、いつでも簡単に終了できる必要があります。
  5. 再起動をよりリアルに見せるために外部イメージを使用する必要がある場合、コードはそれらをWebから自動的に取得する必要があります。
  6. コードは自己完結型であり、標準の無料のライブラリまたはツールのみに依存し、提供する指示に従うことで簡単に実行できる必要があります。
  7. がんばろう!

人気コンテストなので、2014年6月1日に投票数が最も多い回答に勝ちます。


質問を絞り込むためのリクエストに続いて、追加のルールがあります。

  • システムは、Windowsのすべてのバージョン、またはLinuxまたはOS XのMint、Ubuntu、Debian、Fedora、Archlinux、またはMageiaのディストリビューションを模倣する必要があります。

興味のある人は、xtermで起動する場合でもフルスクリーンを使用するためのいくつかの方法が提案されているPitch dark(Earth Hourの記憶)を見たいと思うかもしれません。


2
現状では、この質問は広すぎます。偽装するシステムを制限しないことで、(少なくとも-このリストは網羅的ではないかもしれません)問題が発生します:a)即座に再起動し、1つの画像を表示することで偽装できる古いROMベースのシステム b)たとえば、実行しているコンピューターがマルチヘッドであり、偽造されたOSがマルチヘッド(またはヘッド)をサポートしていない場合に、偽造品が受け入れ基準を満たしているかどうかを判断します。
ピーターテイラー

@PeterTaylorタイプa)の回答が低票を獲得することを望んでいました。これは人気のコンテストなので、大丈夫です。ポイントb)を処理するためにそれを洗練するのを手伝うことができれば、私は非常に感謝します。

問題b)に対する明白な解決策は、あなたの解決策は模倣するシステムの下でのみ動作する必要があると言って、模倣できるシステムを制限することによって質問を絞り込むことです。しかし、それでも多くの試みは、IBM互換マシンで利用可能なさまざまなBIOSによって失敗する運命にあります。
ピーターテイラー

@PeterTaylorありがとう。範囲を大幅に狭めました。今はどうですか?

ああ、私はほとんど純粋なArchLinuxに完璧なソリューションを持っています(ブートスプラッシュなし、カーネルメッセージとBIOSのみ)。私は言わなければならない、私はいくつかのきれいなグラフィックスを表示するためだけにブート時にCPUサイクルを浪費するポイントを理解したことはありません。

回答:


18

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

私は@TheDoctorによる回答を受け取り、それを実行しました。このバージョンには多くの改善があり、私のArch Linuxシステムの経験豊富なユーザー(私)に99%説得力があります。Zshには配列と浮動小数点のサポートが優れているため、私はZshを使用しています。
依存関係:feh、unclutter、amixer、zsh、xterm

改善点:

1)起動からの時間であるdmesgによって最初の列に印刷された数値(例:[0.000000])を使用して、スリープ時間を決定します。これがないと、私のマシンでは非常に非現実的に見えます。これらの時間は、ループ内での解析が遅すぎるため、ループの前に(スリープの初期呼び出しで)解析されます。

2)ブートからの時間が16秒を超える行を印刷しないでください。この特定の数値はマシンに依存しますが、ポイントは、USBスティックなどの挿入/取り外しなどに由来し、起動に関係のない後のdmesg-stuffの印刷を避けることです。

3)これをすべて、黒の背景と白いテキストのフルスクリーンターミナルウィンドウで行います。このトリックを使用したMechanical Snailへの称賛:「Hello World!」でPNG画像を作成する プログラミングAPIを使用して、可能な限り最短のコードで

4)シャットダウン時に音声をミュートし、スクリプトが終了したら音量を復元します。

5)マウスカーソルを非表示にし、スクリプトが終了したら復元します。

6)BIOSおよびSyslinuxスプラッシュ画面を表示します。

:で実行 xtermの-fu -fg白-bg黒-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特にパイプラインがない場合はより簡単です。
ピーター

いい視点ね。それを修正し、壊れたリンクを修正しました。

12

コモドール64

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

BASICインタープリターは、READY.プロンプトを自動的に表示します。


2
行1を次のように変更することをお勧めします: 1 POKE 53280,6:POKE 53281,14:?CHR$(159):?CHR$(147) ...色が正しいことを確認します。
マーク

ルールを満たしていないにも関わらず、涙を流してくれた+1。
ClickRick

10

TI-ベーシック

AxesOff
GridOff
LabelOff
CoordOff
ClrDraw
DispGraph
ClrHome

2
...私のTi-83 PLUSの上には、「完了」を示し、知らんこの休憩ルールを場合
ジョシュア

1
「完了」を回避するには、一重引用符で余分な行を追加する必要があります。
ティムテック

これは再起動をシミュレートしません。2ND + ONを押してから再びONを押すと、デバイスをスタンバイ状態にし、スリープ状態に戻すと(ほとんどの場合)画面が表示されます。実際の再起動は困難です。バッテリーを取り外さずにそれを行う方法がありますが、それが最も簡単な方法です。したがって、バッテリーを交換した後に表示されるのは、プログラムがシミュレートするものです。それは難しいですが、TI-Basicでも可能です。
ファビアンローリング

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

@professorfishcodegolf.stackexchange.com/questions/26697/…のように

Macで試してみました。動作しません。
ジョスティ

2
@Jwosty上でOS X(マーベリックス、10.9)あなたは、スーパーユーザー権限を持っているので、交換する必要があるdmesgsudo dmesg。さらに/ etc / issueはOS Xに存在しません。
CousinCocaine

5

ウィンドウズ8

見掛け倒しの試み、私は自動全画面表示する方法を理解することはできません。私は試した。

<!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

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

更新されました!

特徴:

  • 空白の画面
  • Apple Logo とBung Sound付きの白い画面
  • GitHubからダウンロードしたアセット urlib
  • 端末コマンドを使用して作業を保持しているユーザーのMacをロックし、 os.system()

いいね ちょっとした工夫-「再起動をよりリアルに見せるために外部イメージを使用する必要がある場合、コードはWebから自動的にそれらを取得する必要があります。」
半外因性

@ semi-extrinsicそれを見て、それは価値があるよりも面倒です、とにかく画像を編集する必要があり、PygameはWindowsビットマップではないファイルタイプと友好的ではないので、私はそれを今のままにしておくと思います。
ハリービードル

1
@ semi-extrinsic以前のコメントを破棄し、機能を追加しました。
ハリービードル

これにより、リンゴのロゴが数秒間だけ全画面表示されます。間違いなく「Bung」が必要です:)

@Lembikこれを追加し、信頼性のためにアセットをGitHubに移動しました:)
ハリービードル

2

これは、パラメーター「quiet」および「init = / bin / sh」を使用してLinuxを実行します

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

通常、システムは画像またはコンソール出力を表示します。全員の
略歴が

1
@ masterX244-イメージは、Linuxで構成可能なビルドオプションです。quietではカーネル出力はありません。init= / bin / shでは、initは単にシェルを起動することになるため、起動出力はありません。いつか試して、Xを起動するために必要なものを正確に確認する必要があります。devtmfs+ automountを有効にすると、1ライナーで0.2秒未満でXに到達できます。
テクノサウルス

私はコメントし、なぜああ、ない一般的な設定はthatsの
masterX244
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.