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