#!/bin/bash # Helpful to read output when debugging set -x long_delay=10 medium_delay=5 short_delay=1 echo "Beginning of startup!" function stop_display_manager_if_running { # Stop dm using systemd if command -v systemctl; then if systemctl is-active --quiet "$1.service" ; then echo $1 >> /tmp/vfio-store-display-manager systemctl stop "$1.service" fi while systemctl is-active --quiet "$1.service" ; do sleep "${short_delay}" done return fi # Stop dm using runit if command -v sv; then if sv status $1 ; then echo $1 >> /tmp/vfio-store-display-manager sv stop $1 fi fi } # Stop currently running display manager if test -e "/tmp/vfio-store-display-manager" ; then rm -f /tmp/vfio-store-display-manager fi stop_display_manager_if_running sddm stop_display_manager_if_running gdm stop_display_manager_if_running lightdm stop_display_manager_if_running lxdm stop_display_manager_if_running xdm stop_display_manager_if_running mdm stop_display_manager_if_running display-manager # Unbind VTconsoles if currently bound (adapted from https://www.kernel.org/doc/Documentation/fb/fbcon.txt) if test -e "/tmp/vfio-bound-consoles" ; then rm -f /tmp/vfio-bound-consoles fi for (( i = 0; i < 16; i++)) do if test -x /sys/class/vtconsole/vtcon${i}; then if [ `cat /sys/class/vtconsole/vtcon${i}/name | grep -c "frame buffer"` \ = 1 ]; then echo 0 > /sys/class/vtconsole/vtcon${i}/bind echo "Unbinding console ${i}" echo $i >> /tmp/vfio-bound-consoles fi fi done # Unbind EFI-Framebuffer if test -e "/tmp/vfio-is-nvidia" ; then rm -f /tmp/vfio-is-nvidia fi if lsmod | grep "nvidia" &> /dev/null || lsmod | grep "nouveau" &> /dev/null ; then echo "true" >> /tmp/vfio-is-nvidia echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind fi echo "End of startup!"