#!/bin/sh set -e usage="Usage: $0 [ [(0|90|128|270)]]\n" err_msgs= command -v chvt >/dev/null || err_msgs="${err_msgs}"'Need `chvt`\n' command -v openvt >/dev/null || err_msgs="${err_msgs}"'Need `openvt`\n' command -v fgconsole >/dev/null || err_msgs="${err_msgs}"'Need `fgconsole`\n' [ -n "$err_msgs" ] && err_msgs="${err_msgs}"'e.g. install the `kbd` package\n' [ -x build/gfx_test ] || \ err_msgs="${err_msgs}"'Please run from *libgfxinit* source dir and build `gfx_test` first.\n' [ "$#" -gt 2 ] && err_msgs="${err_msgs}${usage}" if [ -n "$err_msgs" ]; then printf "$err_msgs" exit 1 fi if [ "$#" -lt 1 ]; then # default duration of 5s set 5 fi reload_i915=0 prepare_vt() { # switch VT, we might be in X orig_vt=`fgconsole` openvt -s -- true # poll until the VT switch is done while [ `fgconsole` -eq $orig_vt ]; do :; done # take i915 out of charge for vtcon in /sys/devices/virtual/vtconsole/vtcon*; do if grep -q frame\ buffer $vtcon/name >/dev/null 2>&1; then echo 0 >$vtcon/bind break fi done # try unloading it if modprobe -r i915 >/dev/null 2>&1; then reload_i915=1 fi } restore_vt() { # reload i915 if [ $reload_i915 -eq 1 ]; then modprobe i915 modeset=1 else # put i915 back in charge for vtcon in /sys/devices/virtual/vtconsole/vtcon*; do if grep -q dummy $vtcon/name >/dev/null 2>&1; then echo 0 >$vtcon/bind break fi done fi # return to original VT chvt $orig_vt } prepare_vt build/gfx_test "$@" || true restore_vt